2

現時点では、C で TEA ブロック暗号を解読しようとしています。これは代入であり、キーが 2 つの 16 ビット数値になるようにティー暗号が弱体化されています。

キーを使用して平文をエンコードし、キーを使用して暗号文をデコードするコードも提供されています。

私はいくつかの平文の例を持っています:

  1. 平文 (1234,5678) エンコード (3e08,fbab)
  2. 平文 (6789,dabc) エンコード (6617,72b5)

アップデート

エンコード メソッドは、プレーンテキストとキー、encode(plaintext,key1) を受け取ります。これは、エンコードされたメッセージを作成するための別のキーで再び発生します。

この暗号を解読するにはどうすればよいですか?

現時点では、既知の平文を可能なすべてのキーでエンコードしています。キーのサイズは 16 進値 ffffffff です。これをファイルに書き込みます。

しかし今、私は立ち往生しており、方向性が必要です。


同等の鍵という TEA の弱点を利用して、暗号の解読にかかる時間を短縮するにはどうすればよいでしょうか? また、中間攻撃で男を使うつもりです。

既知のプレーンテキストとすべてのキー 1 でエンコードすると、関連付けられたキーですべての暗号化されたテキストが作成され、テーブルに格納されます。

次に、キー 2 のすべての可能な値を使用して、割り当てにある既知の暗号文で復号化します。これにより、一度だけ復号化された復号化のテーブルが残ります。

次に、2 つのテーブルを比較して、key1 の暗号化が key2 の復号化と一致するかどうかを確認します。

誰かがこれをコードに実装するのを手伝ってくれるなら、私はequilenventの弱点も使いたいと思います。何か案は?

4

5 に答える 5

4

これは、IOI'2001プログラミングコンテストのDoubleCrypt問題不気味に似ています。一般的な解決策をここに示します。コードは提供されませんが、正しい方向を示す可能性があります。

于 2010-11-11T21:04:42.877 に答える
2

結果をファイルに書き込まないでください。生成す​​る各暗号文を既知の暗号文と比較し、既知の平文をすべての可能なキーでエンコードして、そのうちの1つが正しい暗号文を生成するようにします。その時点で、正しいキーを使用しています。同じキーで2番目の既知の平文を暗号化して、正しい出力が生成されることを確認します。

編集:2回発生するエンコーディングはほとんど重要ではありません。あなたはまだこのようなものを手に入れます:

for (test_key=0; test_key<max; test_key++)
    if (encrypt(plaintext, test_key) == ciphertext)
        std::cout << "Key = " << test_key << "\n";

暗号化が2回行われるということは、次のencryptようになることを意味します。

return TEA_encrypt(TEA_encrypt(plaintext, key), key);

Edit2:わかりました。編集された質問に基づいて、弱められたTEAをそれぞれ独自の16ビットキーで2回実行する必要があるようです。上記のような単一のループでそれを行い、test_keyを2つの独立した16ビットキーに分割するか、次のようなネストされたループを行うことができます。

for (test_key1=0; test_key1<0xffff; test_key1++)
    for (test_key2=0; test_key2<0xffff; test_key2++)
        if (encrypt(encrypt(plaintext, test_key1), test_key2) == ciphertext)
            // we found the keys.
于 2010-11-11T19:59:05.980 に答える
1

このプロパティが16ビットキーに当てはまるかどうかはわかりませんが、128ビットキーには4つのキーが同等であるというプロパティがあり、検索スペースが4分の1になります。頭のてっぺんから同等のキーを見つける方法を覚えていませんが、キースペースが表示されているほど大きくないことだけを覚えています。これは、関連キー攻撃の影響を受けやすいことを意味します。

これを宿題としてタグ付けしたので、ブルートフォースを使用しないなど、他の要件があるかどうかはわかりません。これは、あなたがやろうとしているようです。ブルートフォース攻撃を行う場合は、平文がどのように表示されるかを知る必要があります(たとえば、英語を知っている場合など)。

于 2010-11-11T20:02:02.523 に答える
1

同等のキーは理解しやすく、キー スペースを 4 分の 1 に削減できます。キーは 4 つの部分に分割されます。TEA の各サイクルには 2 つのラウンドがあります。1 つ目はキーの最初の 2 つの部分を使用し、2 つ目は 3 番目と 4 番目の部分を使用します。これは、TEA の 1 サイクル (2 ラウンド) の図です: (未登録ユーザーは画像を含めることが許可されていないため、ここにリンクがあり ます)

注: 緑色の四角は加算です。赤い丸は XOR です。

TEA は、2 つの半分に分割されたブロックで動作します。各ラウンド中に、ブロックの半分が左に 4、0 または -5 ビットシフトされ、キーの一部またはラウンド定数が追加され、結果の値の XOR が残りの半分に追加されます。ブロックの。いずれかのキー セグメントの最上位ビットを反転すると、それが使用される合計で同じビットが反転し、XOR の結果も拡張されますが、それ以外の効果はありません。ラウンドで使用される両方のキー セグメントの最上位ビットを反転すると、XOR 積の同じビットが 2 回反転し、変更されません。これらの 2 つのビットを一緒に反転しても、ブロック暗号の結果は変わらず、反転したキーは元のキーと同等になります。これは、(1 番目/2 番目) および (3 番目/4 番目) の両方のキー セグメントに対して行うことができ、キーの有効数を 4 分の 1 に減らします。

于 2013-02-04T01:48:27.070 に答える
0

暗号化キーの (適度な) サイズを考えると、事前に計算されたテーブルを作成する余裕があります (上記と同じコードを使用し、メモリの大きなチャンクにデータを保存します。十分な RAM がない場合は、チャンクをディスクにダンプします)。適切な順序でそれらを検索できるように、アドレス指定スキームを保持します)。

これを行うと、ドメイン全体をカバーできるようになり、ソリューションの検索がリアルタイムで行われます (1 つのテーブル ルックアップ)。

同じトリック (キーの切り捨て) が主要な Office ソフトウェアで (少し前まで) 使用されていました。現在、非ランダム データを使用して暗号化キーを生成していますが、これは (せいぜい) 同じ結果につながります。実際には、生成される前に暗号化キーを知る機能 (いわゆるランダム ジェネレーターが予測可能であるため) は、キーの切り捨てよりもさらに望ましいです (同じ結果につながりますが、構築して保存する必要がないというハードルはありません)。レインボーテーブル)。

これは進歩の行進と呼ばれます...

于 2010-11-11T20:35:27.763 に答える