MD5 えむでぃーふぁいぶ
ハッシュ関数チェックサムダイジェスト衝突攻撃SHA-256整合性検証
MD5について教えて
簡単に言うとこんな感じ!
MD5はファイルや文字列を「32文字の指紋」に変換する技術だよ!ダウンロードしたファイルが壊れてないか確認するのに使われてたんだ。でも今は「偽造できる」ってことがバレてるので、セキュリティ用途には使っちゃダメってこと!
MD5とは
MD5(Message Digest Algorithm 5) とは、任意の長さのデータを入力すると、必ず 128ビット(32桁の16進数) の固定長の値(ハッシュ値・ダイジェスト)を出力するハッシュ関数のひとつです。1991年にロナルド・リベスト(RSA暗号の「R」)によって設計されました。「どんな長い文書でも32文字の指紋に圧縮できる」というイメージで、ファイルの改ざん検知やデータ整合性の確認に広く使われてきました。
しかし2004〜2008年にかけて、異なるデータから同じハッシュ値を生成できる「衝突攻撃(Collision Attack)」 が実用レベルで成功し、セキュリティ用途としての信頼性は失われました。現在では パスワードのハッシュ化や電子署名への使用は厳禁 とされており、セキュリティ目的には SHA-256 などへの移行が推奨されています。一方で、悪意ある攻撃が想定されない単純なチェックサム(ファイル転送の破損確認など)には今でも使われているケースがあります。
MD5の仕組みと特性
ハッシュ関数全般に共通する性質と、MD5固有の特性をまとめます。
| 特性 | 説明 | MD5の状況 |
|---|---|---|
| 固定長出力 | 入力サイズに関わらず128bit(32桁16進数)を出力 | ✅ 正常 |
| 一方向性 | ハッシュ値から元データを復元できない | ✅ 理論上は維持 |
| 雪崩効果 | 入力を1ビット変えると出力が大きく変わる | ✅ 正常 |
| 衝突耐性 | 同じハッシュ値を持つ異なるデータを作れない | ❌ 突破済み(2004年〜) |
| 第二原像耐性 | 特定のハッシュ値を持つ別データを作れない | ⚠️ 脆弱性あり |
MD5ハッシュの見た目
入力: "hello"
MD5: 5d41402abc4b2a76b9719d911017c592
入力: "Hello" (大文字に変えただけ)
MD5: 8b1a9953c4611296a827abf8c47804d4
↑ 全然違う値になる(雪崩効果)
アルゴリズムの概要
MD5は以下の4ラウンド×16ステップ(計64ステップ)の処理でハッシュ値を計算します。
入力データ
↓
[パディング処理] → 512ビット単位に揃える
↓
[初期化ベクタ設定] → A,B,C,D(各32bit)
↓
[4ラウンド処理] × ブロック数
├─ Round1: F関数(AND/OR/NOT)
├─ Round2: G関数
├─ Round3: H関数(XOR)
└─ Round4: I関数
↓
[128bit ハッシュ値出力]
歴史と背景
- 1991年 — ロナルド・リベスト(MIT)がMD4の改良版としてMD5を発表。RFC 1321として標準化
- 1990年代〜2000年代初頭 — インターネット上でのファイル整合性確認・パスワード管理・SSL証明書などに広く普及
- 1996年 — ドイツの研究者ハンス・ドブバンティンがMD5の圧縮関数に衝突を発見。警告が出始める
- 2004年 — 中国の研究者 王小雲(Xiaoyun Wang)らがフルMD5の衝突攻撃を発表。通常のPCで1時間以内に衝突生成が可能に
- 2008年 — 研究者グループがMD5の衝突を使い偽の認証局証明書を生成することに成功。実害が証明される
- 2010年代〜 — 主要なセキュリティガイドライン(NIST等)がMD5の使用を非推奨・禁止に。SHA-2系への移行が加速
- 現在 — パスワード保存・電子署名・TLS証明書でのMD5使用は事実上禁止。非セキュリティ用途(壊れ検知)では残存
MD5 vs 他のハッシュ関数
セキュリティ強度と用途の観点で主要なハッシュ関数を比較します。
| アルゴリズム | 出力長 | 衝突耐性 | 速度 | 推奨用途 |
|---|---|---|---|---|
| MD5 | 128bit (32文字) | ❌ 破られた | 速い | 非セキュリティ用チェックサムのみ |
| SHA-1 | 160bit (40文字) | ❌ 破られた | 速い | 使用禁止(2017年に実用衝突攻撃成功) |
| SHA-256 | 256bit (64文字) | ✅ 安全 | 普通 | 現在の標準。パスワード・証明書等 |
| SHA-3 | 可変 | ✅ 安全 | 少し遅い | 高セキュリティ要件 |
| bcrypt | - | ✅ 安全 | 意図的に遅い | パスワード保存に特化 |
実務での判断基準
- ダウンロードファイルの破損確認(公開サーバーへの攻撃が想定されない) → MD5でも可(ただしSHA-256推奨)
- パスワード保存 → bcrypt / Argon2 一択。MD5は絶対NG
- 電子証明書・電子署名 → SHA-256以上。MD5・SHA-1は証明書発行機関が拒否
- API認証・トークン生成 → SHA-256以上
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 1321 | MD5アルゴリズムの仕様(1992年) |
| RFC 6151 | MD5およびHMAC-MD5の使用に関する更新とセキュリティ上の懸念(2011年) |
| RFC 5754 | SHA-2アルゴリズムファミリーの使用(MD5からの移行先) |
| RFC 9106 | Argon2パスワードハッシュの仕様(パスワード保存の現代的標準) |
関連用語
- ハッシュ関数 — 任意長のデータを固定長の値に変換する一方向関数の総称
- SHA-256 — MD5の後継として現在の標準となっているセキュアなハッシュアルゴリズム
- 衝突攻撃 — 異なる入力から同一ハッシュ値を生み出すことを狙う暗号攻撃手法
- チェックサム — データの破損・改ざんを検知するための検証用の値
- 電子署名 — ハッシュ関数と公開鍵暗号を組み合わせたデータ真正性の証明技術
- パスワードハッシュ — パスワードを安全に保管するための専用ハッシュ処理(bcrypt等)
- TLS — HTTPS通信を支える暗号化プロトコル。証明書にSHA-256を使用
- 公開鍵暗号 — MD5が使われていた電子証明書の基盤となる暗号方式