AESは電子政府推奨暗号リストに載ってる共通鍵暗号方式
- 前回の勉強内容
- AESは、暗号化の規格です。
- 電子政府推奨暗号リストは、安全性及び実装性能が確認された暗号方式を載せたリストです。
- AESは、鍵長が長いほど暗号文は解読されにくくなります。
- 最後にAESで暗号化と復号をしてみます。
- 次回の勉強内容
前回の勉強内容
AESは、暗号化の規格です。
- 正式名称 : Advanced(高度な) Encryption(暗号化) Standard(標準)
昔アメリカで標準規格として採用されていたDESにとって変わって登場した暗号化方式です。
暗号化と復号で同じ鍵を使う共通鍵暗号方式です。
暗号方式に関する記述のうち,適切なものはどれか。
使う鍵の組み合わせはこんな感じです。
使う鍵 | 共通鍵暗号方式 | 公開鍵暗号方式 |
---|---|---|
暗号化 | 共通鍵 | 公開鍵 |
復号 | 共通鍵 | 秘密鍵 |
暗号方式のうち,共通鍵暗号方式はどれか。
データベースで管理されるデータの暗号化に用いることができ,かつ,暗号化と復号とで同じ鍵を使用する暗号化方式はどれか。
上記過去問の選択肢を分類するとこんな感じです。
問題の選択肢 | 共通鍵 暗号方式 |
公開鍵 暗号方式 |
暗号方式じゃない |
---|---|---|---|
AES | o | ||
ElGamal暗号 | o | ||
RSA | o | ||
楕円曲線暗号 | o | ||
PKI | PKIは、暗号化技術と電子署名で世の中の安全を守る仕組みです。 | ||
SHA-256 | ハッシュ関数です。 |
データを決まった長さに区切って暗号化するブロック暗号です。
ブロック暗号は、元のデータを決まった長さに区切って、その区切った単位ごとに暗号化します。
この区切ったデータをブロックと言います。
AESでは、このブロックの長さ(ブロック長)を128bitで分けています。
もう一つストリーム暗号という方式があります。
ストリーム暗号は、元のデータを端から1bitまたは1byte単位で次々に暗号化します。
端からバンバン暗号化するのでデータを全部受信していなくてもさくさく暗号化できちゃいます。
だから、早い!
が、ブロック暗号の方が研究が進んでいて安全だそうです。
研究が進んでいるおかげかAESは、早いそうです。
ブロック暗号 | ストリーム暗号 | |
---|---|---|
暗号化の単位 | ブロック | 1bitまたは1byte |
逐次生 | o | |
安全性 | o | |
暗号方式 | DES, AES | RC4 |
電子政府推奨暗号リストは、安全性及び実装性能が確認された暗号方式を載せたリストです。
暗号化技術の安全性を評価したりしている、CRYPTRECというプロジェクトがあります。
- 正式名称 : Cryptography(暗号技術) Research(調査) and Evaluation(評価) Committees(委員会)
CRYPTREC とはCryptography Research and Evaluation Committees の略であり、電子政府推奨暗号の安全性を評価・監視し、暗号技術の適切な実装法・運用法を調査・検討するプロジェクトである。
CRYPTREC | CRYPTRECとは
このCRYPTRECから「電子政府推奨暗号リスト」というものが出されています。
電子政府推奨暗号リストとは,CRYPTRECによって安全性及び実装性能が確認された暗号技術のうち,市場における利用実績が十分であるか今後の普及が見込まれると判断され,当該技術の利用を推奨するもののリストである。
平成27年春期問8 CRYPTREC 暗号リスト|情報処理安全確保支援士.com
AESは、安全性及び実装性能が確認された暗号方式です。
CRYPTREC | CRYPTREC暗号リスト(電子政府推奨暗号リスト)にあるPDFで「電子政府推奨暗号リスト」を確認すると(2021-04-13時点)
「共通鍵暗号」の「128ビットブロック暗号」のところにAESが載っています。
ということで、「CRYPTRECにより安全性及び実装性能が確認された暗号方式」ということですね。
AESは、鍵長が長いほど暗号文は解読されにくくなります。
鍵長は、そのままの意味で鍵の長さ(単位はbit)です。
AESでは、暗号化で使う共通鍵の鍵長が「128bit」「192bit」「256bit」から選べます。
悪い人が共通鍵を総当たりで割り出そうとした時に「0」「1」の組み合わせといえど長くなれば長くなるほど大変になるわけですね。
AES-256で暗号化されていることが分かっている暗号文が与えられているとき,ブルートフォース攻撃で鍵と解読した平文を得るまでに必要な試行回数の最大値はどれか。
- 256
ブルートフォース攻撃は、根性で不正ログインを頑張る総当たり攻撃です。
ブルートフォース攻撃をする悪い人は、復号する共通鍵をどんどん変えて復号を頑張ります。
鍵長が「256bit」の「0」「1」の組み合わせパターンを頑張って鍵を見つけるために最大回鍵を変えて復号を試し続けることになるのです。
頑張りますね。
AESの特徴は、「鍵長によって段数が決まる」です。
AESの特徴はどれか。
- 鍵長によって,段数が決まる。
- 段数は,6回以内の範囲で選択できる。
- データの暗号化,復号,暗号化の順に3回繰り返す。
- 同一の公開鍵を用いて暗号化を3回繰り返す。
暗号化では、ラウンド関数という関数を繰り返し処理します。
その関数を処理する回数を段数とかラウンド数といい、この数が多いほど強度の高い暗号文になります。
鍵長と段数の組み合わせ
鍵長 | 段数 |
---|---|
128bit | 10 |
192bit | 12 |
256bit | 14 |
というわけで、「使う共通鍵の鍵長が大きい」->「暗号化の段数が多い」->「解読されにくい暗号文ができる」ということになります。
最後にAESで暗号化と復号をしてみます。
参考 : コマンドラインで簡単にAES暗号化、または Java での AES 暗号化 - 理系学生日記
# Macに入っているopensslコマンドを使います。 $ openssl version LibreSSL 2.8.3 # 使えるAESの暗号方式をみてみます。 $ openssl list-cipher-commands | grep aes aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb # 鍵長256bitの共通鍵を使ったAESで暗号化します。 $ echo "ponsuke" | openssl aes-256-cbc -e -base64 -p -pass pass:password salt=1CD83F097F07009C key=8E71364EB09F97B6BACAC68B1EB944FC416CE8EBBF81E8B2681667AEE7991D63 # << 共通鍵 iv =68F150FA9F95D8590F8FE50002A1571E U2FsdGVkX18c2D8JfwcAnEg69cNx1g30btqEdInz7TQ= # << 暗号化された暗号文 # 暗号文を復号します。 $ echo "U2FsdGVkX18c2D8JfwcAnEg69cNx1g30btqEdInz7TQ=" | openssl aes-256-cbc -d -base64 -pass pass:password ponsuke