本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
令和3年度 春期 情報処理安全確保支援士試験 午前Ⅱ 問1 ハッシュ関数の一次前像耐性
ハッシュ関数が備えるべき主要な耐性の定義を問う問題です。与えられたハッシュ値から元の値を逆算する難易度を正確に把握します。
【問題】 ディジタル署名などに用いられるハッシュ関数の性質に関する記述のうち,一次前像耐性を説明したものはどれか。
ア あるハッシュ値が与えられたとき,そのハッシュ値を出力するメッセージを見つけることが計算論的に困難であるという性質 イ あるメッセージが与えられたとき,そのメッセージと同じハッシュ値を出力する別のメッセージを見つけることが計算論的に困難であるという性質 ウ 同じハッシュ値を出力する二つの異なるメッセージを見つけることが計算論的に困難であるという性質 エ ハッシュ値から元のメッセージの一部を復元することが計算論的に困難であるという性質
【解説】
暗号学的ハッシュ関数 $H$ は、任意の長さのメッセージ $m$ から固定長のハッシュ値 $h$ を生成する一方向性関数です。
$$h = H(m)$$
ハッシュ関数が安全であるためには、主に以下の3つの耐性(暗号学的性質)が必要です。
一次前像耐性(Preimage Resistance) ハッシュ値 $h$ のみが与えられたとき、$H(m) = h$ となるメッセージ $m$ を見つけ出すことが計算量的に困難であるという性質(一方向性)。
二次前像耐性(Second Preimage Resistance / 弱衝突耐性) 特定のメッセージ $m_1$ が与えられたとき、$H(m_1) = H(m_2)$ かつ $m_1 \neq m_2$ となる別のメッセージ $m_2$ を見つけ出すことが計算量的に困難であるという性質。
強衝突耐性(Collision Resistance) $H(m_1) = H(m_2)$ かつ $m_1 \neq m_2$ となるような、任意の2つのメッセージのペア $(m_1, m_2)$ を見つけ出すことが計算量的に困難であるという性質。
graph LR
subgraph Primary["一次前像耐性"]
H1["Hash Value: h"] -->|Find Impossible| M1["Message: m"]
end
subgraph Secondary["二次前像耐性"]
M2["Given: m1"] -->|Find Impossible| M3["Target: m2"]
end
subgraph Collision["強衝突耐性"]
Pair["Find Pair Impossible"] --> M4[m1]
Pair --> M5[m2]
end
問題文で問われている「一次前像耐性」は、出力されたハッシュ値から入力メッセージを再現できないという性質を指します。
【選択肢の吟味】
| 選択肢 | 判定 | 解説 |
|---|---|---|
| ア | 正解 | 一次前像耐性の正確な定義です。ハッシュ値から元のメッセージを逆算できない性質を示します。 |
| イ | 不正解 | 二次前像耐性(弱衝突耐性)の説明です。与えられた特定のメッセージと同じハッシュ値を持つ別メッセージを探す困難性です。 |
| ウ | 不正解 | 強衝突耐性の説明です。同じハッシュ値を持つ任意の異なる2つのメッセージペアを探す困難性です。 |
| エ | 不正解 | ハッシュ関数の定義と合致しない誤った記述です。暗号学的ハッシュ関数は部分復元も含め元のメッセージの復元を許容しません。 |
【ポイント】
一次前像耐性:ハッシュ値 $h$ から元のメッセージ $m$ を求めるのが困難(一方向性)
二次前像耐性:指定された $m_1$ と同じハッシュ値になる別の $m_2$ を探すのが困難
強衝突耐性:同じハッシュ値になる任意のペア $(m_1, m_2)$ を探すのが困難

