暗号初期化ベクトルは役に立つのか?

Peingで表題のような質問をいただきました。少し長くなるので、こちらで回答します。

現在、暗号化ではIV(暗号初期化ベクトル)が不要なECBモードは推奨されず、それらが使用されるCBC等が推奨されています。
しかし、暗号化後の文章も、暗号化初期ベクトル(平文)も同様にDBに直接保存される為、結局のところ意味をなすのでしょうか?
暗号化後の文章が漏れる≒IVが漏れると思いますが、どのような時にIVを設定したことによる恩恵が受けられるのでしょうか?
https://peing.net/ja/q/c63a9669-0d8e-4a23-b7f8-67869bf9e0b0 より引用

結論から言えば、IVは必須です。詳しくは暗号の教科書(手っ取り早いところではWikipediaの暗号利用モードなど)を読んでいただければよいのですが、わかりやすい例を2つ紹介します。

まずは、以下の2つの住所をAES-256、ECBモード(IVなし)で暗号化してみます。

・東京都新宿区西新宿2-8-1 (東京都庁の住所)
・東京都新宿区歌舞伎町1-4-1 (新宿区役所の住所)

これを適当な暗号鍵で暗号化した結果を16進数の形で示します。

5c89371414c4cdc2c086c04b4980a8b451a3a0ac847f7aecfbb3647fc867c5833aa6d3410f18ac5d10a653e698b99b28
5c89371414c4cdc2c086c04b4980a8b494a21bd3c0b7cb8a5abab7b1f15ccbdc3fa47a22a845d3f3df22129d60beaef2

先頭の16バイト相当(16進数で32文字)分がまったく同じですよね。AESのブロック長は128ビット(16バイト)ですが、「東京都新宿区」がUTF-8で18バイトなので、暗号化前の先頭ブロックは、2つの住所でまったく同じなので、暗号結果もECBモードだと同じになるからです。

先頭が同じになるけど平文は分からないから大丈夫だと思いますか? 通常はダメです。攻撃者が住所を知っているデータの中に「東京都新宿区」で始まるものがあれば、暗号文同士を比較することで、攻撃対象の住所が「東京都新宿区」で始まることがわかります。

2番目の例として、ECBモードを使っていたために暗号化したパスワードが解読されてしまったインシデントが実際にあります。以下のブログ記事を参照下さい。

Adobeサイトから漏えいした暗号化パスワードはなぜ解読されたか

ということで、IVがないとまずいという例を紹介しました。

では、ECBモード(IVなし)でも大丈夫なケースはあるでしょうか? あるかないかでいえばありそうな気もしますが、そのためには、ECBモードを使うがゆえのリスク分析をする必要があり、そこに手間を掛ける意味が見出せません。質問者さんは自力でリスク分析はできないですよね。専門家をやとってコンサルティングしてもらいますか? 何百万円も払って結論が「明確なアタックベクタまでは判明していないが念の為CBCモードなど適切な暗号利用モードの利用を推奨」くらいの結論になったらどうします? なので、暗号について詳しくないのであればなおさらIVは使うべきであり、さらに言えば、暗号化ではなく別の方法(暗号論的に安全な乱数を使った実現等)が利用できるのであればそちらをお勧めします。







セキュリティの研究を仕事と趣味でやっていて、趣味の研究結果をブログ記事などで公開しています。研究にあたり、ドメイン名取得や、VPS、AWS等の継続的な費用がかかりますので、支援をいただければ幸いです。 https://twitter.com/ockeghem