web-dev-qa-db-ja.com

CBCモードで非ランダムIVを使用することはなぜ脆弱性なのですか?

IVの目的を理解しています。特にCBCモードでは、これにより、同じ鍵で暗号化された2つのメッセージの最初のブロックが決して同一にならないことが保証されます。しかし、IVが連続している場合、なぜ脆弱性になるのですか? CWE-329 によると、Non-Random IVは辞書攻撃の可能性を考慮しています。 WEPのような実際のプロトコルではIVを隠そうとはしません。攻撃者がIVと暗号テキストメッセージを持っている場合、これはキーに対する辞書攻撃の扉を開きます。ランダムivがこれをどのように変更するかはわかりません。 (私は、wepに対する攻撃がこれより複雑であることを知っています。)

無作為化IVにはどのようなセキュリティ上の利点がありますか?これはまだ「理想的なブロック暗号」の問題ですか? (弱点の可能性のない、完全に安全なブロック暗号。)

41
rook

予測可能なIVは、選択したプレーンテキストによって悪用される可能性があります。

イブが保険会社のDBAであると仮定します。同社は、受診者から病歴に関する真偽のチェックボックスを多数含む病歴を収集しています。この会社は、自身の健康保険プロバイダーにも起こります。イブは、アリスが特に厄介な病状を持っていることを発見できれば、アリスが脅迫される可能性があることを認識しています。ただし、これらの各フィールドの値は暗号化されているため、EveがDBAであっても、暗号化テキストにしかアクセスできません。

CBCでは、IVはプレーンテキストとXORされ(以下の「⊕」で表記)、ブロック暗号を実行します:C1 = Ek(IV⊕P1)。

Eveは保険会社の受益者であるため、自分の医療記録にプレーンテキストを選択でき、DBAであるため、誰でも暗号テキストを調べることができます。予測可能なIVを使用することに加えて、ずさんなアプリケーション開発者は、アプリケーション入力の検証という貧弱な仕事をしました。イブが彼女に適用されるIVを予測できる場合(IVイブ)とアリス(IVアリス)事前に記録しておくと、次のように自分の記録にプレーンテキストを選択できます:Pイブ = IVイブ ⊕IVアリス ⊕「偽」

アプリケーションは、このプレーンテキストを次のように暗号化します。

Cイブ = Ek(IVイブ ⊕Pイブ)= Ek(IVイブ ⊕(IVイブ ⊕IVアリス ⊕ "false"))

IVイブ ⊕IVイブ キャンセル、つまりCイブ = Ek(IVアリス ⊕「false」)

今イブはCを比較できますイブ とCアリス。それらが異なる場合、彼女はアリスがその病状について「真」を入力したに違いないことを知っています。

IVを予測不能にすると、この攻撃が阻止されます。IVを予測不可能にする簡単な方法は、プレーンテキストが提供された後でランダムに選択することです。

95
erickson

他の答えは良いですが、非常に技術的です。

CBCモードで非ランダムIVを使用することの脆弱性はなぜですか?

キーを使用してデータを暗号化する場合、データとキーが同じ(変更されていない)場合、暗号化されたデータは同じになります。暗号化されたデータが同じ場合、暗号化されたデータのセットのパターンを分析して、暗号化されたデータに関する知識を得ることができます。

CBC(Cipher Block Chaining)は、この問題を XORing 前のブロックからの暗号化されたデータと暗号化されるデータで解決します。つまり、キーが同じであっても、前のブロックからの暗号化データが異なる場合、同じデータを持つブロックは異なります。

暗号化されたデータを取得する前のブロックがないため、CBCの問題は最初のブロックをどうするかです。代わりに、データはIV(初期化ベクトル)と呼ばれるランダムビットのブロックとXORされます。

IVのセキュリティは、暗号化されたデータブロックのセキュリティと同じであると考えることができます。つまり、暗号化されたデータを指定できる場合は、IVも指定できます。

7
Trisped

脆弱なWEPを使用して質問を説明したいと思います。現在はWPA2などの他のプロトコルが使用されています。

単純なルールIEEEはそれを言っています:

基本的なルールでは、key + IVを2回使用することはありません

WEPが侵害された理由の1つは、IV生成の理由です。

alt text

図に示すように、攻撃者がIVの生成方法を知っている場合、またはこの状況でIVが攻撃者が悪用できるほど小さい場合、WEPが最初に表示されたとき、IVの長さは24ビット(後で48ビットに増加)でした。メッセージ。

パケットの送信中にIVの生成について誰かが知っている場合、またはそれが重複している場合(IVは24ビットであるため、2 ^ 24 IVを意味します)、トラフィックを盗聴している攻撃者は次のことができます。 IVがしばらく重複する可能性があります。

仮定しましょう

passphrase key Kp

initialization vector Ivi

plaintext data D1, D2 (for separateblocks)

Traffic Key:Kti=Kp||Ivi

Ciphertext: E(Kti,Di)=RC4(Kti) xor Di

と仮定します

IV1=IV2  (created sequentially and from 0 to 2^24 again returns back)

攻撃者は、

(RC4(Kt1) xor D1) Xor  (RC4(Kt1) xor D2) = D1 XOR D2

これは、ネットワークトレースを使用してAircrack-NGを使用することで解決できます。私が示したアイデアは、重複する同じIVを決して使用しないという、もう1つの複雑な仮定を行うことができる基本的なものです。

7
berkay