MD5

MD5
一般的な
デザイナーロナルド・リベスト
初版1992年4月
シリーズMD2MD4、MD5、MD6
暗号の詳細
ダイジェストサイズ128ビット
ブロックサイズ512ビット
構造メルクル・ダムガルド建設
ラウンド4 [ 1 ]
最高の公開暗号解読
2013年に謝涛、劉凡宝、馮登果による攻撃は、MD5の衝突耐性を2の18乗倍で破りました。この攻撃は、通常のコンピュータでは1秒未満で実行されます。[ 2 ] MD5は長さ拡張攻撃 を受けやすいです。

MD5メッセージダイジェストアルゴリズムは、 128ビットのハッシュ値を生成する広く使用されているハッシュ関数です。MD5は、以前のハッシュ関数MD4を置き換えるために1991年にロナルド・リベストによって設計され、[ 3 ] 1992年にRFC 1321として仕様化されました。

MD5は、意図しない破損に対するデータの整合性を検証するためのチェックサムとして使用できます。歴史的には暗号ハッシュ関数として広く使用されていましたが、広範な脆弱性があることが判明しています。暗号化以外の用途、例えばパーティションデータベース内の特定のキーのパーティションを決定する用途にも適しており、最近のセキュアハッシュアルゴリズムよりも計算量が少ないため、MD5が好まれる場合があります。[ 4 ]

歴史と暗号解読

MD5は、 MITロナルド・リベスト教授によって設計された一連のメッセージダイジェストアルゴリズムの一つです(Rivest, 1992)。MD5の前身であるMD4が安全でない可能性が高いことが分析によって示されたため、リベスト教授は1991年に安全な代替としてMD5を設計しました。(その後、ハンス・ドッベルティン教授がMD4の脆弱性を発見しました。)

1993 年、Den Boer と Bosselaers は、MD5圧縮関数の「疑似衝突」 、つまり同一のダイジェストを生成する 2 つの異なる初期化ベクトルを発見するという、限定的ではあるものの初期結果を発表しました。

1996年、DobbertinはMD5の圧縮関数の衝突を発表しました(Dobbertin, 1996)。これはMD5ハッシュ関数全体に対する攻撃ではありませんでしたが、暗号学者がSHA-1(その後も侵害を受けています)やRIPEMD-160などの代替関数への移行を推奨するほど、かなり深刻なものでした。

ハッシュ値のサイズ(128 ビット)は、誕生日攻撃が想定されるほど小さい。MD5CRK、誕生日攻撃を使用して衝突を検出することにより、MD5 が実質的に安全ではないことを実証するために 2004 年 3 月に開始された 分散プロジェクトである。

MD5CRKは、2004年8月17日、 Xiaoyun Wang、Dengguo Feng、Xuejia Lai、Hongbo Yuによって完全なMD5の衝突が発表された直後に終了しました。 [ 5 ] [ 6 ]彼らの解析攻撃は、 IBM p690クラスターでわずか1時間しかかからなかったと報告されています。[ 7 ]

2005年3月1日、アルジェン・レンストラシャオユン・ワン、ベネ・デ・ウェガーは、異なる公開鍵と同じMD5ハッシュ値を持つ2つのX.509証明書の構築を実証しました。これは、実際に衝突が発生する可能性を実証しました。 [ 8 ]この構築には、両方の公開鍵の秘密鍵が含まれていました。数日後、ヴラスティミル・クリマは、1台のノートパソコンで数時間でMD5の衝突を構築できる改良アルゴリズムを発表しました。[ 9 ] 2006年3月18日、クリマはトンネリングと呼ばれる手法を用いて、1台のノートパソコンで1分以内に衝突を検出できるアルゴリズムを発表しました。[ 10 ]

MD5関連のRFC正誤表は数多く公開されている。2009年には、米国サイバーコマンドが、そのミッションステートメントのMD5ハッシュ値を公式エンブレムの一部として使用した。[ 11 ]

2010年12月24日、タオ・シェ氏とデングオ・フェン氏は、MD5の単一ブロック(512ビット)衝突を初めて公開したと発表した[ 12 ] 。 (これまでの衝突発見は、複数ブロック攻撃に依存していた。)シェ氏とフェン氏は「セキュリティ上の理由」から、この新しい攻撃手法を公表しなかった。彼らは暗号コミュニティに挑戦状を叩きつけ、2013年1月1日までに異なる64バイト衝突を最初に発見した者に1万ドルの報奨金を出すことを発表した。マーク・スティーブンス氏はこの挑戦に応え、衝突する単一ブロックメッセージと、その構築アルゴリズムと情報源を公開した[ 13 ] 。

