Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/corkami/collisions
エクスプロイトハッシュ分析暗号化バイナリ解析学習と教育
GitHubcorkami/collisions

collisions

ハッシュ衝突と悪用

リポジトリを見る
3.4k210401年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

ハッシュ衝突と悪用

作者: Ange Albertini と Marc Stevens.

FAQ (TL;DR)

Q: ファイルに任意のMD2/MD4/MD5/MD6/SHA1/SHA2/SHA3、または別のファイルと同じハッシュを付与することは可能ですか?
A: いいえ。

Q: 同じハッシュを持つ2つの異なるファイルを作成できますか?
A: MD5なら、標準的なコンピュータで数秒です。SHA1なら、可能ですが、エンドユーザーには現実的ではありません(計算量: 2^61.2 コスト: $11k)。

Q: データを追加することで、2つの異なるファイルに同じハッシュを持たせられますか?
A: MD5なら、標準的なコンピュータで数時間です。SHA1なら、可能ですが、エンドユーザーには現実的ではありません(計算量: 2^63.4 コスト: $45K)。

Q: 2つのファイルは有効なままですか?
A: 一般的にははい。ほとんどのファイル形式は追加データを許容するためです。その一方で、ファイル署名はおそらく壊れます。

Q: 任意の内容を持つ2つの異なるファイルに同じハッシュを持たせられますか?
A: はい、特別なファイル構造に依存すれば瞬時に行えます:

  1. 2つの内容を切り替えるスイッチとして機能する、トリックを用いた特別な形式ヘッダー(またはペア)(一部の形式ではこのようなトリックを許可しません)。
  2. 特定のヘッダーに基づいて事前計算された衝突。
  3. 特定の形式の2つの内容で、衝突点の後に両方とも存在するもの(計算後に追加されます)。

Q: どの形式で即座にMD5衝突ファイルのペアを入手できますか?
A: JPG、PNG、GIF、GZIP、Portable Executable、MP4、JPEG2000、PDF、DOCX/PPTX/XSLX、EPUB、3MF、XPS。対応するスクリプトを実行するだけです。

Q: SHA1ではどうですか?
A: SHA1では、PDF内のJPGが計算され、実装されています。

Q: MD5ですでにサポートされている形式(JPG、PNG...)をSHA1で使う場合はどうですか?
A: おそらくSHA1でもサポートされていますが、それらの衝突はまだ計算されていません。

Q: 類似した(ただし異なる)内容の場合、計算は速くなりますか?
A: いいえ。わずかな違いでも完全な計算が必要です。

Q: どの形式にはそのようなショートカットがないのですか?
A: ELF、Mach-O、Java Class、TAR、ZIP(その他にもあります...)

Q: これらの形式でも従来の衝突(数時間)は可能ですか?
A: はい、任意の量の追加データが許容される限り可能です(つまり、ZIPやClassではおそらく不可能)。

Q: 衝突の例を提供していますか?
A: はい。

目次

  • はじめに
  • ステータス
  • 攻撃
    • 同一プレフィックス
      • FastColl (MD5)
      • UniColl (MD5)
      • Shattered (SHA1)
    • 選択プレフィックス衝突
      • HashClash (MD5)
      • Shambles (SHA1)
    • 攻撃のまとめ
  • 悪用
    • 標準的な戦略
      • JPG
        • カスタムスキャン
      • PNG
        • 非互換性
      • GIF
      • GZIP
      • LZ4 / Zstandard
      • Portable Executable
      • MP4など
        • JPEG2000
      • PDF
        • PDF内のJPG
      • ZIP
        • ZIPベースの形式
      • その他
    • 一般的でない戦略
      • MultiColls: 複数衝突の連鎖
        • Hashquines
      • 有効性
      • PolyColls: 異なるファイルタイプ間の衝突
        • PE - JPG
        • PDF - PE
        • PDF - PNG
      • PileUps (マルチ衝突)
        • PE - PNG - MP4 - PDF
    • ユースケース
      • 全部衝突させよう!
      • 不利な証拠ファイル
    • 失敗例
      • ELF
      • Mach-O
      • Java Class
      • TAR
    • 悪用のまとめ
    • テストファイル
  • 検出
    • 安全なハッシュ
  • 参考文献
  • クレジット
  • 結論

はじめに

このドキュメントの目的は、既存の攻撃を広範囲に調査すること - その過程でMD5がどれほど弱いかを示すこと(あらゆるJPG、PNG、PDF、MP4、PE...の即時衝突) - また、一般的なファイル形式を詳細に調査して、 現在または将来の攻撃でどのように悪用され得るかを明らかにすることです。

実際、同じファイル形式のトリックは複数のハッシュに使用できます (同じJPGのトリックはMD5、 malicious SHA-1、SHA1に使用されました)、 衝突が同じバイトパターンに従う限り。

このドキュメントは、新しい攻撃(最新のものは2012年に文書化されました)についてではなく、 既存の攻撃に対する新しい悪用形態についてです。

ステータス

