同じキーを使用してストリーム暗号で暗号化された2つの暗号テキストを持っています。
使用されているキーがわからないまま、両方の暗号文メッセージの平文を復元するにはどうすればよいですか?
2つの暗号化されたメッセージが同じストリーム暗号と同じキーを使用している場合、
C1 xor C2
の結果はM1 xor M2
になります。C1とC2はそれぞれの暗号文で、M1とM2は対応する平文です。
その後、ベビーベッドドラッグと呼ばれる手法を使用してプレーンテキストを復元できます。平文で表示される可能性のある一般的な単語やフレーズ(「the」など)を使用し、M1 xor M2
の結果に対してxorを使用します。平文の1つにベビーベッドのテキスト(この例では "")が含まれている場合、xorの結果は、その位置にある他の平文の結果になります。どちらの平文にもベビーベッドのテキストが含まれていない場合は、xorの結果が意味不明なものである可能性が非常に高くなります。
残りの部分をインテリジェントに入力するのに十分な平文を回復するまで、この手法を続けます。
これは、OTPキー再利用攻撃として知られています;答え( "cribtext drag")は こちら にあります。メッセージの数が多いほど(キーが再利用されるほど)、良い結果になります。コーパスが十分に大きければ、クリブテキストのドラッグさえまったく必要ないかもしれません。
つまり、平文の1つに現れる可能性のある一般的なフレーズを推測します(ASCII英語に対する古典的な例は、5文字の ""です))。さまざまな場所にある2つの元のメッセージのXOR。プレーンテキストの1つにベビーベッドのテキスト(この例では "")があった場合、exclusive-orの結果は次のようになります。他の平文はその位置にありました。どちらの平文にもない場合は、exclusive-orの結果が意味不明なものである可能性があります。そして、妥当な短いセクションがあれば、それを拡張できます(たとえば、平文の1つは「na **」です。「na」で始まるすべての単語の辞書を調べ、それらをベビーベッドとして使用して、他の平文が意味をなすかどうかを確認できます)。
もちろん、使用できるのは、いくつかのメッセージの最短共通長だけです。1500バイト、1000、および500が1つある場合、最初の500バイトは3回再利用、次の500バイトは2キー、最後の500バイトは攻撃できません。
OTPがも「時間内」に再利用されない限り、つまり定期的に(それはもはやOTPではありませんが、それはOTPになかったと主張するかもしれません)再利用されているため、最初の場所...)。この種のエラーは、暗号化されたハードディスクのブランドで行われ、そのすべてに異なるOTPキーがあり、それがすべての単一セクター(ゼロ化されたものを含む-極端な形式のベビーベッド)、有効な暗号化強度はnilになります。次に、元のOTPシーケンスが重複しているメッセージにすべて含まれている場合は、thoseからキーを復元し、その後、復号化を続行できますその他すべて。