MD5(他のハッシュアルゴリズムの中でも特に)は衝突攻撃に対して脆弱であることをよく読んでいます。私は衝突部分を理解します。MD5がこれらの別個の異なる入力から同じ出力を生成するように、2つ(またはそれ以上)の入力が存在します。 ここでは、そのような入力の例が20あります 。
十分に公正ですが、これは具体的にどのように脆弱性につながりますか?この種の欠陥があるシステムに対する攻撃のベクトルは何ですか?
たとえば、「暗号化」にMD5を使用してユーザーのパスワードを単純にハッシュするシステムがあるとします。次に、2つのシナリオについて説明します。 (簡単にするために、新しいユーザー/パスワードがシステムに追加されていないと仮定します)。
シナリオ1:システムのパスワードは、衝突を生成する可能性のある種類の入力ではありません。つまり、MD5によって処理されるすべてのパスワードは一意のハッシュを生成します。まだ衝突の脆弱性はありますか?
シナリオ2:システムのパスワードの1つはこの美しさです(衝突14、メッセージ1リスト )から:
Ó)\dvµ‡‚G ÌÕÀ˘∏8;å∑œPäÌ/+6éE≠3}˝óÙ|o‡¬{Ç9¸–Û≤‚Mgª%DWÌé$∞\˛UÊiJ;fÉ;™÷ÎQëµCI<˝y≠˜LùΩ]Owå˜1Ú'¬vo`âÃ(©tú√\îùf#4ú¿�(
したがって、このパスワードとのMD5衝突を生成する別の見苦しい文字列が存在します。しかし、攻撃者がこの情報を既に知っていなければ、どのようにしてこの脆弱性が露呈されますか?
私が見た1つの一般的な例は、MD5を使用してドキュメントにデジタル署名することです。
2つのドキュメントがあるとします。ドキュメントの1つは非常に無害で、もう1つは悪意のあるものです。これらのドキュメントは両方とも作成できるため、同じMD5署名を持つように作成できます(たとえば、PostScriptを使用してPDFを作成します)。
今、あなたは誰かに罪のない文書に署名してもらう(これは通常、文書のハッシュに署名することによって行われます)が、両方の文書のハッシュが同じであるため、その人は誤って悪意のある文書にも署名した(これは「私はこの人が私の銀行口座から100万ドルを引き出すことを許可します。これで、悪意のある文書を他の人に提示でき、文書内の衝突のため、その人がその署名を信じるようになります。
このリンクを見てください- http://th.informatik.uni-mannheim.de/people/lucks/HashCollisions/ -説明と例を参照してください。
これは、Oleksiが彼の回答で述べたとおりに機能します。同じMD5ハッシュを生成する2つのドキュメントがあります。ハッシュは署名されているため、両方のドキュメントを「有効」にすることができます。
パスワードハッシュは、プリイメージ耐性で機能します。パスワードハッシュプロセスは、特定の出力に一致する入力(パスワード)を見つけることが計算上実行可能でないようにする必要があります(ハッシュ)、多くの潜在的な入力を試みて保存し、「幸運を手に入れて」ください。 「幸運を手に入れる」攻撃は依然として懸念事項です。パスワードは、想像できるほどランダムではない人間のユーザーが選択するためです。これが、単純なハッシュ関数以上のものを必要とする理由です(塩が必要です、速度が必要です。 this を参照してください)。ただし、collisionsは、パスワードハッシュのセキュリティに影響を与えません。衝突を自由に生成する機能は、攻撃者に追加のクラッキング能力を与えません。
他の人が指摘したように、衝突は signatures を含む他のセットアップでの攻撃に使用できます。攻撃者ができるシナリオは次のとおりです。
これらの両方の条件下で、サードパーティは署名を生成します。これは、bothメッセージに対して(署名検証者に関する限り)有効です。これは、署名者にメッセージを表示せずに署名をメッセージに発行させるようなものです。デモは 2008年に完了 で、「メッセージ」はX.509証明書であり、署名者は認証局です。同じコンセプトの実際のアプリケーションが Flameマルウェア で実行されました。
先に説明したように、生の署名は衝突に対して脆弱ですが、署名者が署名するものの最初にランダム性を含めることにより、署名を保護することができます。偽のX.509証明書のコンテキストでは、攻撃者は公開鍵までの証明書のすべてのビットを予測できなければなりません。これには、CAによって選択された証明書のシリアル番号が含まれます。 CAが大きなランダムシリアル番号を使用する場合、MD5がハッシュ関数として使用されていても、攻撃は適用されません。一方、連番または時間ベースのシリアル番号を使用するCAは予測可能です。
衝突に関するもう1つの懸念は、セキュリティ証明についてです。一部の暗号化プロトコルは、プロトコルで使用される暗号化プリミティブに関する特定の仮定の下で安全であることが証明できます。たとえば、ハッシュ関数を使用する一部のプロトコルは、ハッシュ関数が耐衝突性またはその他のプロパティであると想定されている限り、安全であることが証明できます。例は [〜#〜] hmac [〜#〜] です。 HMACは、基礎となるハッシュ関数を再利用し、 Merkle–Damgård persuasion 、特にMD5およびSHAファミリー全体のハッシュ関数に対応できるように設計されています。このようなハッシュfunctionは、内部の「圧縮関数」を中心に構築されています。HMACは、圧縮関数が pseudorandom function のように動作するという前提の下で安全であることが証明されています。
ただし、MD5の圧縮関数がPRFの場合、2未満のコストでMD5の衝突を計算することはできません。64 平均して。それよりはるかに少ないMD5衝突を生成する方法を知っています。これは、MD5圧縮関数がPRFではないことを意味します。したがって、これはHMAC/MD5のセキュリティ証明を無効にします。
これは、HMAC/MD5を衝突で破壊する方法を知っているという意味ではありません。私たちが持っていたセキュリティの数学的保証が、容赦のない正午の太陽の下での朝露のように蒸発したことは「ただ」です。その点で、MD5の衝突は攻撃者が利用するツールではありませんが、注意を払う価値があります。