AESの理解に問題があり、同じテキストを同じキーで2回続けて暗号化すると同じ出力が得られるかどうか知りたいのですが。
出力を変更する塩や何かがありますか?
それが同じことを示さない場合、ソルトがランダムであり、彼がそれを知らない場合、どのようにして(キーを使用して)メッセージを復号化できますか?
同じことができる場合、レインボーテーブルを使用してメッセージを回復できますか?
AESのようなブロック暗号は、キー順列です。 AESの場合、キーを受け取り、16バイトブロックを決定論的に別の16バイトブロックに変換します。
ブロック暗号で何かを暗号化するには、 操作モード を使用する必要があります。通常、これらのモードはIV(ソルトに似ています)を取り、暗号化するメッセージごとに異なります。 IVのこの違いにより、暗号化されたメッセージはまったく異なります。同じIVとキーで同じメッセージを暗号化すると、常に同じ暗号文が返されます。同じIVとキーで複数のメッセージを暗号化すると、セキュリティが弱まりますが、その程度はモードによって異なります。
IVに必要なプロパティは、選択したモードによって異なります。一意である必要がある場合(CTRモードなど)、予測できないほどランダムである必要がある場合(CBCモードなど)があります。ただし、通常は秘密にする必要はないため、通常は接頭辞として、暗号文と一緒に受信者に送信します。
確定的暗号化用に設計されたいくつかのモードがあります。これらのモードを使用すると、2つのメッセージが同じ場合でもリークしますが、それ以上のものはありません。これらのモードは、確定性が必要な場合にのみ使用してください。
[〜#〜] aes [〜#〜] はブロック暗号です:ブロック(AESの場合は16バイト)を入力として受け取ります)とキー(AESの場合は16、24、または32バイト)、別のブロック(これも16バイト)を出力します。これは完全に決定的なアルゴリズムであり、完全に指定されており、世界中の誰もが同じ入力ブロックとキーに対して同じ出力ブロックを取得する必要があります。
ただし、ブロックは暗号化せず、messageを暗号化します。ブロック暗号は単なる構築要素です。実際の暗号化では、ブロック暗号を繰り返し呼び出す 操作モード を使用します。良いモードと悪いモードがあります。目標は、メッセージ全体の機密性を達成し、メッセージの2つの部分が互いに等しいかどうかなどの部分的な情報を漏らさないことです。特に、同じキーで2つのメッセージを暗号化する場合、通常notを実行して、2つのメッセージが同一であるかどうかを明らかにしたいので、どこかで何かを変更する必要があります、2つの暗号化の間。
ほとんどの操作モードでは、非決定性が注入される 初期化ベクトル を使用します。一部のモード(例: [〜#〜] gcm [〜#〜] または [〜#〜] eax [〜#〜] )は、繰り返さないIVのみを必要とします。カウンターはそれらにとって適切であり、一部のコンテキストでは暗黙的である可能性があります(たとえば、特定の通信ストリームに連続するメッセージがある場合、メッセージ番号はIVとして機能します)。他のいくつかのモード、特にCBCは、IVがランダムに、一様に、強力な [〜#〜] prng [〜#〜] で選択され、次に使用するIVが選択されている場合にのみ、すべての一般性で安全です平文データが選択されたときはまだわかっていません。これらの要件をすべて満たしていないことが、多くの問題の原因となっています。 SSLへのビースト攻撃 。
したがって、安全な対称暗号化には少なくともmemory(たとえば、カウンター値を記憶する)またはが必要であると言えるでしょうランダム性。 「メモリ」は、世界共通のカウンタである可能性があります(現在の時刻などですが、時計の調整に注意してください)。
If与えられた2つの入力メッセージが同一であるかどうかについての小さなリークを許容する準備ができていますそして完全に確定的でメモリのない暗号化システムを使用することは可能ですが、ストリーミング暗号化と互換性がありません(メッセージ全体をプロセス中にメモリに保持する必要があります)。基本的には、メッセージに対して決定論的なMACアルゴリズム( [〜#〜] hmac [〜#〜] など)を計算し、その出力をIVとして使用します。これは2パスアルゴリズムであり、やむを得ず回避できます。 2つのソースメッセージが同一の場合、それらは同じ暗号化メッセージを生成しますが、それらがどこか(最後のビットでも)異なる場合、高い確率で、暗号化メッセージは完全に異なります。
残念ながら、メモリやランダム性が厳しい要件のあるプラットフォーム(スマートカードなど)も、RAMが非常に重要であり、2パスシステムが高すぎる可能性があるプラットフォームです。