攻撃シナリオを使用して、違いを動機付けることができます。
最初のプリイメージ攻撃、我々は唯一の指定された、敵を尋ねるを見つけるために、MまたはいくつかのM 'その結果、H (M ') = H (Mは)。ウェブサイトが{ u s eの代わりに{ u s e r n a m e 、H (p a s s w o r d )}をデータベースに保存するとしますH(m )mm′H(m′)H(m ){username,H(password)}。Webサイトは、パスワードを受け入れて H (i n p u t )= ?を比較することで、ユーザーの信頼性を検証できます。H (P A S S W O のR D ) (の確率で 1 / 2 Nいくつかの大規模のために N偽陽性のために)。ここで、このデータベースが漏えいしたか、さもなければ危険にさらされているとします。A{username,password}H(input)=?H(password)1/2nn最初のプリイメージ攻撃は、攻撃者がメッセージダイジェストにのみアクセスし、この値にハッシュするメッセージを生成しようとする状況です。
では第二プリイメージ攻撃、我々は敵より多くの情報を可能にします。具体的には、だけでなく、mも与えます。ハッシュ関数を考える及び大きい素数とされているパブリック定数です。明らかに、最初のプリイメージ攻撃では、これがRSAの問題になり、難しいと考えられています。ただし、2番目のプリイメージ攻撃の場合、衝突の発見が容易になります。1セットがあれば、H(m)mp q d m ′ = m p q + m H (m p q + m )= (m p q + m )dH(m)=mdmodpqpqdm′=mpq+mH(mpq+m)=(mpq+m)dmodpq=mdmodpq。そのため、攻撃者は、ほとんどまたはまったく計算せずに衝突を発見しました。
デジタル署名スキームのために、一方向ハッシュ関数が2番目のプリイメージ攻撃に耐性があるようにしたいと思います。この場合、は公開情報と見なされ、ドキュメントのすべてのコピーと共に(間接レベルを介して)渡されます。ここで、攻撃者はと両方にアクセスできます。攻撃者は、元の文書(または完全に新しいメッセージ)のバリエーションを考え出すことができる場合はというように、彼が、元の署名者であるかのように、彼は彼の文書を公開することができます。d o cH(document)H (d o c u m e n t )d ′ H (d ′)= H (d o c u m e n t )documentH(document)d′H(d′)=H(document)
衝突攻撃は、敵がさらに機会ができます。このスキームでは、となるような2つのメッセージおよびを見つけるように、敵(ボブと呼べますか?)に依頼します。ピジョンホールの原理と誕生日の逆説により、「完璧な」ハッシュ関数でさえ、プリイメージ攻撃よりも衝突攻撃に対して二次的に弱いです。言い換えれば、予測不可能で不可逆的なメッセージダイジェスト関数が与えられた場合、ブルートフォースに時間かかるため、衝突が発生する可能性があります常に予想される時間ます。m 2 H (m 1)= H (m 2)f ({ 0 、m1m2H(m1)=H(m2)f({0,1}∗)={0,1}nO (S 、Q 、R 、T (2 N))= O (2 n / 2)O(2n)O(sqrt(2n))=O(2n/2)
ボブは、さまざまな方法で衝突攻撃を利用して自分の利益を得ることができます。最も簡単なものの1つです。ボブは2つのバイナリと()の衝突を検出し、bは有効なMicrosoft Windowsセキュリティパッチ、はマルウェアです。(BobはWindowsで動作します)。ボブは、セキュリティパッチをコマンドチェーンに送り、ボールトの背後でコードに署名し、世界中のWindowsユーザーにバイナリを送信して欠陥を修正します。ボブは、とMicrosoftが計算した署名を使用して、世界中のすべてのWindowsコンピューターに接続して感染できるようになりました。b ′ H (b )= H (b ′)b ′ b ′ bbb′H(b)=H(b′)b′b′b。これらの種類の攻撃シナリオを超えて、ハッシュ関数が衝突耐性があると信じられている場合、そのハッシュ関数はプリイメージ耐性がある可能性が高くなります。