PHPのmcrypt関数で使用する初期化ベクトル(IV)とは公開されてはまずいものなのでしょうか?


PHP の MCrypt_Create_IV 関数に不安定な暗号化の脆弱性
http://www.secureinfo.jp/archives/2007/05/php_mcrypt_crea.html
>攻撃者はこの脆弱性を使い初期化ベクトルの情報を得る事ができます。
>これにより機密情報にアクセスされたり、アプリケーションに不正アクセスされたりします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/07/17 10:32:58
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:ttamo No.1

回答回数175ベストアンサー獲得回数29

ポイント100pt

発見者のブログ

http://blog.php-security.org/archives/80-Watching-the-PHP-CVS.ht...

では、こんなふうに書かれています。

While this (predictable IV) is not a completely dramatic problem, a non random IV will results in a weaker encryption. The bug is therefore a security problem that is NOT mentioned at all in the PHP 5.2.2 and PHP 4.4.7 release notes.

参考意訳:

IV が予知できることは非常に重大な問題というわけではないが、非ランダムな IV は暗号を弱める結果になる。よって、このバグは (PHP 5.2.2 および 4.4.7 のリリースノートで一切言及のない) セキュリティ上の問題だ。

それで、IV がバレること自体は大きな問題ではないようです。

今回の脆弱性は IV をブルートフォースで見破られた「後に」、ずっと同じ IV になっていると、本来あるはずの暗号強度が得られないということのようです。

実際、

http://phpspot.net/php/man/php/function.mcrypt-create-iv.html

にも、以下のように書いてあります。

IV は、単に暗号化ルーチンに異なる初期値を与えるためだけのものです。

この IV は、たとえ要求されていたとしても秘密にしておく必要はありません。

暗号化したデータとともに IV を送信したとしても、セキュリティを損ねることはありません。

とは言うものの、そこで参照されている

http://www.ciphersbyritter.com/GLOSSARY.HTM#IV

を見ると、こういう情報もあります。

While it is often said that IV values need only be random-like or unpredictable, and need not be confidential,

in the case of CBC mode, that advice can lead to man-in-the-middle attacks on the first plaintext block.

If a MITM opponent knows the usual content of the first block,

they can change the IV to manipulate that block (and only that block) to deliver a different address, or different dollar amounts, or different commands, or whatever.

And while the conventional advice is to use a MAC at a higher level to detect changed plaintext,

that is not always desirable or properly executed.

But the CBC first-block problem is easily solved at the CBC level

simply by enciphering the IV and otherwise keeping it confidential,

and that can be reasonable even when a MAC will be used later.

テキトー訳:

よく「IV は乱数っぽければ、つまり予測できなければいいのであって、秘密にする必要はない」と言われるが、

CBC モードの場合、そのアドバイスに従っていると、最初の平文ブロックで man-in-the-middle (中間者盗聴) 攻撃を引き起こしかねない。

もし最初のブロックに通常含まれている内容を中間者が知っていれば、

IV を変えて、そのブロック (「だけ」) を加工し、違う宛先に送らせたり、違う金額、コマンド、等々に書き換えることができる。

一般的には、上位レベルで MAC を使うことにより平文の変更を検出するよう言われているが、

それが常に可能だったり適切に実行されているとは言えない。

しかしこの CBC 第一ブロック問題は、CBC のレベルで容易に解決される。

単に IV を暗号化、さもなくば秘匿すれば良いのだ。

これはしかも、あとで MAC を使うときでさえ、理に適ったことである。

それで、IV が見えても良いか、という質問の答えは、運用の仕方や必要とされるセキュリティによって異なるようです。

ただ、常に危険だというわけではありませんし、最大でも「暗号が弱くなる」という問題しかなさそうです。

id:toyoshi

素晴らしい回答を有難うございます。

楽観的にみれば「実際にはあんまり関係ない」という感じでしょうか。これを機会にもう少し勉強してみることにします。

2007/07/17 10:32:22

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • はてな人力検索より: PHPのmcrypt関数で使用する初期化ベクトル(IV)とは公開されてはまずいものなのでしょうか? 参考: http://www.ciphersbyritter.com/NEWS6/CBCIV.HTM http://www.ciphersbyritter.com/GLOSSA...
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません