ファイル MD5 検証ツール
ファイルのMD5ハッシュ値を計算、ファイル整合性を検証
ここにファイルをドラッグ&ドロップ
任意のファイルタイプとサイズに対応
ファイルMD5とは?
MD5(Message-Digest Algorithm 5)は広く使用されるハッシュアルゴリズムで、任意のファイル内容を128ビット(32個の16進数文字)の固定長ダイジェストにマッピングします。ファイル内容のわずかな変化でも完全に異なるMD5値になります。ファイルMD5検証ツールは、ファイル整合性の検証に頻繁に使用され、転送やダウンロード中にファイルが改ざんまたは破損していないことを確認します。
使い方
使い方
- アップロードエリアをクリックするか、ファイルをページにドラッグ
- 「MD5を計算」ボタンをクリック
- 計算の完了を待ち、MD5値を確認
- 検証セクションに既知のMD5値を入力して比較できます
検証の制限事項
- MD5はファイルの同一性チェックに便利ですが、セキュリティ上重要な検証には耐衝突性が不十分です。
- ダウンロードやリリースの際は、信頼できるソースからのハッシュを比較し、可能な場合はSHA-256を優先してください。
利用シーン
仕組み
MD5 は RFC 1321(Ron Rivest、1992)で定義される Message-Digest Algorithm 5 で、128 ビット / 16 バイトのダイジェストを出力し、32 桁の 16 進数で表示されます。アルゴリズムは Merkle-Damgård 構造に従います:入力をパディングしてビット長を 448 mod 512 にし(1 ビットの 1 の後に 0 を埋める)、元の長さを 64 ビットのリトルエンディアン整数として末尾に追加し、パディングされたメッセージを 512 ビットのブロックに分割します。各ブロックは 128 ビットの内部状態(A、B、C、D)を更新します。初期値は A = 0x67452301、B = 0xEFCDAB89、C = 0x98BADCFE、D = 0x10325476 で、F(x,y,z) = (x AND y) OR ((NOT x) AND z)、G(x,y,z) = (x AND z) OR (y AND (NOT z))、H(x,y,z) = x XOR y XOR z、I(x,y,z) = y XOR (x OR (NOT z)) のビット関数を使い、ラウンド定数 T[i] = floor(2^32 * |sin(i+1)|) と左回転を組み合わせて 4 グループ × 16 ラウンド計 64 ラウンドを実行します。最終状態をリトルエンディアンで連結したものがダイジェストです。空入力の MD5 は d41d8cd98f00b204e9800998ecf8427e で、パイプラインの動作確認に便利です。 ブラウザは crypto.subtle で MD5 を提供しません(W3C Web Crypto 仕様は衝突攻撃を理由に意図的に MD5 を除外しています)。そのため本ツールは純粋 JavaScript の MD5 実装をブラウザ内で実行します。ファイルは ArrayBuffer としてメモリにロードされ、16 バイトのダイジェストを一度に計算し、32 桁の小文字 16 進数として表示します。処理はメインスレッドで動くため、数 GB のファイルをハッシュする間はメインスレッドが占有されます。非常に大きなファイルにはディスクからストリーミングするデスクトップツールを使うほうが適しています。 MD5 は衝突耐性が破られています。王小雲と于紅波は 2004 年(CRYPTO 2005 発表)に最初の実用的衝突攻撃を公表し、衝突コストを約 2^39 回の演算まで下げました。2008 年には Sotirov らが選択前置衝突を用いて不正な中間 CA 証明書を偽造し、2012 年の Flame 国家級マルウェアは未公表の選択前置 MD5 衝突を使って Microsoft Terminal Server Licensing のコード署名証明書を偽造しました。NIST は 2011 年の SP 800-131A でデジタル署名への MD5 の使用を禁止し、CMU CERT は脆弱性通知 VU#836068 で MD5 を「これ以上の使用には不適」と評しました。MD5 は偶発的破損の検出(1 ビット変化で雪崩効果により出力 128 ビットのうち約 64 ビットが反転)や信頼できる入力での重複ファイル検出には依然として使えますが、攻撃者がいずれかの入力を制御または予測できる場面では使ってはいけません。
- MD5は128ビット/16バイトのダイジェストを生成し、32文字の小文字16進数としてエンコードされる。RFC 1321(Rivest、1992年)で規定。
- 初期状態定数:A=0x67452301、B=0xEFCDAB89、C=0x98BADCFE、D=0x10325476。4グループ×16ラウンドの計64ラウンドで、F/G/H/Iビット関数とラウンド定数T[i]=floor(2^32×|sin(i+1)|)を使用。
- 空入力のMD5はd41d8cd98f00b204e9800998ecf8427e。ハッシュパイプラインが有効なダイジェストを返すかの簡易整合性チェック。
- ブラウザは crypto.subtle で MD5 を提供しません(W3C Web Crypto が意図的に省略)。本ツールは純粋 JavaScript 実装の MD5 を用い、ファイルを ArrayBuffer として読み込み、16 バイトのダイジェストを一度に計算し、32 桁の小文字 16 進数として出力します。
- メモリの使い方:ファイル全体を 1 つの ArrayBuffer に読み込んでからハッシュするため、数 GB のファイルにはそれに見合うタブメモリが必要です。タブが扱える上限を超えるファイルではディスクからストリーミングするデスクトップツール(md5sum、certutil -hashfile、Get-FileHash)を使ってください。
- 衝突攻撃:王氏とYu氏(2004年)が約2^39演算で実証。Sotirovら(2008年)が選択プレフィックス衝突で不正なCA証明書を偽造。Flameマルウェア(2012年)が選択プレフィックス衝突でMicrosoftコード署名証明書を偽造。
- NIST SP 800-131Aは2011年にデジタル署名でのMD5使用を禁止。MD5は非敵対的な整合性チェックと重複検出のみに許容され、チェックサムが信頼性に影響する場合はSHA-256以上に切り替えること。
使用例
空ファイルの MD5 (有名な定数)
ファイル: empty.txt (0 バイト)
MD5: d41d8cd98f00b204e9800998ecf8427e
この値は空入力に対する MD5 -> ハッシュ処理パイプラインが
端から端まで動作しているかを手早く確認するのに使える。
(空文字列に対する RFC 1321 リファレンスベクトル。)ダウンロードしたインストーラーを検証
ファイル: setup.bin (3 バイト、内容: abc)
計算した MD5: 900150983cd24fb0d6963f7d28e17f72
配布元の MD5: 900150983cd24fb0d6963f7d28e17f72
一致 -> ファイルは正しくコピー・ダウンロードされている。
不一致 -> 転送中にバイトが破損しているので再ダウンロードする。
(MD5 値は 3 バイトの入力 'abc' に対する RFC 1321 のリファレンスベクトル。
実運用では入力を実際のインストーラーに置き換える。アルゴリズムの出力は決定的。)2 つのドキュメントバージョンを比較
report-v1.txt (0 バイト) -> MD5: d41d8cd98f00b204e9800998ecf8427e
report-v2.txt (3 バイト、内容: abc)
-> MD5: 900150983cd24fb0d6963f7d28e17f72
ハッシュが異なる = 内容が異なる。1 文字の変更でも MD5 は
完全に異なる値になる。これが整合性チェックの仕組み。
(両方の値は RFC 1321 の MD5 リファレンスベクトル。)hello world 文字列とファイルの比較
MD5("hello") = 5d41402abc4b2a76b9719d911017c592
MD5("hello\n") = b1946ac92492d2347c6235b4d2611184
末尾の改行があるかどうかでダイジェストが変わるため、
末尾改行なしの hello.txt は 1 行目と一致し、末尾改行ありの
ファイルは 2 行目と一致する。これは異なる OS で生成された
公開 MD5 と照合するときによくある落とし穴。よくある質問
ファイルはサーバーにアップロードされますか?
いいえ。MD5 は File API を使用してブラウザ内でローカルに計算されます。バイトはチャンクごとにメモリに読み込まれ、デバイスを離れることなくハッシュ化されます。実行中にネットワークタブで確認できます。
MD5 は今も安全に使えますか?
セキュリティ用途には不向きです。MD5 は 2004 年に破られており、衝突を素早く生成できるため、デジタル署名、パスワード保管、改ざん検知には使用してはいけません。偶発的な破損(ダウンロードミス、ディスクエラー)を検出する簡易チェックサムとしては依然として有用です。
MD5 が小文字だったり大文字だったりするのはなぜですか?
MD5 は 128 ビット = 16 バイト = 32 桁の 16 進文字を生成します。それを大文字で書くか小文字で書くかは表示上の選択にすぎず、実際のバイトは同一です。検証側では大文字小文字を区別せずに比較すべきです。
ここでハッシュ化できるファイルサイズはどのくらいですか?
最近のデスクトップブラウザはメモリ不足になる前に数 GB を処理できます。モバイルブラウザはより制約があり、数百 MB が一般的です。非常に大きなファイルにはシステムコマンド(Linux の md5sum、Windows の certutil -hashfile、macOS の md5)を使用してください。ディスクからストリーミング処理されます。
他のツールと MD5 の結果が異なるのはなぜですか?
ほとんどの場合、入力が 1 バイト単位で異なるためです。改行コードの違い(CRLF と LF)、UTF-8 の BOM、末尾の空白、ファイルバージョンの違いなどが原因です。ハッシュ自体は決定的なため、入力が同一であれば、すべての準拠した MD5 実装で同じ出力が得られます。
テキストの MD5 とファイルの MD5 の違いは何ですか?
MD5 は文字ではなくバイトをハッシュ化します。「テキストの MD5」は最初に文字列をエンコード(一般的には UTF-8)してそのバイトをハッシュ化します。「ファイルの MD5」はファイルのバイトを直接読み取ります。同じ文字列を UTF-8 で保存した場合と UTF-16 で保存した場合では、異なる MD5 値になります。
MD5 で重複ファイルを検出できますか?
はい、ただし MD5 の既知の衝突を考慮すると、悪意のある攻撃者が同じ MD5 を持つ 2 つの異なるファイルを作成できる点に注意してください。偶発的な重複検出(写真、ダウンロード)には MD5 は十分高速で信頼できます。信頼性の高い重複排除には SHA-256 を使用してください。