MD5が安全でない理由

MD5が暗号学的に破られている理由の完全な分析。衝突攻撃、現実の悪用事例、非推奨化のタイムライン、MD5の代わりに何を使うべきかを解説します。

MD5

詳細な説明

MD5は1991年に安全な暗号学的ハッシュ関数として設計されましたが、一連の深刻な攻撃によりセキュリティ目的には完全に不適切となりました。

MD5の崩壊のタイムライン:

1996年、Hans DobbertinがMD5の圧縮関数の衝突を発見し、早期の懸念を引き起こしました。2004年、Xiaoyun Wangが最初の実用的衝突攻撃を実証し、標準的なコンピュータで約1時間で同じMD5ハッシュを持つ2つの異なる入力を見つけました。2006年までに攻撃は1分未満に最適化されました。2008年、研究者がMD5衝突を使用して不正SSL認証局証明書を作成。2012年、FlameマルウェアがMD5衝突を悪用してMicrosoftのコード署名証明書を偽造しました。

衝突攻撃の詳細:

Wangの攻撃はMD5のラウンド関数の差分的弱点を悪用します。2つのメッセージブロック間の差分を慎重に選択することで、処理後にこれらの差分が相殺され、同一のハッシュ値が得られます。現在、MD5衝突はHashClashなどの公開ツールを使って任意のコンピュータで数秒で生成可能です。

実際の影響:

不正CA証明書攻撃は、MD5衝突が壊滅的な現実世界の影響を持つことを実証しました。研究者は2つのX.509証明書を作成し、一方の正規証明書に対するCAの署名がもう一方の悪意あるCA証明書にも有効でした。これにより任意のドメインの信頼される証明書を発行できました。

原像攻撃について:

MD5の衝突攻撃は簡単ですが、原像攻撃(特定のターゲット値にハッシュされる入力を見つける)は2^123回の操作で依然として計算不可能です。これがHMAC-MD5がまだ技術的に安全とされる理由ですが、HMAC-SHA256への移行が推奨されます。

置き換えのガイダンス:

整合性検証、デジタル署名、証明書検証にはSHA-256で置き換えてください。パスワードハッシュにはbcryptまたはArgon2で置き換えてください。セキュリティ以外の用途(キャッシュキー、重複排除)ではMD5は許容されますが、一貫性のためSHA-256が推奨されます。

ユースケース

セキュリティ監査人は、レガシーシステムにおけるMD5の置き換えを特定し優先順位付けするためにこの知識を活用します。特に証明書検証、デジタル署名、パスワード保存が重要です。

Try It — Hash Generator

フルツールを開く