MD5(エムディーファイブ、Message Digest Algorithm 5)とは、与えられた入力に対して128ビットのハッシュ値を出力するハッシュ関数である。MD5のハッシュキーの長さは、2(約 3.403×10 = 340澗 = 340京の1京倍)通りのハッシュ値をとり、IPv6のアドレス空間と同じである。1991年に開発されたMD5は、前身であるMD4の安全性を向上させたものである。開発者はMD4と同じく、マサチューセッツ工科大学(MIT)教授でRSA暗号の開発者でもあるロナルド・リベスト (Ronald Linn Rivest)。Linuxでは md5sum、FreeBSDでは md5 というコマンドが用意されており、これを用いてメッセージダイジェストを出力することが出来る。出力されるメッセージダイジェストは、の様に32個の16進数の数字が並んだテキスト形式で出力され、これをフィンガプリント(指紋)やハッシュ値、あるいは単にMD5値と呼ぶ。「MD5チェックサム」とも良く言われる。MD5は、電子署名を必要とするアプリケーション向けに開発された。RSAで署名を生成する際に、メッセージを直接対象として署名を生成するのではなく、メッセージのハッシュ値を生成し、ハッシュ値に対して署名を生成する。ファイルを転送する際にそのファイルが破損していないことを確認するためにも用いられる。配布する側は、ファイル配布時にそのファイルのMD5ハッシュ値(いわゆるMD5チェックサム)も同時に配布する。受信したユーザは手元でファイルのMD5値を計算して、配布者の提示したMD5値と一致することを確認すれば良い。ファイル本体とハッシュ値の両方が破損して偶然一致する可能性もゼロではないが、現実的ではないので無視できる。このような目的にCRCを用いることもあるが、CRCは標準が複数存在するため現在ではあまり見られない。またファイルが改竄されていないことを証明するためにも用いられる。これにより、作成者以外によるトロイの木馬やコンピュータウイルスなどの混入を防ぐことが出来る。しかし、この場合MD5値は手元で計算できるため、改竄済みのファイルのMD5値が同梱されている可能性がある。したがって、改竄の恐れがある場合には、ファイルに同封されているMD5値と比較するのではなく、MD5値だけは何かしら信頼できる方法で配布者から入手する必要がある。FreeBSDはインストール可能なCDイメージと、それのMD5値を同時に配布している。(MD5値の改変はないと仮定して)インストール可能なCDイメージが、途中で改変されていないことを確認してみる。MD5、およびRIPEMDとよばれるハッシュ関数には理論的な弱点が存在することが明らかとなっている(外部リンク参照)。2004年8月、暗号の国際会議 CRYPTO (のランプセッション)にて、MD5のコリジョンを求めることができたという報告があった。理論的可能性として、MD5を用いて改竄されないことを確認する場合、あらかじめ正規のファイルと不正なファイルを用意しておき、正規のファイルを登録しておきながら、実際には同じMD5を持つ不正なファイルに摩り替える攻撃がありえることを意味する。また2007年11月、2つの全く異なる実行ファイルを元に、各々の末尾にデータブロックを付加し、その部分を変更しながら探索を行うことにより、同一のMD5を持たせることに成功したという報告があった。この攻撃方法は実証されたことになる。アメリカ合衆国政府では、MD5ではなく、Secure Hash Algorithm (SHA)を標準のハッシュとして使用している。日本のCRYPTRECでは、MD5を政府推奨暗号リストから外し、SHA-256以上を推奨している。MD5 のハッシュ値については、パソコンレベルでも数10分程度で、同一ハッシュ値の非ユニークなデータ列を生成できる実装が広まっている。すなわち、強衝突耐性は容易に突破されうる状態にある(SHA-0/SHA-1アルゴリズムについても、MD5ほど容易ではないが突破される脆弱性が発見されている)。ただし、任意に与えられたハッシュ値に対して、(何らかの別の)データを生成する実装が広まっているわけではないので、弱衝突耐性が容易に突破されうる訳ではない。また、任意に与えられたハッシュ値に対して、改竄者の意図どおりのデータ列を容易に生成できる訳でもない(もしそうならば、それは既に暗号ではない)。強衝突耐性の突破とは例えば、同一のハッシュ値を持つ非ユニークな2つのデータ列D1とD2のペアを1つ発見できた、ということである。なお、この場合D1やD2が意味を持つデータであるかどうかは問われない。また、データ列D3のハッシュ値がHであったとして、この"特定の"ハッシュ値Hに対して、同一のハッシュ値を持つような他のデータ列D4を発見できたとしたら、それは弱衝突耐性を突破された事を意味する(即ち、D3とHの組み合わせで無改竄性を証明できなくなる)。そのため、直ちにこれらのハッシュアルゴリズムを用いている暗号化通信が盗聴・改竄されたり、電子署名の有効性が無くなると言うわけではない。しかし、強衝突耐性が突破されたという事は、将来的には攻撃手法や計算能力の進化により、弱衝突耐性も突破されうるという事を暗示する。もし弱衝突耐性が突破されたとしたら、もはや暗号化通信や電子署名の無改竄性を証明できなくなり、その暗号化・署名システムは(半ば)死を意味する。また、暗号化・署名システムのintegrity(例えば最良攻撃手法に対して十分に頑強であるという事)にハッシュ強衝突耐性の突破が困難であるという前提がもし有った場合には、そのシステムのintegrityも当然に失われる事になる。Integrityを要求されるシステムでは、その再検証が最低限必要となる。2007年4月IPAはAPOPの脆弱性について警告した。これは電気通信大学の太田和夫(暗号理論)らが発見したもので、APOPのプロトコル上の弱点を利用して、MD5ハッシュから理論的に元のパスワードを求めることが出来るというものである。これの対策としては、SSLの利用が推奨されている。(総当たり攻撃法によるツールは既に公表されている)2012年4月に発覚した「Flame攻撃」(Microsoft Updateに対するなりすまし攻撃)において、一部のデジタル証明書の署名アルゴリズムにMD5が使われていたことから、MD5 の衝突耐性に関する脆弱性をついて、デジタル証明書の偽造が行われたように一部媒体では報道されている。しかし、米ソフォス (Sophos) 社の記事によると、マイクロソフトがコード署名に使用できるデジタル証明書であって、ターミナルサーバーライセンスインフラストラクチャ(中間Certificate Authenticity)上で使用できるものを、誤って発行していた事が原因とされている。また、Flameマルウェアが攻撃に使用したデジタル証明書を入手した経路、また前述の MD5 で署名された証明書をクラックして偽造したものであるか否かは明らかになっていないとしている。一方マイクロソフトは、Windows Vista以降のバージョンにおけるコード署名の検証を回避するためには攻撃者が MD5 の衝突を利用して特定の拡張フィールドを削除する必要があったとしている。マイクロソフトは2012年6月5日に、問題となったターミナルサーバーライセンスインフラストラクチャの中間Certificate Authenticityを無効化するセキュリティアップデートを公開している。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"、2を法とした加算、左へのビットローテートが行われる。そして、16回の操作を1ラウンドとして、512ビットの入力ブロックを処理するのに4ラウンドの処理が行われる。"F"には4通りの関数があり、ラウンドごとに異なるものが使われる。formula_5はそれぞれXOR、AND、OR、NOT演算を意味する。MD5ハッシュは、以下のようなアルゴリズムで算出される。値はすべてリトルエンディアンとする。なお、RFC 1321 にある本来の式に代えて、以下のように計算するほうが効率的な場合がある(高級言語で書いている場合、コンパイラの最適化に任せるほうがよい。NANDとANDが並行して計算できる環境であれば、並列演算のできない以下の式に比べて、元のままのほうが速いことも多々ある)。
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。