MD5とSHA

ハッシュ関数には共通鍵暗号などとは違い、それほど種類がありません。よく使われているものにMD5、SHA-1、SHA-2などがあります。

MD5(Message Digest Algorithm 5)はRSA開発者の一人であるロン・リベストが、MD4の安全性を向上させたアルゴリズムとして1991年に開発しました。インターネットを介したファイルの配布時に、破損や改ざんがないかの確認のためによく用いられます。

SHA(Secure Hash Algorithm)はNSAによって開発され、NISTにより米国政府標準として採用されており、大きくSHA-1とSHA-2に分かれます。
SHA-1は1995年に改訂され、SSLやPGPなど様々な暗号技術で利用されています。
SHA-2は2000年代前半に開発された数種のアルゴリズムのファミリー名称で、具体的なハッシュ関数としては出力されるビット数等の違いでSHA-224、SHA-256、SHA-384、SHA-512の4種類があります。

ハッシュ関数 長さ 脆弱性
MD5 128ビット ●2004年に異なる2つのデータに対して同一のMD5ハッシュ値が生成できることが示されて以来、今では強衝突耐性は容易に突破される状態にあり、パソコンレベルでも簡単に同じハッシュ値を持つデータをみつけることができます。
●2007年に情報の一部を固定しながら同一のMD5ハッシュ値を生成する計算法が発見され、理論的にハッシュ値からパスワード等の入力値を求めることができることが判明しました。(*1)
●現在、「インターネット標準暗号」を除き主要な標準・推奨規格にMD5は入っていません。
SHA-1 160ビット ●2004年に衝突耐性に対する脆弱性が発見されて依頼、様々な攻撃法が考え出されてきましたが、2008年10月現在で具体的に衝突が起こる例が求まったわけではない状態です。
●NISTは2010年までにはSHA-1の運用を中止し、SHA-2(具体的にはSHA-256)に移行するように誘導しています。日本の電子政府推奨暗号リストでもSHA-1の利用は推奨されておらず、仕様上やむを得ないとき以外は利用しないよう補記されています。
SHA-2 224〜512ビット ●2008年10月現在では脆弱性は発見されていないものの、SHA-1の設計を踏襲している面からもSHA-2の安全性に疑問がもたれています。
●NISTでは当面はSHA-2への移行を促すものの、次世代のハッシュ関数であるSHA-3を決めるAHS(Advanced Hash Standard)コンテストを開催していて、2012年には選定される予定です。

*1:【APOPのパスワードが探り当てられる脆弱性】

MD5のこの脆弱性により、メールサーバへのログイン用のプロトコルであるAPOP(Authenticated Post Office Protocol)のパスワードが解かれてしまう危険性が指摘されています。これはAPOPがハッシュ値の生成にMD5を利用するためです。

APOPではサーバから送られたチャレンジ・コードとパスワードを連結して、MD5によりハッシュ値を生成します。しかし、MD5の脆弱性により、あるパスワードを予想して、同じハッシュ値を作り出す2つの異なるチャレンジ・コードが生成できてしまいます。そのため偽装メールサーバを用意して、そのチャレンジ・コードを使用した2回のログインでハッシュ値が一致すれば、予想したパスワードが正しいことがわかってしまいます。

CRYPTREC Report 2007」でも12文字程度のパスワードなら500〜2000回の試行で特定できるという報告がなされています。その後、IPAの2008年7月の報告で、攻撃サーバとしてごく一般的なPCを用いても、通常の使用環境(メール到着確認周期が30分、2回に1回攻撃)で40日程度で12文字のパスワードを解読できるとしています。
CRYPTRECでは、APOPは仕様としてMD5以外を使用することができないため、APOPをメールの認証システムとして採用するのは避けるべきと結論づけています。