MD2

MD2 (Message Digest Algorithm 2) について



MD2は、1989年ロナルド・リベストによって開発された暗号学的ハッシュ関数です。8ビットコンピュータでの利用を想定して最適化されており、その仕様はRFC 1319で詳細に定義されています。

MD2の概要



MD2の主な特徴は、入力されたメッセージから固定長のハッシュ値を生成することです。このハッシュ値は、元のメッセージがわずかでも変更されると、大きく異なる値となるため、メッセージの改ざん検知などに利用されます。

MD2の処理は、まずメッセージを特定のブロックサイズ(128ビット/16バイト)の倍数になるようにパディングし、さらに16バイトのチェックサムを追加することから始まります。実際の計算では、48バイトの補助ブロックと、円周率の小数部分から生成される256バイトのSテーブルが使われます。

計算の核となる部分は、入力された16バイトのデータに対して、補助ブロックの各バイトを18回並び替えるループです。この処理をパディングされたメッセージのすべてのブロックに対して実行し、最後に補助ブロックの最初の不完全なブロックがメッセージのハッシュ値として出力されます。

以下は、MD2で使われる256バイトのSテーブルを16進数で表したものです。


0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01, 0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13,
0x62, 0xA7, 0x05, 0xF3, 0xC0, 0xC7, 0x73, 0x8C, 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, 0x82, 0xCA,
0x1E, 0x9B, 0x57, 0x3C, 0xFD, 0xD4, 0xE0, 0x16, 0x67, 0x42, 0x6F, 0x18, 0x8A, 0x17, 0xE5, 0x12,
0xBE, 0x4E, 0xC4, 0xD6, 0xDA, 0x9E, 0xDE, 0x49, 0xA0, 0xFB, 0xF5, 0x8E, 0xBB, 0x2F, 0xEE, 0x7A,
0xA9, 0x68, 0x79, 0x91, 0x15, 0xB2, 0x07, 0x3F, 0x94, 0xC2, 0x10, 0x89, 0x0B, 0x22, 0x5F, 0x21,
0x80, 0x7F, 0x5D, 0x9A, 0x5A, 0x90, 0x32, 0x27, 0x35, 0x3E, 0xCC, 0xE7, 0xBF, 0xF7, 0x97, 0x03,
0xFF, 0x19, 0x30, 0xB3, 0x48, 0xA5, 0xB5, 0xD1, 0xD7, 0x5E, 0x92, 0x2A, 0xAC, 0x56, 0xAA, 0xC6,
0x4F, 0xB8, 0x38, 0xD2, 0x96, 0xA4, 0x7D, 0xB6, 0x76, 0xFC, 0x6B, 0xE2, 0x9C, 0x74, 0x04, 0xF1,
0x45, 0x9D, 0x70, 0x59, 0x64, 0x71, 0x87, 0x20, 0x86, 0x5B, 0xCF, 0x65, 0xE6, 0x2D, 0xA8, 0x02,
0x1B, 0x60, 0x25, 0xAD, 0xAE, 0xB0, 0xB9, 0xF6, 0x1C, 0x46, 0x61, 0x69, 0x34, 0x40, 0x7E, 0x0F,
0x55, 0x47, 0xA3, 0x23, 0xDD, 0x51, 0xAF, 0x3A, 0xC3, 0x5C, 0xF9, 0xCE, 0xBA, 0xC5, 0xEA, 0x26,
0x2C, 0x53, 0x0D, 0x6E, 0x85, 0x28, 0x84, 0x09, 0xD3, 0xDF, 0xCD, 0xF4, 0x41, 0x81, 0x4D, 0x52,
0x6A, 0xDC, 0x37, 0xC8, 0x6C, 0xC1, 0xAB, 0xFA, 0x24, 0xE1, 0x7B, 0x08, 0x0C, 0xBD, 0xB1, 0x4A,
0x78, 0x88, 0x95, 0x8B, 0xE3, 0x63, 0xE8, 0x6D, 0xE9, 0xCB, 0xD5, 0xFE, 0x3B, 0x00, 0x1D, 0x39,
0xF2, 0xEF, 0xB7, 0x0E, 0x66, 0x58, 0xD0, 0xE4, 0xA6, 0x77, 0x72, 0xF8, 0xEB, 0x75, 0x4B, 0x0A,
0x31, 0x44, 0x50, 0xB4, 0x8F, 0xED, 0x1F, 0x1A, 0xDB, 0x99, 0x8D, 0x33, 0x9F, 0x11, 0x83, 0x14


MD2のハッシュ値の例



MD2のハッシュ値は128ビット(16バイト)で、通常は32桁の16進数で表現されます。

例として、以下のような入力と対応するMD2のハッシュ値を示します。


MD2("The quick brown fox jumps over the lazy dog") = 03d85a0d629d2c442e987525319fc471

MD2("The quick brown fox jumps over the lazy cog") = 6b890c9292668cdbbfda00a4ebf31f05

MD2("") = 8350e5a3e24c153df2275c9f80692773


これらの例からも分かるように、入力メッセージにわずかな変更を加えただけでも、ハッシュ値は大きく変化します。

MD2のセキュリティに関する問題点



MD2は、その脆弱性が指摘されており、現在では安全なハッシュ関数とは言えません。

1997年、MD2の圧縮関数においてコリジョン(ハッシュ値の衝突)が発見されました。
2004年には、MD2に対する原像攻撃(ハッシュ値から元のメッセージを推定する攻撃)が可能であることが示されました。
2008年には、より効率的な原像攻撃が発表され、2009年には衝突攻撃も発表されました。

これらのセキュリティ上の問題から、OpenSSL、GnuTLSNetwork Security Servicesなどの主要なセキュリティライブラリでは、MD2の使用が非推奨とされ、セキュリティアップデートで無効化されています。

まとめ



MD2は、開発当初は有効なハッシュ関数でしたが、その後の研究でセキュリティ上の弱点が明らかになり、現在では安全な利用は推奨されません。より安全なハッシュ関数への移行が推奨されます。

参考文献



RFC 1319 - MD2 Message Digest Algorithm
RFC 6149 - MD2 to Historic Status
The compression function of MD2 is not collision free (Rogier, Chauvaud, 1995)
MD2 is not Secure without the Checksum Byte (Rogier, Chauvaud, 1997)
The MD2 Hash Function is Not One-Way (Muller, 2004)
Preimage and Collision Attacks on MD2 (Knudsen, Mathiassen, 2005)

関連項目



ハッシュ関数
MD4
MD5
Secure Hash Algorithm

外部リンク



Online MD2 Calculator over HTTPS
Serversniff.net: 文字列の MD2 などのハッシュ値を計算するオンラインツール
テキスト、16進、2進、Base64などの相互変換と同時にMD2その他のハッシュ値を計算するオンラインツール 1

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。