16

相互にハッシュする2つの128ビット値が存在しますか?

Find (X,Y) such that md5(X) = Y and md5(Y) = X

彼らは力ずくで見つけることができますか?

追加のクレジット:「md5-itiveinverseidentity」という用語を構成することはできますか?

解集合は、空でない場合でもスパースになります。

今日のあなたのLOLのために、ここに行きます:

https://github.com/flipmcf/playground/tree/master/md5-inverse-search

関連している:

MD5固定小数点
MD5ハッシュ衝突。

4

2 に答える 2

4

(このリンクを読んでいるときに両方の答えが見つかりました)...

質問 (1) に答えるには、次の点を考慮してください。

すべての md5(x)=x をブルート フォースすることは、2.4x10^38 の値をチェックすることを意味します。私のクイック テストの実装では、1 時間あたり 2.3x10^9 の値をテストできます。100 万人に助けてもらったとしましょう。その後、10 の 23 年に短縮されたとしましょう。そして、巧妙な最適化により、アルゴリズムが 100 万倍高速になり、10 の 17 年に短縮されたとしましょう。そして、コンピューターが一晩で 100 万倍速くなると仮定してみましょう。これは 10 の 11 乗年にまで短縮されます。これは、宇宙が存在してきた期間よりもはるかに長くなります。

上記は、スマートフォースアルゴリズム†を使用してより高速に選別できると思います.

質問 (2) に答えるために、次の 2 つのブロックは同じ md5 ハッシュを持ちます。

d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70

d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70

2 つのブロック間で 6 バイトが異なり (バイト 39、91、119、167、219、および 247)、ハッシュは79054025255fb1a26e4bc422aef54eb4. 確かなことはわかりませんが、ある種のスマート フォース アルゴリズム†によってブロックが発見されたと想像できます。

†: md5 の分析された弱点を考慮したブルート フォース

于 2009-11-13T19:23:04.760 に答える
3

これは、Kember Identity Search とは異なります。

次の場合の違いを考慮してください。

md5(X) == X

これが真であるためには、X は 128 ビット値でなければなりません。

これは、次のものと同じではありません。

bin2hex(md5('string')) == 'string' 

これこそが、Kember Identity Search が実際に求めているものです。彼らのサイトで検索の実装を見てみると、それらが md5 関数への入力として 128 ビットの数値ではなく 32 文字の文字列で動作しているため、md5 を探していないことが簡単にわかります。 (X) == X.

これを指摘したのは私が初めてではありません。Kris Thompson による「Kember アイデンティティー」を直接対象とするこの記事が啓発的であることに気付くかもしれません。

于 2009-06-18T15:51:34.157 に答える