MD5ハッシュアルゴリズム
MD5ハッシュアルゴリズムの仕組み、128ビット出力、既知の脆弱性、暗号学的に破られているにもかかわらずセキュリティ以外のチェックサムに使われ続ける理由を解説します。
詳細な説明
MD5(Message-Digest Algorithm 5)は、1991年にRonald Rivestが設計したMD4の改良版です。128ビット(16バイト)のハッシュダイジェストを生成し、通常32文字の16進数文字列として表示されます。最も広く知られたハッシュ関数の一つですが、現在では暗号学的に破られており、セキュリティ用途には不適切とされています。
MD5の仕組み:
MD5は512ビットブロック単位で入力を処理します。メッセージを448 mod 512と合同になるようパディングし、元の長さを64ビット値として追加した後、各ブロックは4ラウンド×各16操作(合計64操作)を通過します。各ラウンドでは異なる非線形関数(F, G, H, I)がビット演算、モジュラー加算、左回転とともに4つの32ビット状態変数(A, B, C, D)に適用されます。
MD5が破られた理由:
2004年、研究者のXiaoyun WangとHongbo Yuが実用的な衝突攻撃を実証し、同じハッシュを生成する2つの異なる入力を発見しました。2008年には研究者がMD5衝突を利用して不正なCA証明書を作成し、攻撃が現実の影響を持つことを証明しました。現在、MD5衝突の生成は一般的なハードウェアで数秒で可能です。2012年のFlameマルウェアはMD5衝突を悪用してWindows Updateの署名を偽造しました。
MD5がまだ使われている場面:
暗号学的な弱点にもかかわらず、MD5はセキュリティ以外のタスクでは一般的に使われています。ファイルダウンロードの偶発的破損の検証、キャッシュキーの生成、データの重複排除、高速なフィンガープリント機構としての利用などです。重要な区別は、MD5は偶発的な変更の検出には問題ありませんが、意図的な改ざんに対しては保護できないということです。
実用的なガイダンス:
デジタル署名、証明書検証、パスワードハッシュ、衝突が悪用される可能性のあるコンテキストにMD5を使用しないでください。新しいプロジェクトでは常にSHA-256またはSHA-3を使用してください。
ユースケース
MD5は、Webアプリケーションでのキャッシュキー生成、ストレージシステムでのデータ重複排除、ダウンロードの偶発的な破損検証に一般的に使用されています。