今日学んだこと:MD5に関して
2025年11月20日
概要
MD5はRonald Rivest が1991年に設計した暗号ハッシュ関数で、1992年にRFC 1321として仕様化された。 MD5は任意の長さのメッセージを入力として受け取り、 128ビットの「指紋」またはメッセージダイジェストを出力する。
16進数で表現すると、MD5は常に32文字(128ビット÷4ビット/文字)の固定長の文字列を生成する。
アルゴリズムの特性
処理フロー:
- 入力メッセージを512ビットブロックに分割
- パディング処理で最後のブロックを調整
- 4つのラウンド処理を実行(各ラウンドで16ステップ = 計64ステップ)
- 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の脆弱性を悪用
参考文献
公式仕様:
- RFC 1321: The MD5 Message-Digest Algorithm (1992) https://www.ietf.org/rfc/rfc1321.txt
セキュリティ更新:
- RFC 6151: Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms (2011) https://www.rfc-editor.org/rfc/rfc6151
学術的な攻撃論文:
- Wang, X. and Yu, H. "How to Break MD5 and other Hash Functions" (2005)