2011年にMD5 [ 15 ]とHMAC-MD5のセキュリティに関する考慮事項を更新するための情報RFC 6151 [ 14 ]が承認されました。 [ 16 ]

安全

暗号ハッシュ関数の基本要件の一つは、ハッシュ値が同じ2つの異なるメッセージを見つけることが計算的に不可能であることです。MD5はこの要件を壊滅的に満たしていません。2008年12月31日、 CMUソフトウェア工学研究所は、MD5は本質的に「暗号的に破られており、今後の使用には適さない」と結論付けました。[ 17 ] MD5の脆弱性は現場で悪用されており、最も悪名高いのは2012年のFlameマルウェアです。2019年現在、MD5は、その脆弱性が十分に文書化され、セキュリティ専門家によって非推奨とされているにもかかわらず、広く使用され続けています。[ 18 ]

2.6GHzのPentium 4プロセッサを搭載したコンピュータで数秒以内に衝突を発見できる衝突攻撃が存在する(複雑度は2の24.1倍)。[ 19 ]さらに、市販の計算ハードウェアを使用して、指定されたプレフィックスを持つ2つの入力に対して数秒以内に衝突を発生させることができる選択プレフィックス衝突攻撃も存在する(複雑度は2の39倍)。[ 20 ] 衝突を発見する能力は、市販のGPUの使用によって大幅に向上した。NVIDIA GeForce 8400GSグラフィックプロセッサでは、1秒あたり1600万~1800万のハッシュを計算できる。NVIDIA GeForce 8800 Ultraは、1秒あたり2億以上のハッシュを計算できる。[ 21 ]

これらのハッシュ攻撃と衝突攻撃は、文書ファイル[ 22 ] [ 23 ]デジタル証明書[ 24 ]の衝突など、様々な状況で公開されています。2015年時点で、MD5は依然としてかなり広く使用されており、特にセキュリティ研究やウイルス対策企業によって広く使用されていることが実証されています。[ 25 ]

2019年時点では、広く使用されているコンテンツ管理システムの4分の1が、依然としてパスワードハッシュにMD5を使用していると報告されています。[ 18 ]

セキュリティ問題の概要

1996年、MD5の設計に欠陥が見つかりました。当時は致命的な弱点とはみなされていませんでしたが、暗号学者たちはSHA-1など他のアルゴリズムの使用を推奨し始めましたが、SHA-1もその後脆弱であることがわかりました。[ 26 ] 2004年には、MD5は衝突耐性が ないことが示されました。[ 27 ]そのため、MD5は、デジタルセキュリティのためにこの特性に依存するSSL証明書デジタル署名などのアプリケーションには適していません。研究者たちはさらに、MD5のより深刻な欠陥を発見し、実行可能な衝突攻撃、つまりMD5が同一のチェックサムを生成する一対の入力を作成する方法を説明しました。[ 5 ] [ 28 ] 2005年、2006年、2007年には、MD5を破るさらなる進歩がありました。[ 29 ] 2008年12月、研究者グループがこの手法を使用してSSL証明書の有効性を偽装しました。[ 24 ] [ 30 ]

2010年時点で、CMUソフトウェア工学研究所はMD5を「暗号的に破られており、今後の使用には不適切」とみなしており[ 17 ]、現在、ほとんどの米国政府のアプリケーションではSHA-2ファミリーのハッシュ関数が必須となっている[ 31 ] 。 2012年には、FlameマルウェアがMD5の脆弱性を悪用してMicrosoftのデジタル署名を偽造した[ 32 ]

衝突の脆弱性

1996年にMD5の圧縮関数に衝突が発見され、ハンス・ドッベルティンはRSA研究所の技術ニュースレターで「提示された攻撃はまだMD5の実用化を脅かすものではないが、かなり近いところにある…将来的には衝突耐性のあるハッシュ関数が必要な場所ではMD5は実装されるべきではない」と書いている。[ 33 ]

2005年、研究者たちはPostScript文書[ 34 ]X.509証明書[ 35 ]のペアを同じハッシュ値で作成することに成功しました。同年後半、MD5の設計者であるロン・リベストは、「MD5とSHA1はどちらも(衝突耐性の観点から)明らかに破綻している」と記しました。[ 36 ]