既知の攻撃の現在のステータス:

  • ファイルに別のファイルのハッシュまたは指定したハッシュを持たせること:不可能

    • このことはMD2やMD4でも依然として非現実的です。
    • より単純なハッシュでは可能(*)
  • 同じMD5を持つ2つの異なるファイルを取得:瞬時

    • 例: 1 ⟷ 2
  • 2つの任意のファイルに同じMD5を持たせること:数時間(72時間.core)

    • 例: 1 ⟷ 2
  • 特定のファイル形式(PNG、JPG、PE...)の2つの任意のファイルに同じMD5を持たせること:瞬時

    • 下記参照
  • 同じSHA1を持つ2つの異なるファイルを取得:6500年.core

    • 異なる画像を表示する同じSHA-1を持つ2つの異なるPDFを取得:瞬時(プレフィックスはすでに計算済み)

(*) cryptでの例 - Svenに感謝!```

import crypt crypt.crypt("5dUD&66", "br") 'brokenOz4KxMc' crypt.crypt("O!>',%$", "br") 'brokenOz4KxMc'

# 攻撃

MD5 と SHA1 は 64 バイトのブロックで動作します。

2 つのコンテンツ A と B が同じハッシュを持つ場合、両方に同じコンテンツ C を追加しても、ハッシュは同じままになります。``` text
hash(A) = hash(B) -> hash(A + C) = hash(B + C)

衝突は、ブロック境界に、ファイル内のそれまでの内容に依存する計算済みの衝突ブロックを挿入することで機能します。これらの衝突ブロックは、各攻撃に固有のパターンを持つわずかな差分を伴って、非常にランダムに見えます。それらは微小な差分を導入しますが、結局これらのブロックの後ではハッシュ値が同じになります。

これらの差分は、特定のプロパティを持つ有効なファイルを細工するために悪用されます。

ファイル形式もトップダウンで処理され、そのほとんどがバイトレベルのチャンクで動作します。

一部の「コメント」チャンクは、ファイルチャンクをブロック境界に整列させたり、特定の構造を衝突ブロックの差分に合わせたり、衝突ブロックの残りのランダム性をファイルパーサーから隠したり、そうでなければ有効なコンテンツをパーサーから隠したり(別のコンテンツが見えるようにするため)するために挿入できます。

これらの「コメント」チャンクは、公式には実際のコメントではないことがよくあります。それらは単にパーサーに無視されるデータコンテナとして使用されます(例えば、小文字で始まるIDを持つPNGチャンクは付随的であり、必須ではありません)。

ほとんどの場合、衝突ブロックの差分はコメントチャンクの長さを変更するために使用され、その長さは通常このチャンクのデータの直前に宣言されます。このチャンクの短いバージョンと長いバージョンの間のギャップに、別のコメントチャンクを宣言して、一方のファイルのコンテンツ A を飛び越えます。このファイルコンテンツ A の後に、別のファイルコンテンツ B を単に追加します。

ファイル形式は通常、パーサーをそこで停止させるターミネータを定義するため、A はパースを終了させ、追加されたコンテンツ B は無視されます。

したがって、通常は少なくとも2つのコメントが必要です - 多くの場合3つです:

  1. 整列
  2. 衝突ブロックを隠す
  3. 一方のファイルコンテンツを隠す(再利用可能な衝突のため)

これらのファイル形式の共通プロパティによってそれが可能になります - それらは通常、弱点としては見なされませんが、検出したり正規化で除去したりできます:

  • ダミーチャンク - コメントとして使用
  • 複数のコメント
  • 巨大なコメント(長さ: MP4では64b、PNGでは32b -> 自明な衝突。JPGでは16b、GIFでは8b -> GIFには汎用的な衝突はなく、JPGでは限定的)
  • コメントに任意のデータを格納する(ASCIIまたはUTF8が強制される場合がある)
  • ターミネータの後に任意のデータを格納する(通常は悪意のある目的のみに使用される) - 同じオフセットで終わる2つのコメントを使用することで回避可能。
  • 整合性チェックがない。PNGのCRC32は通常無視される。 ただし、衝突ブロックが異なる長さのチャンクを宣言するため、それらはすべて正しくなり得る - そのため、チャンクのデータの開始が異なっていても、 チャンクの長さは異なる。
  • フラットな構造: ASN.1 は、含まれるすべてのサブ構造の長さを持つ親構造を定義しており、 これによりこれらの構造は防止される: 長さを悪用する必要があるが、親の長さも悪用する必要がある。
  • ヘッダの前にコメントを置く - これにより、汎用的な再利用可能な衝突が可能になる。

同一プレフィックス

  1. 任意のプレフィックスを定義する - その内容と長さは問わない。
  2. プレフィックスは次の64バイトブロックにパディングされる。
  3. プレフィックスに応じて衝突ブロック(複数可)が計算され、追加される。 両方の側は非常にランダムである。差分は攻撃によって事前に決定される。
  4. この(これらの)ブロックの後では、ファイルの差分にもかかわらずハッシュ値は同じになる。
  5. 任意の同一サフィックスを追加できる。
プレフィックス=プレフィックス
衝突 A≠衝突 B
サフィックス=サフィックス

両方のファイルはほぼ同一です(それらのコンテンツには数ビットの差分しかありません)。

悪用:

2つのコンテンツをバンドルし、次に以下のいずれかを行います:

  • データ悪用: 差分をチェックしてどちらか一方を表示するコードを実行する(差分が事前に分かっているため、通常は自明)。
  • 構造悪用: ファイル構造(通常はコメントの長さ)を利用して、一方のコンテンツを隠すか、もう一方を表示する(ファイル形式とそのパーサーに依存する)。

この構造を持つ2つのファイル:

ツールをダウンロード