概要

ハッシュ関数は任意長のデータを固定長の「ダイジェスト(ハッシュ値)」に変換する一方向関数です。ファイルの改ざん検知・パスワード保存・デジタル署名・MAC など、セキュリティの根幹を支える技術です。SC試験では SHA-2 と SHA-3 の特性・HMAC の役割・MD5 が使用禁止な理由が頻出です。

仕組みと動作原理

ハッシュ関数の3つの性質

性質意味破られると
原像計算困難性(一方向性)ハッシュ値から元データを求められないパスワード漏洩
第2原像計算困難性同じハッシュ値を持つ別データを作れない改ざん検知が無効化
衝突困難性同じハッシュ値を持つ2つのデータを見つけられないデジタル署名が偽造可能

衝突困難性は3つの中で最も強い要件であり、MD5・SHA-1 はここが破られています。

ハッシュ関数に求められる3つの性質
原像計算困難性
ハッシュ値から元データを求められない
第2原像計算困難性
同じハッシュ値の別データを作れない
衝突困難性
同じハッシュ値の2データを見つけられない
ハッシュ関数
一方向関数

主要ハッシュアルゴリズムの比較

アルゴリズムダイジェスト長状態
MD5128ビット廃止(衝突攻撃が実用化済み)
SHA-1160ビット廃止(2017年に衝突実証済み)
SHA-256(SHA-2族)256ビット現在の標準
SHA-384 / SHA-512384 / 512ビット高セキュリティ用途
SHA-3(Keccak)可変(256〜512ビット)SHA-2の代替候補

SHA-2 と SHA-3 は構造が根本的に異なるため、一方に脆弱性が発見されても他方は影響を受けにくいという利点があります。

MAC(メッセージ認証コード)とは

MAC は「誰が送ったか(認証)」と「内容が改ざんされていないか(完全性)」を同時に確認する仕組みです。

送信者:HMAC(メッセージ, 共通鍵) → MAC値を添付して送信
受信者:同じ共通鍵でHMACを計算 → MAC値が一致すれば改ざんなし・正規送信者と確認
MACによる完全性・認証の確認フロー
1
送信者
HMAC(メッセージ, 共通鍵) を計算
MAC値をメッセージに添付
2
送信者
メッセージ+MAC値を送信
3
受信者
同じ共通鍵でHMACを再計算
4
受信者
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は共通鍵なので送受信者の両方が作成でき、否認防止の効果がありません。

誤り③ 「ハッシュ値を見ればデータの内容がわかる」→ 。一方向関数であり、ハッシュ値から元データは求められません。

関連用語

重要キーワード

用語説明
ダイジェストハッシュ関数の出力。固定長のビット列
衝突耐性同じハッシュ値を持つ2つの異なるデータを見つけられないという性質
一方向性ハッシュ値から元データを逆算できないという性質
HMACハッシュ関数と共通鍵を組み合わせたメッセージ認証コード
ソルトパスワードハッシュ化時に付加するランダム値。レインボーテーブル対策
レインボーテーブルよく使われるパスワードのハッシュ値を事前計算した対照表