今日学んだこと:MD5に関して

2025年11月20日

概要

MD5はRonald Rivest が1991年に設計した暗号ハッシュ関数で、1992年にRFC 1321として仕様化された。 MD5は任意の長さのメッセージを入力として受け取り、 128ビットの「指紋」またはメッセージダイジェストを出力する。

16進数で表現すると、MD5は常に32文字(128ビット÷4ビット/文字)の固定長の文字列を生成する。

アルゴリズムの特性

処理フロー:

  1. 入力メッセージを512ビットブロックに分割
  2. パディング処理で最後のブロックを調整
  3. 4つのラウンド処理を実行(各ラウンドで16ステップ = 計64ステップ)
  4. 128ビットの出力を生成

MD5には4つのラウンドがあり、圧縮関数は64ステップを含む。一方、先行するMD4には3つのラウンドと48ステップがあった。各ステップは固有の定数を持ち、「アバランシェ効果」を促進するために前のステップの結果を追加する。

MD5の用途

適切な用途:

  • ファイルの整合性チェック(意図しない破損検出)
  • チェックサムの生成
  • APIの簡易認証(FutureShopの例のように)
  • データベースの分割キー決定

セキュリティ上の致命的な問題

MD5は現代のセキュリティ要件では使用すべきではない

MD5には広範な脆弱性が発見されており、2008年12月31日に、CMUソフトウェアエンジニアリング研究所はMD5が本質的に「暗号学的に破られており、さらなる使用には適さない」と結論付けた。

具体的な攻撃:

2005年3月1日に、Arjen Lenstra、Xiaoyun Wang、およびBenne de Wegerは、異なる公開鍵を持つが同じMD5ハッシュ値を持つ2つのX.509証明書の構成を実証した。その直後、Vlastimil Klimaは改善されたアルゴリズムを説明し、 MD5衝突を数時間でノートパソコンで構成できることを示した。

2006年3月18日に、Klimaは1分以内に衝突を見つけられるアルゴリズムを発表した。

つまり:

  • 衝突攻撃が実用的:全く異なる入力が同じMD5値を生成できる
  • 検出が難しい:攻撃者は任意の接頭辞を共有する衝突を作成可能
  • 実際の悪用例:2012年にFlameマルウェアがMD5の脆弱性を悪用

参考文献

公式仕様:

セキュリティ更新:

学術的な攻撃論文:

  • Wang, X. and Yu, H. "How to Break MD5 and other Hash Functions" (2005)