ITパスポート 2026年 問91
問題文
デジタル署名やブロックチェーンで用いられるハッシュ関数には、SHA-256、SHA-512などがある。このようなハッシュ関数に関する記述として、適切なものはどれか。
選択肢
ア:あるハッシュ関数を用いて得たハッシュ値を、そのハッシュ関数に入力することによって、元のデータを復元することができる。
イ:同じデータを異なるハッシュ関数にそれぞれ入力したとき、得られるハッシュ値は全て同じになる。
ウ:同じハッシュ関数を用いる場合、入力したデータが同じであれば、得られるハッシュ値は常に同じになる。(正解)
エ:どのハッシュ関数にもそれぞれの逆関数が存在し、ハッシュ値から元のデータを復元することができる。
🔒 解説は解答すると表示されます
デジタル署名・ブロックチェーンで使われるハッシュ関数について【ITパスポート 解説】
問題文の趣旨:デジタル署名やブロックチェーンで使われる「ハッシュ関数」に関する記述の中で、適切なものを選ぶ問題です。ここで使う用語を簡単に説明します。
- ハッシュ関数(Hash function:入力データを固定長の短い値に変換する関数)
入力がどんな長さでも、出力(ハッシュ値)は決まった長さになります。出力は「ハッシュ値」や「ダイジェスト」と呼びます。 - SHA(Secure Hash Algorithm:安全なハッシュ方式)のうちSHA-256, SHA-512は出力長がそれぞれ256ビット、512ビットのハッシュ関数です。
- デジタル署名(電子的に身元や改ざんの有無を保証する仕組み)やブロックチェーン(改ざんが難しい分散台帳の仕組み)では、データの「指紋」としてハッシュが使われます。
選択肢の中で正しいのは ウ です。以下で「なぜ正しいか」を順を追って説明します。
正解の理由
ハッシュ関数は「決定論的(デターミニスティック)」です。これは「同じハッシュ関数に、同じ入力データを与えれば、必ず同じハッシュ値が出る」という性質を指します。したがって、選択肢の ウ(同じハッシュ関数を用いる場合、入力したデータが同じであれば、得られるハッシュ値は常に同じになる)は正しい記述です。
ポイントを整理すると:
- ハッシュ関数は入力→出力が一方向(元に戻せない)で固定長の値を作る。
- 同じ関数・同じ入力なら同じ出力になる(決定論的)。
- 逆に、出力から元の入力を復元することは基本的にできない(一方向性)。
- 異なるハッシュ関数は内部の計算方法や出力長が違うため、同じ入力でも出力は異なる。
解法ステップ
- 問題文で問われているのは「ハッシュ関数の性質」だと確認する。
- ハッシュ関数の代表的な性質を思い出す:決定論性(同一入力で同一出力)、一方向性(逆算困難)、固定長出力、衝突(異なる入力が同じ出力になること)が理論的には存在するが発見が困難(衝突耐性)。
- 各選択肢をその性質に照らし合わせて当てはめる。
- 「入力をハッシュして元に戻せる」は一方向性と矛盾。
- 「異なる関数でも同じ出力になる」は関数が違えば通常出力も変わるので誤り。
- 「同じ関数・同じ入力なら同じ出力」はハッシュ関数の決定論性に合致する(正答)。
- よって ウ を選ぶ。
補助的に簡単な実験(例:Python)を示すと、同じ文字列を同じハッシュ関数に通すと常に同じ結果になります。
import hashlib
data = b"hello"
h1 = hashlib.sha256(data).hexdigest()
h2 = hashlib.sha256(data).hexdigest()
print(h1)
print(h2)
# h1 と h2 は同じ値が出力される(常に同じ)
選択肢別の誤答解説
-
ア: 「あるハッシュ関数を用いて得たハッシュ値を、そのハッシュ関数に入力することによって、元のデータを復元することができる。」
→ 誤りです。ハッシュ関数は一方向関数(逆算が非常に難しい)で、ハッシュ値から元データを復元することを前提にしていません。元データを復元できるなら暗号(復号)に近くなりますが、ハッシュは復号が設計上困難です。 -
イ: 「同じデータを異なるハッシュ関数にそれぞれ入力したとき、得られるハッシュ値は全て同じになる。」
→ 誤りです。異なるハッシュ関数(例:SHA-256 と SHA-512)はアルゴリズムや出力長が異なるため、同じ入力でも出力は基本的に異なります。 -
ウ: 「同じハッシュ関数を用いる場合、入力したデータが同じであれば、得られるハッシュ値は常に同じになる。」
→ 正しいです。ハッシュ関数は決定論的であり、同じ入力は同じ出力になります。 -
エ: 「どのハッシュ関数にもそれぞれの逆関数が存在し、ハッシュ値から元のデータを復元することができる。」
→ 誤りです。一般にハッシュ関数は逆関数(ハッシュ値→元データ)を持たないよう設計されています。復元できたら安全性が損なわれます。
よくある誤解
- ハッシュは「暗号化」と同じだと思う誤解
- 暗号化は(通常)復号して元に戻せますが、ハッシュは基本的に復元できません。目的が異なります(暗号化=機密性、ハッシュ=整合性確認や識別)。
- 「ハッシュ値が異なれば必ず元データも異なる」と思う誤解
- 実際は「異なる元データが同じハッシュ値になる」こと(衝突)は理論上あり得ます。良いハッシュ関数は衝突を見つけるのが非常に困難です。
- 「同じデータをハッシュすれば常に同じになる」ことと「パスワード保存にそのまま使える」は別問題
- パスワード保存では「salt(ソルト:ランダムな付加データ)」を使い、同じパスワードでも異なるハッシュにする対策が必要です。
補足コラム
- SHA-256 と SHA-512 の違い:出力ビット数が違います(256ビットと512ビット)。出力が長いほど衝突を見つける難しさは増しますが、処理コストも上がります。
- ブロックチェーンでの使い方:ブロック内の取引データをハッシュ化して短い指紋を作り、連鎖的に繋げることで改ざんが難しくなります。
- デジタル署名との使い分け:大きなデータをそのまま署名すると計算量が大きいので、まずハッシュ化して短いダイジェストを作り、そのハッシュに対して署名を行うのが一般的です。
覚え方のコツ:
「同じ関数・同じ入力=同じ出力(決定論)」と短く覚えておくと選択肢で迷いません。逆に「出力から戻せる」はハッシュの考え方と真逆です。
「同じ関数・同じ入力=同じ出力(決定論)」と短く覚えておくと選択肢で迷いません。逆に「出力から戻せる」はハッシュの考え方と真逆です。
FAQ
Q1. ハッシュ値から絶対に元データは復元できないですか?
A1. 理論上は不可能ではありませんが、実用上は非常に困難です。設計された安全なハッシュ関数では(現実的な計算資源で)復元できないことを前提にしています。
A1. 理論上は不可能ではありませんが、実用上は非常に困難です。設計された安全なハッシュ関数では(現実的な計算資源で)復元できないことを前提にしています。
Q2. 異なるハッシュ関数で同じ結果が出る可能性はありますか?
A2. 出力長やアルゴリズムが違うため基本的には出ません。出る可能性は極めて低く、実用上無視してよいです。
A2. 出力長やアルゴリズムが違うため基本的には出ません。出る可能性は極めて低く、実用上無視してよいです。
Q3. パスワードはそのままハッシュすれば安全ですか?
A3. そのままハッシュするだけでは弱いです。攻撃者が総当たり(ブルートフォース)や事前計算(レインボーテーブル)を使えるので、ソルトや計算コストを上げる専用アルゴリズム(bcrypt, Argon2など)を使います。
A3. そのままハッシュするだけでは弱いです。攻撃者が総当たり(ブルートフォース)や事前計算(レインボーテーブル)を使えるので、ソルトや計算コストを上げる専用アルゴリズム(bcrypt, Argon2など)を使います。
関連キーワード: ハッシュ関数、ハッシュ値、SHA-256、SHA-512、一方向性、衝突耐性、デジタル署名、ブロックチェーン、決定論性、ソルト、ハッシュアルゴリズム

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