2008年12月30日、研究者グループが第25回カオスコミュニケーション会議で、MD5衝突を利用して、MD5ハッシュでチェックすると正当に見える中間証明機関証明書を作成する方法を発表しました。[ 24 ]研究者はスイスのローザンヌにあるEPFLPS3クラスターを使用して[ 37 ]、 RapidSSLが発行した通常のSSL証明書をその発行者の機能するCA証明書に変換し、それを使用してRapidSSLが発行した正当に見える別の証明書を作成しました。RapidSSL証明書の発行元であるVerisignは、脆弱性が発表されて以来、RapidSSLのチェックサムアルゴリズムとしてMD5を使用した新しい証明書の発行を停止したと述べています。[ 38 ]ベリサインはMD5で署名された既存の証明書の失効を拒否しましたが、その対応は脆弱性の作者(アレクサンダー・ソティロフマーク・スティーブンスジェイコブ・アッペルバウムアルジェン・レンストラ、デビッド・モルナー、ダグ・アーネ・オスヴィク、ベネ・デ・ウェーガー)によって適切であるとみなされました。[ 24 ]ブルース・シュナイアーはこの攻撃について、「MD5が壊れたハッシュ関数であることは既に分かっていた」と述べ、「誰もMD5を使うべきではない」としました。[ 39 ] SSL研究者は、「私たちが望むのは、認証局が新しい証明書を発行する際にMD5の使用をやめることです。また、他のアプリケーションにおけるMD5の使用についても再考されることを願っています」と書いています。[ 24 ]

マイクロソフトによると、2012年にFlameマルウェアの作成者はMD5衝突を利用してWindowsのコード署名証明書を偽造した。[ 32 ]

MD5 はMerkle–Damgård 構造を使用するため、同じハッシュを持つ 2 つのプレフィックスを構成できる場合、共通のサフィックスを両方に追加して、それを使用するアプリケーションで衝突が有効なデータとして受け入れられる可能性を高めることができます。 さらに、現在の衝突検出手法では任意のプレフィックスを指定できるため、攻撃者は同じコンテンツで始まる 2 つの衝突ファイルを作成できます。 攻撃者が 2 つの衝突ファイルを生成するために必要なのは、64 バイト境界に揃えられた 128 バイトのデータ ブロックを持つテンプレート ファイルだけです。このテンプレート ファイルは衝突検出アルゴリズムによって自由に変更できます。2 つのメッセージが 6 バイト異なる MD5 衝突の例を次に示します。

d131dd02c5e6eec4 693d9a0698aff95c 2fcab5 8 712467eab 4004583eb8fb7f89 55ad340609f4b302 83e4888325 7 1415a 085125e8f7cdc99f d91dbd f 280373c5b d8823e3156348f5b ae6dacd436c919c6 dd53e2 b 487da03fd 02396306d248cda0 e99f33420f577ee8 ce54b67080 a 80d1e c69821bcb6a88393 96f965 2 b6ff72a70 
d131dd02c5e6eec4 693d9a0698aff95c 2fcab5 0 712467eab 4004583eb8fb7f89 55ad340609f4b302 83e4888325 f 1415a 085125e8f7cdc99f d91dbd 7 280373c5b d8823e3156348f5b ae6dacd436c919c6 dd53e2 3 487da03fd 02396306d248cda0 e99f33420f577ee8 ce54b67080 2 80d1e c69821bcb6a88393 96f965 a b6ff72a70 

どちらもMD5ハッシュを生成します79054025255fb1a26e4bc422aef54eb4[ 40 ] 2つのサンプルの違いは、各ニブルの先頭ビットが反転されている点です。例えば、上のサンプルの20番目のバイト(オフセット0x13)である0x87は、2進数では10000111です。バイトの先頭ビット(最初のニブルの先頭ビットでもある)が反転されて00000111となり、下のサンプルに示すように0x07になります。

その後、別々に選択されたプレフィックスを持つ2つのファイル間で衝突を構築することも可能であることが判明しました。この手法は、2008年に不正なCA証明書の作成に使用されました。 2014年には、Anton KuznetsovによってMPIを用いた並列衝突探索の新しい変種が提案され、計算クラスター上で11時間で衝突を発見できるようになりました。[ 41 ]

原像脆弱性

2009年4月、MD5の原像暗号耐性を破る攻撃が公開されました。この攻撃は理論上のものであり、完全な原像暗号を解くには計算量が2の123.4乗に上ります。[ 42 ] [ 43 ]

アプリケーション

MD5ダイジェストは、転送されたファイルが完全な状態で届いたことを保証するために、ソフトウェアの世界で広く利用されている。例えば、ファイルサーバーは、ユーザーがダウンロードしたファイルのチェックサムと比較できるように、事前に計算されたMD5( md5sumと呼ばれる)チェックサムをファイルに対して提供することが多い。ほとんどのUnixベースのオペレーティングシステムでは、配布パッケージにMD5サムユーティリティが含まれている。Windowsユーザーは、同梱のPowerShell関数「Get-FileHash」、同梱のコマンドライン関数「certutil -hashfile <filename> md5」を使用するか、[ 44 ] [ 45 ] Microsoftユーティリティをインストールするか、[ 46 ] [ 47 ]サードパーティ製アプリケーションを使用する。Android ROMもこのタイプのチェックサムを使用している。

