2009-06-01 20 views
39

私はMD5コリジョンに関するプレゼンテーションを行っています。どのようにコリジョンが起こる可能性があるのか​​を人々に伝えたいと思います。独自のMD5コリジョンを作成する

同じことをハッシュする2つのテキストブロックを持ち、衝突する前に[a-zA-Z]の組み合わせがどれくらい必要かを説明するとよいでしょう。

明らかな答えは、2つのハッシュ値が同じになるまで可能なすべての組み合わせです。ですから、これをコーディングするにはどうしたらいいですか?簡単な実験として、私は[A-Z]の5列のすべての組み合わせをハッシュして、これを.netハッシュテーブルに格納し、衝突例外をキャッチしました。この2つの問題は、ハッシュテーブルが最終的にタイムアウトし、私はさらに多くの文字が必要になると確信しています。

明らかに、このデータ構造は大きすぎてメモリで処理できないため、データベースを作成する必要があります。また、紺色をテストするには良いプロジェクトのように聞こえます。少しビットthese guysのようです。

効率的に私を指し示すことができますこのやり方?

+0

ここをクリックしてください:http://cryptography.hyperlink.cz/MD5_collisions.html このプログラムには、いくつかのプログラムへのリンクがあります。これは:http://cryptography.hyperlink.cz/2006/program_v1_pd.zip – ShreevatsaR

+0

回答の1つをあなたの質問の答えと記入してください。 :) – Alex

+0

ハッシュ関数のトンネリングについて[このペーパー](http://cryptography.hyperlink.cz/MD5_collisions.html)をチェックしてください。 – arul

答えて

46

これら次の二つの異なった128のバイトの配列が同じにハッシュ:

MD5ハッシュ:以下79054025255fb1a26e4bc422aef54eb4

差が強調されている(太字)。申し訳ありませんがそれは一見難しいです。

 
d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89 
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b 
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0 
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70 

 
d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89 
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b 
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0 
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70 

衝突/ BLOCK1の可視化(出典:Links.Org

alt text

衝突/ BLOCK2の可視化(出典:Links.Org

alt text

+2

これをテストするための実際のコード([Python](http://python.net/~mwh/blog/nb.cgi/view/weblog/2004/8)、[perl](http://yuweijun.blogspot。 com/2008/10/md5.html))。 –

+2

JavaScriptでこれをテストするための実際のコード:https://gist.github.com/mathiasbynens/5525001 –

+0

さらに良い例があります!それは基本的に衝突の2つの全く異なるイメージを持っています:http://natmchugh.blogspot.de/2015/02/create-your-own-md5-collisions.html –

2

Hashcashをご覧ください。 md5のような有効なハッシュアルゴリズムでは、ビット数で指数関数的に衝突を計算する時間です。ハッシュキャッシュは部分衝突を計算します。つまり、ハッシュの下位16ビットをマッチさせます。下位16ビットを一致させるには、平均して2^15の異なる組み合わせをハッシュしなければならないでしょう。 16,24、または32ビットの衝突がどれくらい時間がかかっているか分かっている場合は、より高いビット数の時間を簡単に計算できます。

+1

HashClashを意味しましたか? –

3

単純な衝突がどれほど起こりそうか - あなたが意図的に衝突しようとしていない場合、あなたは失望するでしょう:あなたは平均して2^64のプレーンテキストを生成する必要がありますあなたは衝突を見ることを期待することができ、それはあなたが合理的な(または実際には、_un_reasonable)時間内に行うことができるよりも大幅に多くなります。

意図的に衝突を作成することの難しさを実証しようとしている場合は、他の回答が既にそのことを実証しています。文字列を完全にテキストにするという余分な制約は、それらのアプローチでさえもほとんど実用的ではありません。

+0

これは、誕生日パラドックスのために間違っています。http://en.wikipedia.org/wiki/Birthday_paradox特に、http://en.wikipedia.org/wiki/Birthday_paradox#Cast_as_a_collision_problem – Shalmanese

+8

を参照してください。私は2^64ではなく2^128であると言っています。誕生日のパラドックスは、2 ^(numbits/2)の後に(平均して)衝突を予測します。 –

-1

このようなハッシュのポイントは、衝突が非常に起こりにくいことです。あなたが成功する前に、あなたのマシンは老朽化することは間違いありません。あなたが合理的に衝突を起こすことができるなら、ハッシュを使用することの全ポイントは消えてしまうでしょう!

+2

MD5の衝突:http://th.informatik.uni-mannheim.de/People/lucks/HashCollisions/、http://www.doxpara.com/md5_someday.pdf、http://www.win.tue.nl/hashclash/rogue-ca/ – russau

+0

私は* BY CHANCE *と言ったことに注意してください。 –

+0

十分な公正 - あなたが「偶然」と言うとき、あなたは「ブルートフォース」を意味しますか?だから私の質問は、それを強要するより効率的な何かを本当に求めている。紺碧のようなサーバーファームでブルートフォースの組み合わせを実行することができます。 – russau

2

テキストファイルAFAIKだけでは難しいです。 の衝突にすることもできますが、[a-zA-Z]からのものでも簡単ではありません(まだ)。

一方、同じハッシュを持つ2つの「意味のある」ファイルが必要な場合は、PostScriptのように、衝突の原因となる異なるバイナリブロブを作成し、条件式を使用しますそれに応じて異なる出力を表示する。

this problem(H2部分)およびsolutionである。たとえば、this PS filethis oneは同じMD5sumを持っていますが、それらは開いたときに完全に異なるテキストを持つうまく形成されたPostScriptファイルです。

+0

URLを更新する必要があります。 –

+0

@GrzegorzWierzowiecki:ありがとうございました。私はリンクを更新しました。 – ShreevatsaR

関連する問題