MD5
(md5sum から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/07/06 21:37 UTC 版)
![]() |
出典は列挙するだけでなく、脚注などを用いてどの記述の情報源であるかを明記してください。
|
一般 | |
---|---|
設計者 | ロナルド・リベスト |
初版発行日 | 1992年4月 |
シリーズ | MD2, MD4, MD5, MD6 |
詳細 | |
ダイジェスト長 | 128 bit |
構造 | Merkle-Damgård construction |
ラウンド数 | 4 [1] |
最良の暗号解読法 | |
2009年にTao Xie、Dengguo Fengによって強衝突耐性が破られている (220.96 time)。通常のコンピュータで数秒で可能[2]。 |
MD5(エムディーファイブ、英: message digest algorithm 5)は、暗号学的ハッシュ関数のひとつである。ハッシュ値は128ビット。
概要
MD4が前身であり、安全性を向上させたもの。1991年に開発された。開発者はMD4と同じくロナルド・リベスト。
d41d8cd98f00b204e9800998ecf8427e
のようなハッシュ値が得られる。
用途
一般的な暗号学的ハッシュ関数と同様に使用できる。ただし、後述の脆弱性があり強度が必要な場合には使ってはいけない。
実際の使用例
FreeBSDはインストール可能なCDイメージと、それのMD5値を同時に配布している。(MD5値の改変はないと仮定して)インストール可能なCDイメージが、途中で改変されていないことを確認してみる。
- md5 コマンドを、イメージファイルに実行する。
- localhost% md5 5.1-RELEASE-i386-miniinst.iso
- MD5 (5.1-RELEASE-i386-miniinst.iso) = 646da9ae5d90e6b51b06ede01b9fed67
- CHECKSUM.MD5の中身を確認し、一致していれば破損の可能性は極めて低いことが分かる。
- localhost% cat CHECKSUM.MD5
- MD5 (5.1-RELEASE-i386-disc1.iso) = 3b6619cffb5f96e1acfa578badae372f
- MD5 (5.1-RELEASE-i386-disc2.iso) = 2cfa746974210d68e96ee620bf842fb6
- MD5 (5.1-RELEASE-i386-miniinst.iso) = 646da9ae5d90e6b51b06ede01b9fed67
安全性
MD5、およびRIPEMDとよばれるハッシュ関数には理論的な弱点が存在することが明らかとなっている[3][4]。
2004年8月、暗号の国際会議 CRYPTO (のランプセッション)にて、MD5のコリジョンを求めることができたという報告があった。理論的可能性として、MD5を用いて改竄されないことを確認する場合、あらかじめ正規のファイルと不正なファイルを用意しておき、正規のファイルを登録しておきながら、実際には同じMD5を持つ不正なファイルに摩り替える攻撃がありえることを意味する。また2007年11月、2つの全く異なる実行ファイルを元に、各々の末尾にデータブロックを付加し、その部分を変更しながら探索を行うことにより、同一のMD5を持たせることに成功したという報告があった。この攻撃方法は実証されたことになる。
アメリカ合衆国政府では、MD5ではなく、Secure Hash Algorithm (SHA)を標準のハッシュとして使用している。 日本のCRYPTRECでは、MD5を政府推奨暗号リストから外し、SHA-256 (SHA-2のバリエーション) 以上を推奨している。
ハッシュの衝突耐性について
MD5 のハッシュ値については、パソコンレベルでも数10分程度で、同一ハッシュ値の非ユニークなデータ列を生成できる実装が広まっている。すなわち、強衝突耐性は容易に突破されうる状態にある(SHA-0/SHA-1アルゴリズムについても、MD5ほど容易ではないが突破される脆弱性が発見されている)。
一方、任意に与えられたハッシュ値に対して、(何らかの別の)データを生成する実装が広まっているわけではない。すなわち、弱衝突耐性が容易に突破されうる訳ではない。また、任意に与えられたハッシュ値に対して、改竄者の意図どおりのデータ列を容易に生成できる訳でもない(もしそうならば、それは既に暗号ではない)。
強衝突耐性の突破とは例えば、同一のハッシュ値を持つ非ユニークな2つのデータ列D1とD2のペアを1つ発見できた、ということである。なお、この場合D1やD2が意味を持つデータであるかどうかは問われない。また、データ列D3のハッシュ値がHであったとして、この"特定の"ハッシュ値Hに対して、同一のハッシュ値を持つような他のデータ列D4を発見できたとしたら、それは弱衝突耐性を突破された事を意味する(即ち、D3とHの組み合わせで無改竄性を証明できなくなる)。
そのため、直ちにこれらのハッシュアルゴリズムを用いている暗号化通信が盗聴・改竄されたり、電子署名の有効性が無くなると言うわけではない。しかし、強衝突耐性が突破されたという事は、将来的には攻撃手法や計算能力の進化により、弱衝突耐性も突破されうるという事を暗示する。もし弱衝突耐性が突破されたとしたら、もはや暗号化通信や電子署名の無改竄性を証明できなくなり、その暗号化・署名システムは(半ば)死を意味する。
また、暗号化・署名システムのintegrity(例えば最良攻撃手法に対して十分に頑強であるという事)にハッシュ強衝突耐性の突破が困難であるという前提がもし有った場合には、そのシステムのintegrityも当然に失われる事になる。Integrityを要求されるシステムでは、その再検証が最低限必要となる。
APOPの脆弱性
2007年4月IPAはAPOPの脆弱性について警告した[5]。これは電気通信大学の太田和夫(暗号理論)らが発見したもので[6]、APOPのプロトコル上の弱点を利用して、MD5ハッシュから理論的に元のパスワードを求めることが出来るというものである。これの対策としては、SSLの利用が推奨されている。(総当たり攻撃法によるツールは既に公表されている)
Flame攻撃に関して
2012年4月に発覚した「Flame攻撃」(Microsoft Updateに対するなりすまし攻撃)において、一部のデジタル証明書の署名アルゴリズムにMD5が使われていたことから、MD5 の衝突耐性に関する脆弱性をついて、デジタル証明書の偽造が行われたように一部媒体では報道されている[7]。
しかし、米ソフォス (Sophos) 社の記事によると[8]、マイクロソフトがコード署名に使用できるデジタル証明書であって、ターミナルサーバーライセンスインフラストラクチャ(中間Certificate Authenticity)上で使用できるものを、誤って発行していた事が原因とされている。また、Flameマルウェアが攻撃に使用したデジタル証明書を入手した経路、また前述の MD5 で署名された証明書をクラックして偽造したものであるか否かは明らかになっていないとしている。一方マイクロソフトは、Windows Vista以降のバージョンにおけるコード署名の検証を回避するためには攻撃者が MD5 の衝突を利用して特定の拡張フィールドを削除する必要があったとしている[9]。
マイクロソフトは2012年6月5日に、問題となったターミナルサーバーライセンスインフラストラクチャの中間Certificate Authenticityを無効化するセキュリティアップデートを公開している[10]。
アルゴリズム



MD5は可変長の入力を処理して、128ビット固定長の値を出力する。入力メッセージは512ビット(32ビットのワードが16個)ごとに切り分けられるが、長さが512の倍数となるようにパディングが行われる。 パディングとしてはまずメッセージの最後に1ビットの1を足して、その後には長さが512で割って448余る(つまり、512の倍数に64足りない)長さになるようにひたすら0を付け足していく。そして、残った64ビットには元のメッセージの長さ(の下位64ビット)を入れることとなる。
MD5のメイン部分のアルゴリズムは32ビット×4ワード(それぞれのワードをA、B、C、Dと表す) = 128ビットの状態を持って進行していく。初期状態では、この4ワードは決まった定数で初期化されており、 512ビットのブロックを順次使ってこの状態を変化させていくのがMD5の中核となっている。1回の処理では非線形な関数F、232を法とした加算、左へのビットローテートが行われる。 そして、16回の操作を1ラウンドとして、512ビットの入力ブロックを処理するのに4ラウンドの処理が行われる。Fには4通りの関数があり、ラウンドごとに異なるものが使われる。
-
カテゴリ:ハッシュ関数・メッセージ認証コード・認証付き暗号
カテゴリ
- md5sumのページへのリンク