ファイル転送におけるMD5ハッシュの使用を示す図
ファイル転送におけるMD5ハッシュの使用を示す図

MD5衝突は発生しやすいため、ファイルを作成した人が同じチェックサムを持つ別のファイルを作成する可能性があり、この技術では一部の悪意のある改ざんから保護することはできません。場合によっては、チェックサムが信頼できないこともあります(例えば、ダウンロードしたファイルと同じチャネルで取得された場合など)。その場合、MD5はエラーチェック機能のみを提供します。つまり、破損または不完全なダウンロードを認識しますが、これは大きなファイルをダウンロードする場合に起こりやすくなります。

歴史的に、MD5はパスワードの一方向ハッシュを保存するために使用されてきました。多くの場合、キーストレッチングが使用されています。 [ 48 ] [ 49 ] NISTは、パスワード保存用の推奨ハッシュのリストにMD5を含めていません。[ 50 ]

MD5は電子情報開示の分野でも利用されており、法的証拠開示手続きで交換される各文書に一意の識別子を提供します。この方式は、紙文書の交換において数十年にわたり使用されてきたベイツスタンプ番号方式の代替として使用できます。ただし、前述の通り、衝突攻撃が発生しやすいため、この方式の使用は推奨されません。

アルゴリズム

図1. MD5の1つの演算。MD5は、16の演算を4ラウンドに分けた64の演算から構成されています。F非線形関数であり、各ラウンドで1つの関数が使用されます。M i はメッセージ入力の32ビットブロックを示し、K i は演算ごとに異なる32ビット定数を示します。<<< s はs桁左ビット回転を示し、sは演算ごとに異なります。は2 32を法とする加算を示します。{\displaystyle \boxplus}

MD5は可変長メッセージを128ビットの固定長出力に変換します。入力メッセージは512ビットのブロック(32ビットワード16個)に分割され、メッセージの長さが512で割り切れるようにパディングされます。パディングは次のように機能します。まず、メッセージの末尾に1ビット(1)が追加されます。その後、メッセージの長さが512の倍数より64ビット短くなるまで、必要な数のゼロが続きます。残りのビットは、元のメッセージの長さを表す64ビット(2 64を法とする)で埋められます。

メインのMD5アルゴリズムは、128ビットの状態を操作します。この状態は、ABCDと表記される4つの32ビットワードに分割されます。これらのワードは、特定の固定定数に初期化されます。その後、メインアルゴリズムは、512ビットのメッセージブロックを順番に使用して状態を変更します。メッセージブロックの処理は、ラウンドと呼ばれる4つの類似した段階で構成されています。各ラウンドは、非線形関数F、モジュラー加算、および左回転に基づく16の類似した演算で構成されています。図1は、ラウンド内の1つの演算を示しています。4つの可能な関数があり、各ラウンドで異なる関数が使用されます。

FBCDBC¬BDGBCDBDC¬DHBCDBCDBCDCB¬D{\displaystyle {\begin{aligned}F(B,C,D)&=(B\wedge {C})\vee (\neg {B}\wedge {D})\\G(B,C,D)&=(B\wedge {D})\vee (C\wedge \neg {D})\\H(B,C,D)&=B\oplus C\oplus D\\I(B,C,D)&=C\oplus (B\vee \neg {D})\end{aligned}}}

¬{\displaystyle \oplus 、\wedge 、\vee 、\neg }それぞれ XORANDORNOT演算を表します。

擬似コード

MD5ハッシュはこのアルゴリズムに従って計算されます。[ 51 ]すべての値はリトルエンディアンです。

