512ビットMD5ブロックでの衝突

オランダの研究者Marc Stevensは、成功したMD5攻撃( PDF )の詳細を明らかにし、単一の512ビットデータブロック内の衝突を探すC ++プログラムをレイアウトしました。



Windowsプログラム

ここにソースがすぐに表示されます



衝突の例

 メッセージ1
     4d c9 68 ff 0e e3 5c 20 95 72 d4 77 7b 72 15 87
     d3 6f a7 b2 1b dc 56 b7 4a 3d c0 78 3e 7b 95 18
     af bf a2 [00] a8 28 4b f3 6e 8e 4b 55 b3 5f 42 75
     93 d8 49 67 6d a0 d1 [55] 5d 83 60 fb 5f 07 fe a2
                      
                      メッセージ2     
     4d c9 68 ff 0e e3 5c 20 95 72 d4 77 7b 72 15 87
     d3 6f a7 b2 1b dc 56 b7 4a 3d c0 78 3e 7b 95 18
     af bf a2 [02] a8 28 4b f3 6e 8e 4b 55 b3 5f 42 75
     93 d8 49 67 6d a0 d1 [d5] 5d 83 60 fb 5f 07 fe a2
                       
                      MD5共通ハッシュ
    
             008ee33a9d58b51cfeb425b0959121c9 


これらのメッセージのSHA1ハッシュ:

  > sha1sum message1.bin message2.bin
 c6b384c4968b28812b676b49d40c09f8af4ed4cc message1.bin
 c728d8d93091e9c7b87b43d9e33829379231d7ca message2.bin 


Core2 Q9550プロセッサでは、3週間で衝突が見つかりました。 マークスティーブンスによると、推定時間は約5週間です。 GPUでCUDAを使用する場合、この問題は数時間で解決できる可能性があります。 著者は、プログラムは簡単に並列化できると言っています。



MD5で衝突を検出するための古典的な方法は2004年から公開されており、それらのいくつかは最大2 10の最小の複雑さを必要としました。つまり、通常の家庭用PCで1秒で実行できました同じハッシュを持つ異なるドキュメント(同一プレフィックス衝突攻撃)。 これらは、いわゆる第2種の衝突です。



ハッシュ関数に対する特別なタイプの攻撃は、攻撃者が2つのランダムなドキュメントを取得し、目的のハッシュ関数を取得するために1つのドキュメントでどのビットを変更する必要があるかを示すことができる選択プレフィックス攻撃です。 これらは第1種の衝突です。特定のメッセージMについて、H(N)= H(M)の別のメッセージNを選択することが可能になります。 このタイプのMD5に対する攻撃は2007年に初めて実行され、衝突検索の複雑さは約2,550回のMD5Compress関数の呼び出しでした。 それ以来、アルゴリズムは2,339コールに加速し、2009年に研究者グループが選択されたプレフィックスの衝突を実証し 、わずか596ビットと2,353.2コールの計算の複雑さを必要としました。 その後、MD5の弱点がすべての人に明らかになり、この方法を使用して偽の認証局レベルの証明書さえ作成されました。



Mark Stevensが説明するように、2010年、中国の研究者は512ビットの単一MD5ブロックに対して同一プレフィックスの衝突を最初に実証しましたが、「セキュリティ上の理由から」アルゴリズムの詳細を提供しませんでした。 代わりに、MD5に対してこの攻撃を繰り返すための暗号作成者間の一種の競争を発表しました。 マークスティーブンスの作品は、この「競争」に勝つと主張しています。 攻撃は、ハッシュ計算の最初のラウンドの少数のオプションに基づく新しい衝突検索アルゴリズムに基づいており(MD5は4ラウンドで動作します)、マークスティーブンスの方法は以前に発見されたトンネリング手法を使用します。 スティーブンスによれば、そのアルゴリズムによる512ビットブロックの衝突検索の複雑さは、MD5Compress関数の2 49.81呼び出しと推定されます。



All Articles