暗号学において、暗号学的ハッシュに対する衝突攻撃とは、同じハッシュ値を生成する2つの入力、すなわちハッシュ衝突を見つけようとする攻撃である。これは、特定のターゲットハッシュ値を指定する原像攻撃とは対照的である。
衝突攻撃には大きく分けて2種類あります。
より一般的に言えば:
対称鍵暗号が総当たり攻撃に弱いのと同様に、すべての暗号学的ハッシュ関数は、誕生日攻撃による衝突に対して本質的に脆弱です。誕生日問題のため、これらの攻撃は総当たり攻撃よりもはるかに高速です。n ビットのハッシュは、 2 n /2 回の時間ステップ (ハッシュ関数の評価)で解読できます。
数学的に言うと、衝突攻撃は2つの異なるメッセージを見つける。そして、したがって古典的な衝突攻撃では、攻撃者はどちらのメッセージの内容をも制御できず、それらはアルゴリズムによって任意に選択されます。
特定のハッシュ関数に対して暗号解読を用いることで、より効率的な攻撃が可能になる。衝突攻撃が発見され、誕生日攻撃よりも高速であることが判明すると、ハッシュ関数はしばしば「破られている」と非難される。NISTハッシュ関数コンペティションは、MD5 [ 1 ]とSHA-1という 2 つの非常に一般的なハッシュ関数に対する衝突攻撃の発表が主なきっかけとなった。MD5 に対する衝突攻撃は非常に進歩しており、2007 年時点では、通常のコンピュータでわずか数秒で実行できる。[ 2 ]このように作成されたハッシュ衝突は通常、長さが一定で、構造化されていないため、広く普及しているドキュメント形式やプロトコルへの攻撃に直接適用することはできない。
しかし、多くのフォーマットに存在する動的な構造を悪用することで、回避策は可能です。この方法では、ハッシュ値が同じになるように、できるだけ類似した2つの文書が作成されます。一方の文書は認証局に提出して署名してもらい、その署名をもう一方のファイルにコピーします。このような悪意のある文書は、同じ文書内に2つの異なるメッセージを含みますが、ファイルへの微妙な変更によって、条件付きでどちらか一方のメッセージを表示します。
衝突攻撃の拡張として、選択プレフィックス衝突攻撃があります。これは、 Merkle–Damgårdハッシュ関数に特有の攻撃手法です。この攻撃では、攻撃者は任意の異なる2つの文書を選択し、計算された異なる値を付加することで、文書全体のハッシュ値を同じにすることができます。この攻撃は通常、より困難で、nビットのハッシュは2 (n/2)+1ステップで破られる可能性がありますが、古典的な衝突攻撃よりもはるかに強力です。
数学的に言うと、2つの異なる接頭辞p 1、p 2が与えられた場合、攻撃はhash ( p 1 ∥ s 1 ) = hash ( p 2 ∥ s 2 )となるような2つの接尾辞s 1とs 2 を見つけます(ここで ∥ は連結演算です)。
特定のハッシュ関数に対して暗号解読を用いることで、より効率的な攻撃も可能になります。2007年には、MD5に対する選択プレフィックス衝突攻撃が発見され、MD5関数を約250回評価する必要があることが示されました。この論文では、ハッシュ値が衝突する異なるドメイン名の2つのX.509証明書も示されています。これは、認証局に1つのドメインの証明書に署名するよう依頼し、その証明書(特にその署名)を使用して、別のドメインになりすますための新しい不正な証明書を作成できることを意味します。[ 5 ]
2008 年 12 月、セキュリティ研究者グループが、MD5 ハッシュ関数に対するプレフィックス衝突攻撃を利用して認証局になりすますことができる偽造X.509署名証明書を公開し、現実世界での衝突攻撃が明らかになった。これは、攻撃者が中間者としてSSLで保護された任意の Web サイトになりすますことができ、電子商取引を保護するためにすべてのWeb ブラウザに組み込まれている証明書検証を侵害できることを意味した。この不正な証明書は、実際の認証局によって取り消されない可能性があり、任意の偽造された有効期限を持つこともできる。MD5 は 2004 年には非常に脆弱であることが知られていたが[ 1 ] 、 2008 年 12 月時点でも認証局は MD5 で検証された証明書に署名することをいとわず[ 6 ]、少なくとも 1 つの Microsoft コード署名証明書は 2012 年 5 月時点でもまだ MD5 を使用していた。
Flameマルウェアは、侵害されたMD5アルゴリズムを使用しているMicrosoftルート証明書によるコンポーネントのコード署名を偽装するために、選択プレフィックス衝突攻撃の新しいバリエーションをうまく利用しました。 [ 7 ] [ 8 ]
2019年、研究者らはSHA-1に対する選択プレフィックス衝突攻撃を発見した。その計算複雑度は2 66.9から2 69.4の間で、コストは10万米ドル未満であった。[ 9 ] [ 10 ] 2020年、研究者らはSHA-1に対する選択プレフィックス衝突攻撃の複雑度を2 63.4に削減した。[ 11 ]
暗号学的ハッシュ関数の多くのアプリケーションは衝突耐性に依存していないため、衝突攻撃はそれらのセキュリティに影響を与えません。たとえば、HMAC は脆弱ではありません。[ 12 ]攻撃が有効であるためには、攻撃者はハッシュ関数への入力を制御できる必要があります。
デジタル署名アルゴリズムは大量のデータを効率的に署名できないため、ほとんどの実装ではハッシュ関数を使用して署名が必要なデータ量を一定サイズに削減(「圧縮」)します。デジタル署名方式は、基となるハッシュ関数が事実上破られるとすぐにハッシュ衝突に対して脆弱になることがよくあります。ランダム化(ソルト付き)ハッシュなどの技術は、より困難な原像攻撃を要求することで時間を稼ぐことができます。[ 13 ]
一般的な攻撃シナリオは次のとおりです。
2008年、研究者らはこのシナリオを用いてMD5に対する選択プレフィックス衝突攻撃を行い、不正な認証局証明書を作成した。彼らはTLS公開鍵証明書の2つのバージョンを作成し、そのうちの1つは正規の証明書に見え、RapidSSL認証局に署名のために提出された。同じMD5ハッシュを持つもう1つのバージョンには、Webブラウザがそれを任意の他の証明書を発行する正当な認証局として受け入れるように指示するフラグが含まれていた。[ 14 ]
ハッシュフラッディング( HashDoS [ 15 ]とも呼ばれる)は、ハッシュ衝突を利用してハッシュテーブル検索の最悪ケース(線形プローブ)実行時間を悪用するサービス拒否攻撃です。 [ 16 ]これは元々、2003 年にアルゴリズム複雑性攻撃の一例として説明されました。[ 17 ]このような攻撃を実行するために、攻撃者は同じ値にハッシュされる複数のデータをサーバーに送信し、サーバーに遅い検索を実行させようとします。ハッシュテーブルで使用されるハッシュ関数の主な焦点はセキュリティではなく速度であったため、ほとんどの主要なプログラミング言語が影響を受け、[ 17 ]この種の新たな脆弱性は、最初の発表から 10 年経ってもまだ現れています。[ 16 ]
ハッシュ関数を過度に複雑にすることなくハッシュフラッディングを防ぐために、鍵が不明な限り衝突が見つけにくいというセキュリティ目標を持つ、新しい鍵付きハッシュ関数が導入されています。これらは以前のハッシュよりも処理速度が遅い場合がありますが、暗号学的ハッシュよりははるかに簡単に計算できます。2021年現在、Jean-Philippe AumassonとDaniel J. BernsteinのSipHash(2012)がこのクラスで最も広く使用されているハッシュ関数です。[ 18 ](アプリケーションのハッシュテーブルが外部から制御できない限り、鍵なしの「単純な」ハッシュも安全に使用できます。)
24.1
圧縮でMD5の衝突を見つけることができ、2.6GHz Pentium 4では約6秒かかります。
の構築におけるハッシュ関数の使用方法のため、これらの最近の攻撃で使用された手法は適用されません。