// : すべての変数は符号なし32ビットで、計算時に2^32を法としてラップされます。var int s [64], K[64] var int i // sはラウンドごとのシフト量を指定します s[ 0..15] := { 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22 } s[16..31] := { 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20 } s[32..47] := { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23 } s[48..63] := { 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 } //整数の正弦の2進整数部分(ラジアン)を定数として使用します。 for i from 0 to 63 do K[i] := floor(2 32 × abs(sin(i + 1))) end for // (または、次の計算済みテーブルを使用します): K[ 0.. 3] := { 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee } K[ 4.. 7] := { 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501 } K[8..11] := {0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be} K[12..15] := { 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821 } K[16..19] := { 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa } K[20..23] := { 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8 } K[24..27] := { 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed } K[28..31] := { 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a } K[32..35] := { 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c } K[36..39] := { 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70 } K[40..43] := { 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05 } K[44..47] := { 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665 } K[48..51] := { 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039 } K[52..55] := { 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1 } K[56..59] := { 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1 } K[60..63] := { 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 } //変数を初期化します: var int a0 := 0x67452301 // A var int b0 := 0xefcdab89 // B var int c0 := 0x98badcfe // C var int d0 := 0x10325476 // D//前処理: 1ビットを1つ追加するメッセージに「1」ビットを追加します<  // 注意: 入力バイトはビット文字列として扱われます。 // 最初のビットはバイトの最上位ビットです。[ 52 ]//前処理: ゼロで埋め、 メッセージ長がビット単位で ≡ 448 (mod 512) になるまで「0」ビットを追加します// 注意: 上記の 2 つのパディング手順はより単純な方法で実装されています // 完全なバイトでのみ動作する実装の場合: 0x80 を追加 // メッセージの長さ(バイト)が ≡ 56(mod 64)になるように、0x00 バイトで埋め込みます。元の長さをビット単位で264で割っ ものをメッセージ追加する//メッセージを連続する512ビットのチャンクで処理します。 パディングされたメッセージ512ビットのチャンクごとに チャンクを16個の32ビットワードM[j]に分割する(0 ≤ j ≤ 15)  //このチャンクのハッシュ値を初期化します: var int A := a0 var int B := b0 var int C := c0 var int D := d0  //メインループ: iが0から63までの場合、 var int F, g を実行し、 0 ≤ i ≤ 15の場合 F := (B and C)または(( not B) and D)を実行します g := i そうでなければ、 16 ≤ i ≤ 31の場合、 F := (DかつB)または(( D以外)かつC) g := (5×i + 1) mod 16 そうでなければ32 ≤ i ≤ 47なら F := B xor C xor D g := (3×i + 5) mod 16 そうでなければ48 ≤ i ≤ 63ならば F := C xor (Bまたは( Dでない)) g := (7×i) mod 16  //以下のa,b,c,dの定義に注意してください F := F + A + K[i] + M[g] // M[g]は32ビットブロックである必要があります A := D D := C C := B B := B + leftrotate (F, s[i]) end for  //このチャンクのハッシュをこれまでの結果に追加します。 a0 := a0 + A b0 := b0 + B c0 := c0 + C d0 := d0 + D 終わりのためにvar char digest[16] := a0 append b0 append c0 append d0 // (出力はリトルエンディアンです)

RFC 1321 で示した元の定式化の代わりに、効率性を向上させるために次の式を使用できます (アセンブリ言語を使用している場合に便利です。そうでない場合、コンパイラは通常上記のコードを最適化します。これらの定式化では各計算が他の計算に依存しているため、NAND/AND を並列化できる上記の方法よりも遅くなることがよくあります)。

( 0 ≤ i ≤ 15 ): F := D xor (B(C xor D)) (16 ≤ i ≤ 31): F := C xor (D and (B xor C)) 

MD5ハッシュ

128ビット(16バイト)のMD5ハッシュ(メッセージダイジェストとも呼ばれます)は、通常、32桁の16数で表されます。以下は、43バイトのASCII入力とそれに対応するMD5ハッシュを示しています。

MD5("素早い茶色のキツネは怠け者の犬を飛び越える") = 9e107d9d372bb6826bd81d3542a419d6 

たとえメッセージに小さな変更があっても、雪崩効果により(圧倒的な確率で)ハッシュはほぼ変化します。例えば、文末にピリオドを追加すると、次のようになります。

MD5("素早い茶色のキツネは怠け者の犬を飛び越えます ") = e4d909c290d0fb1ca068ffaddf22cbd0 

長さゼロの文字列のハッシュは次のとおりです。

MD5("") = d41d8cd98f00b204e9800998ecf8427e 

MD5アルゴリズムは、任意のビット数で構成されるメッセージに対応しており、8ビットの倍数(オクテットバイト)に限定されません。md5sumなどの一部のMD5実装で、オクテットに制限されていたり、長さが初期値として未確定のメッセージの ストリーミングをサポートしていない場合があります。

実装

以下は MD5 をサポートする暗号化ライブラリのリストです。

参照

