Wikipediaによると 、CBCモードの操作を使用する場合、初期化ベクトル(IV)は秘密である必要はありません。これはCBC暗号化のスキーマです(同じくWikipediaから):
最初のブロックにヘッダーなどの既知の標準化された構造があるプレーンテキストファイルを暗号化するとどうなりますか?
次のシナリオを想像してみましょう:
暗号化しますfile.pnm
を使用してAES-CBC
。 pnm
ファイルには、次のような既知のヘッダー構造があります。
P6
1200 800
255
さらに、寸法(1200 x 800)とカラーモード(P6)は、暗号化されたファイルサイズから推測できます。
IV
とプレーンテキストの最初のブロックの両方がわかっている場合、これはCBCチェーン全体を危険にさらしていませんか?
これをコンポーネントパーツに分割し、それらを個別のエンティティ、AESとCBCとして考える方が簡単だと思います。
AES自体は「基本的にはブロックのチャンクをXORすることで構成されている」わけではありません。これははるかに複雑な作業です。 AESは、その内部を少しの間無視しても安全であると見なされています。鍵を知らなければ、暗号化されたブロックのみが指定されたプレーンテキストまたはプレーンテキストに関する情報を復元することは事実上不可能です。平文で、残りを見つける必要があります。キーがなければ、AESは一方向の関数になる可能性もあります(これに依存するMACスキームがあります!)。 AESと同様のブロック暗号のセキュリティに関する専門性について議論することは非常に複雑であり、回答でカバーすることはできませんが、何千人もの暗号技術者がほぼ20年間それを調べてきており、誰もリモートで実用的なものを発見していないと言って十分です攻撃の条件。
上に投稿した図はCBCについて説明しています。 AESなどのブロック暗号は、秘密鍵による暗号化one blockの安全性を目指しています。問題は、1つのブロックだけではなく、長さが不定のデータストリームを暗号化することはめったにないことです。ここで、CBCのようなブロックモードが機能します。
ブロックモードは、同じキーで複数のブロックを暗号化するための暗号を安全にすることを目的としています。最も単純なブロックモードはECBです。ECBは、この点でセキュリティを提供しません。 ECBには、ブロック間でデータを送ることなく、同じキーで各ブロックを個別に暗号化することが含まれます。これにより、2つの方法で情報が漏洩します。1つは、2つの同一の平文ブロックがある場合、同じ鍵を使用すると、2つの同一の暗号文ブロックを取得します。次に、同じキーを持つ同じメッセージの2つの暗号化に対して、2つの同一の暗号文ストリームを取得します。プレーンテキストに関する情報が漏洩するため、これは問題です。
CBCは「カスケード」効果を導入することでこの問題を解決します。各平文ブロックは前の暗号文ブロックとxor演算され、その結果、元々等しい平文ブロックは暗号化ステップで等しくなくなり、したがって同じ暗号文ブロックを生成しなくなります。最初の平文ブロックの場合、以前の暗号文ブロックはなく(まだ何も暗号化していません)、これがIVの出番です。少しの間、IVの代わりにゼロを使用した場合、どうなるかを考えてください。 -1番目 ブロック(つまり、最初の平文ブロックの「前」にある架空の暗号文ブロック)。カスケード効果により、平文の平文ブロックは異なる暗号文ブロックを生成しますが、同じメッセージ全体が毎回同じ方法でカスケードされ、同じ完全なメッセージが同じ鍵で複数回暗号化されると、同じ暗号文が生成されます。 IVはこれを解決します。一意のIVを選択することにより、暗号化される平文メッセージが毎回同じか異なるかに関係なく、2つの暗号文が同じになることはありません。
これは、うまくいけば、IVが秘密である必要がない理由を理解するのに役立つはずです。 IVは暗号文の不平等を保証するためだけに存在するため、IVを知っていても攻撃者はどこにも入りません。秘密鍵は、実際のデータを保護するものです。
これをさらに強調するために、need IVを最初のブロック以外のすべてを復号化することすらしません。 CBCの復号化プロセスは逆に機能します。秘密鍵を使用してブロックを復号化し、その結果を前の暗号文ブロックとXORします。最初のブロック以外はすべて、前の暗号文ブロック(暗号文を取得済み)を知っているので、復号化は鍵を知っているだけのケースです。復号化にIVが必要な唯一のケースは、最初の暗号化されたブロックで、前の暗号文ブロックは虚数でIVに置き換えられます。
いいえ、キーは秘密です。
図の「ブロック暗号化」ブロックは、キーに応じてデータをスクランブルします。 XORはセキュリティを提供しませんが、暗号化は提供します。XORおよびIVは、同じ平文が異なる暗号文として暗号化されることを確認するためのものですブロックごとに。
すべての最新の暗号化方式(AES、blowfishなど)は、予想よりもはるかに安全になるように設計されています。このような暗号が耐性を持つように設計されているいくつかの攻撃を簡単に見てみましょう。
既知のプレーンテキスト攻撃-この場合、攻撃者は多くのプレーンテキストブロックと、特定のキーKで暗号化された対応する暗号テキストブロックにアクセスできると想定しています。彼の目標はKを見つけることです。
選択された平文攻撃-この場合、攻撃者は多くの平文ブロックを選択し、対応する暗号文ブロックを特定の鍵Kで暗号化することを想定しています。彼の目標はKを見つけることです。
選択された暗号文攻撃-この場合、攻撃者は多くの暗号文ブロックを選択し、それに対応するプレーンテキストブロックを所定のキーKで復号化すると想定します。彼の目標はKを見つけることです。
選択された適応暗号文攻撃-この場合、攻撃者は多くの暗号文ブロックを選択し、それに対応するプレーンテキストブロックを特定のキーKで復号化した後、新しい知識でこのプロセスを繰り返すと想定します。彼の目標はKを見つけることです。
これらのシナリオのいずれかで攻撃が見つかり、現代の暗号でKを取得できた場合、そのような暗号は壊れていると宣言され、それ以上使用されません。実際には、要件ははるかに厳しいです。 Kに関する部分的な情報さえも取得できることを示す攻撃が見つかった場合、それはすでにかなりの問題であるパリティであると言います。または、キーKを実際には見つけられないが、ブルートフォースよりもはるかに優れている(2 ^ 110と2 ^ 126は通常、公開する価値があると見なされます)ことができる場合、暗号は通常、壊れていると宣言されます。 。
したがって、結論として、プレーンテキストのブロックとそれに対応する暗号テキストがわかっているからといって、暗号のキーを取得することはできません。
IVには、暗号化されたブロックと同じセキュリティ要件があります。
CBCを機能させるには、XOR現在のブロックの暗号化されていないデータと前のブロックの暗号化されたデータを組み合わせる必要があります。最初のブロックの前にブロックがないため、暗号化されたブロックは取得)IVが代わりに使用されます。
たとえ話をしましょう!参加者は次のとおりです。
アリスは暗号化されたメッセージをボブに送信します。イブは暗号文を傍受し、それを解読しようとしています。彼女を「助ける」ために、ジェイクは公正なコインを128回投げ、彼の結果を書き留め、それらを16進数としてエンコードし、それをイブに渡します:1eff4bb16388e2ee263eb5a8a2bf56b1
。イブはこれに戸惑っていますが、ジェイクはこれらのランダムなコイントスの結果が彼女のアリスのメッセージを解読するのに役立つと主張します。
ジェイクは完全にナッツだと思いませんか?ジェイクの128コインフリップの結果は、アリスがボブに送信したメッセージの平文、または彼女がそれを暗号化するために使用した鍵とは関係ありません。したがって、イブはジェイクのコインフリップからメッセージの平文について何も知ることができません!
そしてそれが、CBCモードのIVが秘密である必要がない理由です。 CBCでは、暗号化ごとにランダム IVが必要です。したがって、IVは平文またはキーとはまったく無関係です。そのため、IVの知識は平文についての情報を明らかにしません。