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