参考文献

  1. ^ Rivest, R. (1992年4月). 「ステップ4. 16ワードブロックでメッセージを処理する」 . MD5メッセージダイジェストアルゴリズム. IETF . p. 5. sec. 3.4. doi : 10.17487/RFC1321 . RFC 1321. 2018年10月10日閲覧.
  2. ^ Xie Tao; Fanbao Liu; Dengguo Feng (2013). 「MD5に対する高速衝突攻撃」(PDF) . Cryptology ePrint Archive . 2021年2月2日時点のオリジナルよりアーカイブ(PDF) . 2013年12月3日閲覧
  3. ^ Ciampa , Mark (2009). CompTIA Security+ 2008 詳細. オーストラリア; 米国: Course Technology/Cengage Learning. p.  290. ISBN 978-1-59863-913-1
  4. ^ Kleppmann, Martin (2017年4月2日). 『データ集約型アプリケーションの設計:信頼性、拡張性、保守性に優れたシステムを支えるビッグアイデア』(第1版). O'Reilly Media. p. 203. ISBN 978-1449373320
  5. ^ a b J. Black、M. Cochran、T. Highland: MD5攻撃の研究:洞察と改善点、 2015年1月1日アーカイブWayback Machine、2006年3月3日。2008年7月27日閲覧。
  6. ^ Hawkes, Philip; Paddon, Michael; Rose, Gregory G. (2004年10月13日). 「Musings on the Wang et al. MD5 Collision」 . Cryptology ePrint Archive . 2018年11月5日時点のオリジナルよりアーカイブ。 2018年10月10日閲覧
  7. ^ Bishop Fox (2013年9月26日). 「高速MD5およびMD4衝突ジェネレーター」 . BishopFox . 2017年4月26日時点のオリジナルよりアーカイブ2014年2月10日閲覧。
  8. ^ Lenstra, Arjen ; Wang, Xiaoyun ; Weger, Benne de (2005年3月1日). 「Colliding X.509 Certificates」 . Cryptology ePrint Archive . 2017年5月23日時点のオリジナルよりアーカイブ。 2018年10月10日閲覧
  9. ^ Klíma, Vlastimil (2005年3月5日). 「MD5の衝突を見つける - ノートブックのためのおもちゃ」 . Cryptology ePrint Archive . 2017年5月17日時点のオリジナルよりアーカイブ。 2018年10月10日閲覧
  10. ^ Vlastimil Klima: Tunnels in Hash Functions: MD5 Collisions Within a Minute Archived 6 August 2011 at the Wayback Machine、Cryptology ePrint Archive Report 2006/105、2006年3月18日、2006年4月17日改訂。2008年7月27日閲覧。
  11. ^ 「コード解読!サイバーコマンドのロゴの謎が解明」 USCYBERCOM Wired News、2010年7月8日。2014年2月17日時点のオリジナルよりアーカイブ。 2011年7月29日閲覧
  12. ^ Tao Xie; Dengguo Feng (2010). 「単一のメッセージブロックを使用してMD5衝突を構築する」(PDF) . 2017年5月14日時点のオリジナルよりアーカイブ。 2011年7月28日閲覧
  13. ^ 「Marc Stevens – Research – Single-block collision attack on MD5」 Marc-stevens.nl. 2012年。2017年5月15日時点のオリジナルよりアーカイブ2014年4月10日閲覧。
  14. ^ Turner, Sean (2011年3月). 「RFC 6151 – MD5メッセージダイジェストおよびHMAC-MD5アルゴリズムに関するセキュリティに関する考慮事項の更新」 .インターネット技術タスクフォース. doi : 10.17487/RFC6151 . 2017年6月15日時点のオリジナルよりアーカイブ。 2013年11月11日閲覧
  15. ^ Rivest, Ronald L. (1992年4月). 「RFC 1321 – The MD5 Message-Digest Algorithm」 . Internet Engineering Task Force . doi : 10.17487/RFC1321 . hdl : 1721.1/149165 . 2021年4月9日時点のオリジナルよりアーカイブ。 2013年10月5日閲覧
  16. ^ Krawczyk, Hugo; Bellare, Mihir; Canetti, Ran (1997年2月). 「RFC 2104 – HMAC: Keyed-Hashing for Message Authentication」 . Internet Engineering Task Force . doi : 10.17487/RFC2104 . 2021年4月15日時点のオリジナルよりアーカイブ。 2013年10月5日閲覧
  17. ^ a b Dougherty, Chad R. (2008年12月31日). 「脆弱性ノート VU#836068 MD5 衝突攻撃に対する脆弱性」 .脆弱性ノートデータベース. CERT カーネギーメロン大学ソフトウェアエンジニアリング研究所. 2011年7月26日時点のオリジナルよりアーカイブ。 2017年2月3日閲覧
  18. ^ a b Cimpanu, Catalin. 「主要CMSの4分の1が、デフォルトのパスワードハッシュスキームとして時代遅れのMD5を使用している」 ZDNet . 2021年1月24日時点のオリジナルよりアーカイブ。 2019年6月17日閲覧
  19. ^ MMJ Stevens (2007年6月). On Collisions for MD5 (PDF) (修士論文). 2017年5月17日時点のオリジナルよりアーカイブ(PDF) 。 2010年3月31日閲覧
  20. ^マーク・スティーブンス;アリジェン・レンストラ。ベン・デ・ウェガー (2009 年 6 月 16 日)。「MD5 とアプリケーションの選択プレフィックスの衝突」(PDF)エコール・ポリテクニック連邦ローザンヌ校2011 年 11 月 9 日のオリジナル(PDF)からアーカイブ2010 年3 月 31 日に取得
  21. ^ 「新型GPU MD5クラッカー、1秒あたり2億以上のハッシュを解読」2011年5月11日時点のオリジナルよりアーカイブ2011年3月25日閲覧。
  22. ^ Magnus Daum、Stefan Lucks . 「ハッシュ衝突(毒メッセージ攻撃)」 . Eurocrypt 2005 rump session . 2010年3月27日時点のオリジナルよりアーカイブ
  23. ^ Max Gebhardt、Georg Illies、Werner Schindler (2005年10月31日). 「特殊なファイル形式における単一ハッシュ衝突の実用的価値に関する注記」(PDF) .米国国立標準技術研究所. 2008年9月17日時点のオリジナル(PDF)からアーカイブ
  24. ^ a b c d eソティロフ、アレクサンダー;マーク・スティーブンス;ジェイコブ・アッペルバウム;アリジェン・レンストラ。デビッド・モルナー;ダグ・アルネ・オスヴィク;ベン・デ・ウェガー (2008 年 12 月 30 日)。「今日、MD5 は有害であると考えられています。 」 2017 年 3 月 25 日のオリジナルからアーカイブ2008 年12 月 30 日に取得 2018年11月16日、第25回カオスコミュニケーション会議で発表。Wayback Machineでアーカイブ
  25. ^ 「Poisonous MD5 – Wolves Among the Sheep | Silent Signal Techblog」 2015年6月10日。2015年6月10日時点のオリジナルよりアーカイブ。 2015年6月10日閲覧
  26. ^ Hans Dobbertin (1996年夏). 「最近の攻撃後のMD5の現状」 . CryptoBytes . 2013年10月22日閲覧
  27. ^ Xiaoyun Wang; Hongbo Yu (2005). 「MD5とその他のハッシュ関数の解読方法」(PDF) . Advances in Cryptology – Lecture Notes in Computer Science . pp.  19– 35. 2009年5月21日時点のオリジナル(PDF)からアーカイブ。 2009年12月21日閲覧
  28. ^ Xiaoyun Wang, Dengguo ,k.,m.,m, HAVAL-128 およびRIPEMD、Cryptology ePrint Archive Report 2004/199、2004年8月16日、2004年8月17日改訂。2008年7月27日閲覧。
  29. ^ Marc Stevens、Arjen Lenstra、Benne de Weger: MD5 の選択プレフィックス衝突に対するソフトウェア整合性およびコード署名アプリケーションの脆弱性Archived 13 December 2007 at the Wayback Machine、2007 年 11 月 30 日。2008 年 7 月 27 日に取得。
  30. ^ Stray, Jonathan (2008年12月30日). 「Webブラウザの欠陥により、電子商取引のセキュリティが危険にさらされる可能性」 . CNET.com . 2013年8月28日時点のオリジナルよりアーカイブ。 2009年2月24日閲覧
  31. ^ 「NIST.gov — コンピュータセキュリティ部門 — コンピュータセキュリティリソースセンター」 . Csrc.nist.gov. 2011年6月9日時点のオリジナルよりアーカイブ。 2010年8月9日閲覧
  32. ^ a b「Flameマルウェア衝突攻撃の説明」 。 2012年6月8日時点のオリジナルよりアーカイブ2012年6月7日閲覧。
  33. ^ Dobbertin, Hans (1996年夏). 「最近の攻撃後のMD5の現状」(PDF) . RSA Laboratories CryptoBytes ( FTP ). p. 1 . 2010年8月10日閲覧.提示された攻撃は、MD5の実用化を脅かすほどではないものの、かなり近い状況にある。…[原文ママ] 将来、衝突耐性ハッシュ関数が必要な状況では、MD5は実装されるべきではない。 …[原文ママ](ドキュメントを表示するには、ヘルプ:FTPを参照してください)
  34. ^ 「Schneier on Security: More MD5 Collisions」 Schneier.com。2021年4月11日時点のオリジナルよりアーカイブ2010年8月9日閲覧。
  35. ^ 「X.509証明書の衝突」 Win.tue.nl. 2017年5月15日時点のオリジナルよりアーカイブ2010年8月9日閲覧。
  36. ^ 「[Python-Dev] hashlib — 高速なmd5/sha、sha256/512のサポートを追加」 Mail.python.org、2005年12月16日。2021年5月6日時点のオリジナルよりアーカイブ。 2010年8月9日閲覧
  37. ^ 「研究者がPlayStation Clusterを利用してWeb Skeleton Keyを偽造」 Wired 2008年12月31日。2009年4月21日時点のオリジナルよりアーカイブ。 2008年12月31日閲覧
  38. ^ Callan, Tim (2008年12月31日). 「今朝のMD5攻撃 — 解決済み」 . Verisign. 2009年1月16日時点のオリジナルよりアーカイブ2008年12月31日閲覧。
  39. ^ Bruce Schneier (2008年12月31日). 「SSL証明書の偽造」 . Schneier on Security. 2020年11月9日時点のオリジナルよりアーカイブ2014年4月10日閲覧。
  40. ^ Eric Rescorla (2004年8月17日). 「本当のMD5衝突」 . Educated Guesswork (ブログ) . 2014年8月15日時点のオリジナルよりアーカイブ。 2015年4月13日閲覧
  41. ^ Anton A. Kuznetsov. 「高性能コンピューティングクラスターを用いたMD5単一ブロック衝突攻撃アルゴリズム」(PDF) IACR. 2016年6月4日時点のオリジナルよりアーカイブ(PDF) 。 2014年11月3日閲覧
  42. ^佐々木優、青木一麿 (2009年4月16日). 「全数探索よりも高速なフルMD5における原画像探索」.暗号学の進歩 - EUROCRYPT 2009.コンピュータサイエンス講義ノート. 第5479巻. Springer Berlin Heidelberg . pp.  134– 152. doi : 10.1007/978-3-642-01001-9_8 . ISBN 978-3-642-01000-2
  43. ^ Ming Mao、Shaohui Chen、Jin Xu (2009). 「MD5の原像攻撃のための初期構造の構築」. 2009 International Conference on Computational Intelligence and Security . 第1巻. IEEE Computer Society. pp.  442– 445. doi : 10.1109/CIS.2009.214 . ISBN 978-0-7695-3931-7. S2CID  16512325 .
  44. ^ 「Windows 10でチェックサム値を見つける」。Microsoftコミュニティ。2024年1月11日時点のオリジナルよりアーカイブ。 2023年11月23日閲覧
  45. ^ "certutil" . certutil . ​​Microsoft Learn. 2023年11月23日時点のオリジナルよりアーカイブ。 2023年11月23日閲覧
  46. ^ 「ファイルチェックサム整合性検証ユーティリティの可用性と説明」。Microsoftサポート。2013年6月17日。2015年2月15日時点のオリジナルよりアーカイブ2014年4月10日閲覧。
  47. ^ 「ファイルのMD5またはSHA-1暗号ハッシュ値を計算する方法」。Microsoftサポート。2007年1月23日。2015年3月9日時点のオリジナルよりアーカイブ2014年4月10日閲覧。
  48. ^ 「FreeBSDハンドブック、セキュリティ - DES、Blowfish、MD5、Crypt」2017年2月18日時点のオリジナルよりアーカイブ。 2014年10月19日閲覧
  49. ^ 「概要 – manページ セクション4: ファイル形式」 . Docs.oracle.com. 2013年1月1日. 2016年3月4日時点のオリジナルよりアーカイブ。 2014年4月10日閲覧
  50. ^ NIST SP 800-132 2016年12月1日アーカイブWayback Machineセクション5.1
  51. ^ “参照元” . 2021年6月21日時点のオリジナルよりアーカイブ2020年12月23日閲覧。
  52. ^ RFC 1321、セクション2、「用語と表記法」、2ページ。

さらに読む

  • バーソン、トーマス・A. (1992). 「差分暗号解読法 Mod 2 32と MD5 への応用」EUROCRYPT . pp.  71– 80. ISBN 3-540-56413-6
  • ベルト・デン・ボーア。アントゥーン・ボセラーズ (1993)。 「MD5の圧縮機能の衝突」。暗号学の進歩 – EUROCRYPT '93。ユーロクリプト。ベルリン;ロンドン:スプリンガー。ページ 293–304。ISBN 978-3-540-57600-6
  • Hans Dobbertin、「MD5圧縮の暗号解析」。インターネットでの発表、1996年5月。「CiteSeerX」。Citeseer.ist.psu.edu。2008年6月24日時点のオリジナルよりアーカイブ。 2010年8月9日閲覧
  • ドッベルティン、ハンス(1996)「最近の攻撃後のMD5の現状」 CryptoBytes 2 ( 2 )。
  • シャオユン・ワン、ホンボー・ユー (2005). 「MD5およびその他のハッシュ関数の破り方」(PDF) . EUROCRYPT . ISBN 3-540-25910-4. 2009年5月21日時点のオリジナル(PDF)からアーカイブ。2008年3月6日閲覧。