ハッシュ関数の性質を整理する:決定性と一方向性の違い
ITパスポート試験 令和8年度 問91 / セキュリティ › 情報セキュリティ対策・実装技術
過去問にチャレンジ
デジタル署名やブロックチェーンで用いられるハッシュ関数には,SHA-256,SHA-512などがある。このようなハッシュ関数に関する記述として,適切なものはどれか。
- ア
あるハッシュ関数を用いて得たハッシュ値を,そのハッシュ関数に入力することによって,元のデータを復元することができる。
- イ
同じデータを異なるハッシュ関数にそれぞれ入力したとき,得られるハッシュ値は全て同じになる。
- ウ
同じハッシュ関数を用いる場合,入力したデータが同じであれば,得られるハッシュ値は常に同じになる。
- エ
どのハッシュ関数にもそれぞれの逆関数が存在し,ハッシュ値から元のデータを復元することができる。
会話形式の解説
講師今回はハッシュ関数の基本的な性質の問題です。注目してほしいのは二つで、同じ入力から同じ値が出るか、そしてハッシュ値から元のデータに戻せるか、という点です。
受験者SHA-256という名前は見たことがあります。ただ、暗号化と何が違うのかがあいまいです。暗号化なら元に戻せるので、ハッシュ値も戻せそうな気がしてしまいます。
講師そこが一番の引っかけです。ハッシュ関数は、任意の長さのデータから決まった長さのハッシュ値を求める関数で、一方向性という性質があります。一方向性とは、ハッシュ値から元のデータを求めることが困難だという意味です。暗号化は復号で元に戻せますが、ハッシュ化は元に戻すことを前提にしていません。
受験者そうすると、ハッシュ値をもう一度同じハッシュ関数に入れれば元に戻る、という記述は誤りですね。
講師はい。ハッシュ値を入力しても、それがさらにハッシュ化されるだけで、元のデータには戻りません。同じ理由で、どのハッシュ関数にも逆関数があって復元できる、という記述も誤りです。もし復元できてしまえば、ハッシュ関数の安全性が損なわれます。
受験者残りは二つです。同じデータなら、どのハッシュ関数を使っても同じ値になる、というのは正しいのでしょうか。
講師そこは違います。ハッシュ関数ごとに計算方法や出力の長さが異なるので、同じデータでも通常は異なるハッシュ値になります。例えばSHA-256とSHA-512では、名前の数字のとおり出力のビット数からして違います。
受験者出力の長さが違えば、同じ値になりようがないですね。では、同じハッシュ関数に同じデータを入れれば常に同じ値になる、という記述が正解だと思います。
講師そのとおりです。これを決定性といいます。この性質があるので、受け取ったデータのハッシュ値を計算し直して元のハッシュ値と照合すれば、改ざんの有無を確かめられます。デジタル署名やブロックチェーンで使われるのもこのためです。
受験者整理すると、同じ関数と同じ入力なら必ず同じ値になる決定性と、ハッシュ値から元に戻せない一方向性の二つが柱で、関数が違えば値も違う、ということですね。
講師よくまとまっています。補足すると、異なる入力が同じハッシュ値になる衝突は理論上は起こり得ますが、SHA-256などでは実際に見つけるのは極めて困難です。「元に戻せる」「逆関数がある」と書かれていたら、暗号化と混同させる引っかけだと考えてください。
まとめ
ハッシュ関数は、任意の長さのデータから固定長のハッシュ値を求める関数です。同じハッシュ関数に同じデータを入力すれば、ハッシュ値は常に同じになり(決定性)、これを利用して改ざんの有無を確かめられます。一方で、ハッシュ値から元のデータを復元することは困難です(一方向性)。また、SHA-256とSHA-512のように関数が異なれば計算方法や出力長が違うため、同じデータでも通常は異なるハッシュ値になります。復号できる暗号化と混同しないことが得点のポイントです。
解答・解説
正解はウです
この問題のテーマ
SHA-256やSHA-512などのハッシュ関数が持つ基本的な性質を問う問題です。特に、同じ入力からは常に同じ値が出る「決定性」と、ハッシュ値から元に戻せない「一方向性」を理解しているかが問われます。
解き方の考え方
ハッシュ関数は、任意の長さのデータから決まった長さのハッシュ値を求める一方向の関数です。まず「ハッシュ値から元のデータを復元できる」とする選択肢は、一方向性に反するので外します。次に、異なるハッシュ関数どうしで結果がそろうかどうかを考えると、関数ごとに計算方法や出力の長さが違うので、同じにはなりません。残るのは、同じ関数に同じデータを入れれば常に同じ値になるという決定性の記述です。
選択肢ごとの解説
- ×ア あるハッシュ関数を用いて得たハッシュ値を,そのハッシュ関数に入力することによって,元のデータを復元することができる。ハッシュ値を同じハッシュ関数に入力すれば元のデータを復元できる、という記述は誤りです。ハッシュ値を再び入力しても、それがさらにハッシュ化されるだけで、元のデータには戻りません。ハッシュ関数は一方向性を持つため、ハッシュ値から元のデータを求めることは困難です。
- ×イ 同じデータを異なるハッシュ関数にそれぞれ入力したとき,得られるハッシュ値は全て同じになる。同じデータを異なるハッシュ関数に入力すればハッシュ値が全て同じになる、という記述は誤りです。ハッシュ関数ごとに計算方法や出力の長さが異なるため、同じデータでも通常は異なるハッシュ値になります。例えばSHA-256とSHA-512では出力のビット数からして違います。
- ○ウ 同じハッシュ関数を用いる場合,入力したデータが同じであれば,得られるハッシュ値は常に同じになる。同じハッシュ関数を使い、入力データが同じならハッシュ値は常に同じになる、という記述は正しいです。ハッシュ関数は決定的な関数で、同じ関数と同じ入力からは必ず同じ出力が得られます。この性質があるので、受け取ったデータのハッシュ値を計算し直して照合すれば、改ざんの有無を確かめられます。
- ×エ どのハッシュ関数にもそれぞれの逆関数が存在し,ハッシュ値から元のデータを復元することができる。どのハッシュ関数にも逆関数があり元のデータを復元できる、という記述は誤りです。ハッシュ関数は一方向の変換を前提としており、ハッシュ値から元のデータへ戻す逆関数はありません。もし復元できてしまえば、ハッシュ関数を安全に使うことができなくなります。
補足
暗号化は復号によって元に戻せますが、ハッシュ化は元に戻すことを前提としていません。そのため、ハッシュ値から元のデータを復元できるとするアやエの記述は誤りです。なお、異なる入力が同じハッシュ値になる「衝突」は理論上は起こり得ますが、SHA-256などでは実際に見つけるのは極めて困難です。
POINT
- ハッシュ関数は、任意の長さのデータから固定長のハッシュ値を求める関数です。
- 同じハッシュ関数に同じデータを入力すれば、ハッシュ値は常に同じになります(決定性)。
- ハッシュ値から元のデータを復元することは困難です(一方向性)。
- 異なるハッシュ関数では計算方法や出力長が違うため、同じデータでも通常は異なるハッシュ値になります。
