概要
ハッシュ関数は任意長のデータを固定長の「ダイジェスト(ハッシュ値)」に変換する一方向関数です。ファイルの改ざん検知・パスワード保存・デジタル署名・MAC など、セキュリティの根幹を支える技術です。SC試験では SHA-2 と SHA-3 の特性・HMAC の役割・MD5 が使用禁止な理由が頻出です。
仕組みと動作原理
ハッシュ関数の3つの性質
| 性質 | 意味 | 破られると |
|---|---|---|
| 原像計算困難性(一方向性) | ハッシュ値から元データを求められない | パスワード漏洩 |
| 第2原像計算困難性 | 同じハッシュ値を持つ別データを作れない | 改ざん検知が無効化 |
| 衝突困難性 | 同じハッシュ値を持つ2つのデータを見つけられない | デジタル署名が偽造可能 |
衝突困難性は3つの中で最も強い要件であり、MD5・SHA-1 はここが破られています。
主要ハッシュアルゴリズムの比較
| アルゴリズム | ダイジェスト長 | 状態 |
|---|---|---|
| MD5 | 128ビット | 廃止(衝突攻撃が実用化済み) |
| SHA-1 | 160ビット | 廃止(2017年に衝突実証済み) |
| SHA-256(SHA-2族) | 256ビット | 現在の標準 |
| SHA-384 / SHA-512 | 384 / 512ビット | 高セキュリティ用途 |
| SHA-3(Keccak) | 可変(256〜512ビット) | SHA-2の代替候補 |
SHA-2 と SHA-3 は構造が根本的に異なるため、一方に脆弱性が発見されても他方は影響を受けにくいという利点があります。
MAC(メッセージ認証コード)とは
MAC は「誰が送ったか(認証)」と「内容が改ざんされていないか(完全性)」を同時に確認する仕組みです。
送信者:HMAC(メッセージ, 共通鍵) → MAC値を添付して送信
受信者:同じ共通鍵でHMACを計算 → MAC値が一致すれば改ざんなし・正規送信者と確認
HMAC(Hash-based MAC)の仕組み
HMAC はハッシュ関数と共通鍵を組み合わせた MAC です。
HMAC(K, m) = H( (K⊕opad) || H( (K⊕ipad) || m ) )
K:共通鍵、m:メッセージ、H:ハッシュ関数
opad/ipad:固定のパディング定数
| 特性 | 説明 |
|---|---|
| 鍵なしハッシュとの違い | 鍵を知らないと同じMAC値を計算できない |
| TLSでの使用 | TLS 1.2 の HMAC-SHA256 など |
| JWTでの使用 | HS256 = HMAC-SHA256 による署名 |
ハッシュ衝突攻撃の実例
MD5の衝突例(2004年〜):異なる内容のPDFで同一のMD5値を生成することが実証されました。証明書の偽造に悪用されています。
SHA-1衝突(SHAttered, 2017年):Google が同一SHA-1値を持つ2つのPDFを作成。コスト約11万ドル相当の計算で実現されました。
SC試験での頻出ポイント
- MD5が使用禁止な理由:衝突耐性が破られており、同じハッシュ値を持つ異なるデータを作成できる
- SHA-1廃止の背景:2017年のSHAttered攻撃で衝突が実証、証明書やGitなどで移行が進んだ
- HMACとデジタル署名の違い:HMAC は共通鍵(第三者への否認不可なし)、デジタル署名は公開鍵(否認防止あり)
- パスワード保存にハッシュを使う理由と注意点:元のパスワードを復元できないが、レインボーテーブル対策としてソルトが必要
- ソルトの役割:パスワードに乱数を付加してからハッシュ化し、同じパスワードでも異なるハッシュ値にする
よくある誤問・ひっかけパターン
誤り① 「ハッシュ値が同じなら元データも同じ」→ 誤。衝突が存在する可能性があります(特にMD5・SHA-1)。
誤り② 「HMACはデジタル署名の代わりになる」→ 誤。HMACは共通鍵なので送受信者の両方が作成でき、否認防止の効果がありません。
誤り③ 「ハッシュ値を見ればデータの内容がわかる」→ 誤。一方向関数であり、ハッシュ値から元データは求められません。
関連用語
- 公開鍵暗号(RSA)とデジタル署名 — デジタル署名はハッシュ値に署名する
- 共通鍵暗号(AES)と動作モード — GCMの認証タグもMACの一種
- TLS(Transport Layer Security) — TLSハンドシェイクでSHA-256を多用
重要キーワード
| 用語 | 説明 |
|---|---|
| ダイジェスト | ハッシュ関数の出力。固定長のビット列 |
| 衝突耐性 | 同じハッシュ値を持つ2つの異なるデータを見つけられないという性質 |
| 一方向性 | ハッシュ値から元データを逆算できないという性質 |
| HMAC | ハッシュ関数と共通鍵を組み合わせたメッセージ認証コード |
| ソルト | パスワードハッシュ化時に付加するランダム値。レインボーテーブル対策 |
| レインボーテーブル | よく使われるパスワードのハッシュ値を事前計算した対照表 |