ソースを表示
出典: Wikipedio
MD5
のソース
移動:
ナビゲーション
,
検索
以下に示された理由によりページの編集を行うことができません:
この処理は
登録利用者
の権限を持った利用者のみが実行できます。
以下にソースを表示しています:
'''MD5'''(エムディーファイブ、'''Message Digest Algorithm 5''')とは、与えられた入力に対して128[[ビット]]のハッシュ値を出力する[[ハッシュ関数]]である。 == 概要 == [[1991年]]に開発されたMD5は、前身である[[MD4]]の安全性を向上させたものである。開発者はMD4と同じく、[[マサチューセッツ工科大学]](MIT)教授で[[RSA暗号]]の開発者でもある[[ロナルド・リベスト]] (Ronald Linn Rivest)。 [[Linux]]では md5sum、[[FreeBSD]]では md5 というコマンドが用意されており、これを用いてメッセージダイジェストを出力することが出来る。出力されるメッセージダイジェストは、 : d41d8cd98f00b204e9800998ecf8427e (入力データ長が0バイトの場合) の様に[[16進数]]の数字が並んだテキスト形式で出力され、これをフィンガプリント([[指紋]])やハッシュ値、あるいは単にMD5値と呼ぶ。「MD5[[チェックサム]]」とも良く言われる。 == 用途 == MD5は、[[電子署名]]を必要とする[[アプリケーションソフトウェア|アプリケーション]]向けに開発された。RSAで署名を生成する際に、メッセージを直接対象として署名を生成するのではなく、メッセージのハッシュ値を生成し、ハッシュ値に対して署名を生成する。 ファイルを転送する際にそのファイルが破損していないことを確認するためにも用いられる。配布する側は、ファイル配布時にそのファイルのMD5ハッシュ値(いわゆるMD5チェックサム)も同時に配布する。受信したユーザは手元でファイルのMD5値を計算して、配布者の提示したMD5値と一致することを確認すれば良い。このような目的に[[巡回冗長検査|CRC]]を用いることもあるが、CRCは標準が複数存在するため現在ではあまり見られない。 またファイルが改竄されていないことを証明するためにも用いられる。これにより、作成者以外による[[トロイの木馬 (コンピューター)|トロイの木馬]]や[[コンピュータウイルス]]などの混入を防ぐことが出来る。 しかし、この場合MD5値は手元で計算できるため、改竄済みのファイルのMD5値が同梱されている可能性がある。したがって、改竄の恐れがある場合には、ファイルに同封されているMD5値と比較するのではなく、MD5値だけは何かしら信頼できる方法で配布者から入手する必要がある。 <!-- このような場合には、共通鍵を必要とするHMACを利用することは現実的ではないのでコメントアウトします; このような事を防ぐため、MD5によるハッシュ算出時に秘密鍵をあたえる[[HMAC]]という機構を用いたHMAC-MD5という手法が提唱されている。 --> == 実際の使用例 == FreeBSDはインストール可能なCDイメージと、それのMD5値を同時に配布している。(MD5値の改変はないと仮定して)インストール可能なCDイメージが、途中で改変されていないことを確認してみる。 #配布サイトから、ここでは 5.1-RELEASE-i386-miniinst.iso という最小構成のインストールイメージファイルと、CHECKSUM.MD5 というMD5値(いわゆるMD5チェックサム)の書かれたテキストファイルをダウンロードする。 #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]]とよばれるハッシュ関数には理論的な弱点が存在することが明らかとなっている(外部リンク参照)。 2004年8月、暗号の国際会議 CRYPTO (のランプセッション)にて、MD5のコリジョンを求めることができたという報告があった。理論的可能性として、MD5を用いて改竄されないことを確認する場合、あらかじめ正規のファイルと不正なファイルを用意しておき、正規のファイルを登録しておきながら、実際には同じMD5を持つ不正なファイルに摩り替える攻撃がありえることを意味する。また2007年11月、2つの全く異なる実行ファイルを元に、各々の末尾にデータブロックを付加し、その部分を変更しながら探索を行うことにより、同一のMD5を持たせることに成功したという報告があった。この攻撃方法は実証されたことになる。 [[アメリカ合衆国政府]]では、MD5ではなく、[[SHA]](Secure Hash Algorithm)を標準のハッシュとして使用している。 日本の[[CRYPTREC]]では、MD5を政府推奨暗号リストから外し、SHA-256以上を推奨している。 2007年4月IPAは[[APOP]]の脆弱性について警告した。これは[[電気通信大学]]の太田和夫教授([[暗号理論]])の研究グループが発見したもので、MD5ハッシュから理論的に元のパスワードを求めることが出来たというものである。この対策としてMD5を用いるAPOPではなくSSLの利用を推奨している。(総当たり攻撃法によるツールは既に公表されている) ;[http://www.ipa.go.jp/security/vuln/documents/2007/JVN_19445002.html IPA:APOP におけるパスワード漏えいの脆弱性] ;[http://www.win.tue.nl/hashclash/SoftIntCodeSign/ Software Integrity Checksum and Code Signing Vulnerability] === ハッシュの衝突耐性について === MD5のハッシュ値については、パソコンレベルで、数10分程度で、同一ハッシュ値の非ユニークなデータ列を生成できる実装が広まっている。すなわち、強衝突耐性は容易に突破されうる状態にある([[SHA]]-0/SHA-1アルゴリズムについても、MD5ほど容易ではないが突破される脆弱性が発見されている)。 ただし、任意に与えられたハッシュ値に対して、(何らかの別の)データを生成する実装が広まっているわけではないので、弱衝突耐性が容易に突破されうる訳ではない。また、任意に与えられたハッシュ値に対して、改竄者の意図どおりのデータ列を容易に生成できる訳でもない(もしそうならば、それは既に暗号ではない)。 :強衝突耐性の突破とは例えば、同一のハッシュ値を持つ非ユニークな2つのデータ列D1とD2のペアを1つ発見できた、ということである。なお、この場合D1やD2が意味を持つデータであるかどうかは問われない。また、データ列D3のハッシュ値がHであったとして、この'''特定の'''ハッシュ値Hに対して、同一のハッシュ値を持つような他のデータ列D4を発見できたとしたら、それは弱衝突耐性を突破された事を意味する(即ち、D3とHの組み合わせで無[[改竄|改竄性]]を証明できなくなる)。 そのため、直ちにこれらのハッシュアルゴリズムを用いている暗号化通信が盗聴・改竄されたり、電子署名の有効性が無くなると言うわけではない。しかし、強衝突耐性が突破されたという事は、将来的には攻撃手法や計算能力の進化により、弱衝突耐性も突破されうるという事を暗示する。もし弱衝突耐性が突破されたとしたら、もはや暗号化通信や電子署名の無改竄性を証明できなくなり、その暗号化・署名システムは(半ば)死を意味する。 また、暗号化・署名システムのintegrity(例えば最良攻撃手法に対して十分に頑強であるという事)にハッシュ強衝突耐性の突破が困難であるという前提がもし有った場合には、そのシステムのintegrityも当然に失われる事になる。Integrityを要求されるシステムでは、その再検証が最低限必要となる。 == 参考文献 == * R. Rivest, "The MD5 Message-Digest Algorithm", RFC 1321, April 1992. * Hans Dobbertin, "The Status of MD5 After a Recent Attack", CryptoBytes Volume 2, Number 2, pp.1,3-6, Summer 1996. [ftp://ftp.rsa.com/pub/cryptobytes/crypto2n2.pdf] * Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu, "Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD", IACR ePrint #199, Augst 17 2004. [http://eprint.iacr.org/2004/199.pdf] == 関連項目 == * [[ハッシュ関数]] * [[MD2]] * [[MD4]] * [[SHA]] == 外部リンク == * [http://www.webutils.pl/MD5_Calculator MD2, MD4, MD5 Online Calculator] Calculate file hashes using an on-line web form. * [http://passcracking.ru Online MD5 crack] – Rainbow Tables + big hash database (md5, md5(md5), sha1, mysql) * [http://passcrack.spb.ru ''MD5 cracking by RainbowTables''] * [http://www.hash.spugesoft.com ''Simple hash calculator''] * [http://digitechlog.com/2008/11/11/a-useful-c-sharp-function-using-md5-md5cryptoserviceprovider-to-encrypt-a-password-string.html ''MD5でハッシュ化(暗号化)の関数 ''] * [http://www.vector.co.jp/soft/unix/util/se365582.html ''高速にMD5ハッシュの元の文字を見つけ出すツール ''] * [http://ice.breaker.free.fr/ Online MD5 Reverser | Hash cracker] * [http://www.microsoft.com/japan/technet/security/advisory/961509.mspx マイクロソフト セキュリティ アドバイザリ (961509): 研究機関によるMD5対する衝突攻撃(collision attack)の実現可能性にの実証に関して] * [http://www.syboos.jp/java/doc/md5-algorithm.html Java MD5実装] [[Category:ハッシュ関数]] [[ar:إم دي5]] [[bg:MD5]] [[ca:MD5]] [[cs:Message-Digest algorithm]] [[da:MD5]] [[de:Message-Digest Algorithm 5]] [[en:MD5]] [[es:MD5]] [[eu:MD5]] [[fa:امدی۵]] [[fi:MD5]] [[fr:MD5]] [[he:MD5]] [[hr:MD5]] [[hu:MD5]] [[hy:MD5]] [[id:MD5]] [[it:MD5]] [[ko:MD5]] [[lt:MD5]] [[ml:MD5]] [[ms:MD5]] [[nl:MD5]] [[no:MD5]] [[pl:MD5]] [[pt:MD5]] [[ro:MD5]] [[ru:MD5]] [[sk:Message-Digest algorithm]] [[sl:Algoritem MD5]] [[sr:MD5]] [[sv:MD5]] [[tg:MD5]] [[tr:MD5]] [[uk:MD5]] [[vi:MD5]] [[zh:MD5]]
MD5
に戻る。
表示
本文
ノート
ソースを表示
履歴
個人用ツール
ログイン
ナビゲーション
メインページ
コミュニティ・ポータル
最近の出来事
最近更新したページ
おまかせ表示
ヘルプ
検索
ツールボックス
リンク元
リンク先の更新状況
特別ページ