戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

ITパスポート 2019年 秋期 93


問題文

ディジタル署名やブロックチェーンなどで利用されているハッシュ関数の特徴に関する、次の記述中のa、bに入れる字句の適切な組合せはどれか。ハッシュ関数によって、同じデータは、[ a ]ハッシュ値に変換され、変換後のハッシュ値から元のデータを復元することが[ b ]。
ITパスポート 2019年 秋期  問93の選択肢の画像

選択肢

(正解)

🔒 解説は解答すると表示されます

ハッシュ関数の特徴に関する記述【ITパスポート 解説】

正解の理由

ハッシュ関数(hash function:データを短い固定長の値に変換する関数)は、同じ入力データに対して必ず同じ出力(ハッシュ値)を返す決定的な関数です。つまり、あるファイルやメッセージをハッシュ化すれば、何度計算しても同じハッシュ値になります。これが「a:常に同じ」に当たります。
また、ハッシュ関数は「一方向性(ワンウェイ)関数」と呼ばれ、ハッシュ値から元のデータを元どおりに復元することが基本的にできません(事前画像抵抗:preimage resistance)。従って「b:できない」が当てはまり、以上より選択肢の が正しい選択です。
※用語補足:一方向性(ワンウェイ)関数とは、計算は速いが逆方向(出力→入力)を求めるのが極めて困難な関数です。

解法ステップ

  1. 問題文のキーワードを確認:「ディジタル署名」「ブロックチェーン」「ハッシュ関数」。これらは一般に「データの整合性確認」と「一方向性」を利用します。
  2. ハッシュ関数の基本性質を思い出す:
    • 同じ入力 → 同じハッシュ値(決定性)
    • 異なる入力でも同じ出力になる可能性(衝突)が理論上あるが稀である(衝突耐性)
    • ハッシュ値から元データへ戻すことはできない(事前画像抵抗)
  3. 表の a に「常に同じ」、b に「できない」を当てはめると合う選択肢を選ぶ。

選択肢別の誤答解説

  • ア(a:都度異なる、b:できない)
    • 「都度異なる」は誤りです。ハッシュ関数は決定的なので、同じデータは毎回同じハッシュ値になります。結果としてアは不適切です。
  • イ(a:都度異なる、b:できる)
    • 両方とも誤りです。まず「都度異なる」が誤りで、さらにハッシュ値から元に戻せる「できる」も誤り(ハッシュは一方向性)です。
  • ウ(a:常に同じ、b:できない)
    • 正しい組合せです。決定性と一方向性の両方を満たします。したがって正解は です。
  • エ(a:常に同じ、b:できる)
    • 「常に同じ」は正しい性質ですが、「できる」(復元できる)は誤りです。エは誤答です。

よくある誤解

  1. ハッシュ = 暗号化(復号できる)と混同する
    • 暗号化は復号(元に戻す)ことを前提に設計されます。一方、ハッシュは戻せません。用途が異なります(例:暗号化は通信の秘密保護、ハッシュは改ざん検知やパスワードの検証)。
  2. 「常に同じ」は塩(ソルト)を使うと変わるのでは?という疑問
    • ソルト(salt)はパスワード等を守るためにハッシュ前にデータに付け足すランダムな値です。ソルトを同じにすればハッシュは同じになります。ソルトは「同じ元データでも異なるハッシュにするための工夫」であり、ハッシュ関数の決定性自体は変わりません。
  3. ハッシュ値は完全に衝突しないと誤解する
    • 出力が有限長のため理論上は異なる入力で同じ出力(衝突)が起こり得ます。ただし安全なハッシュ関数(例:SHA-256)は実用上衝突が非常に起こりにくい(計算量的に困難)よう設計されています。

補足コラム

  • ハッシュ関数の例:SHA-256(Secure Hash Algorithm 256)。出力は常に256ビットの固定長になります。ブロックチェーンではブロック内データをハッシュし、その値を次のブロックに組み込むことで改ざん検出性を高めています。
  • 覚え方(比喩):ハッシュ値は「データの指紋」のようなものです。指紋から本人を完全に逆算できないように、ハッシュ値から元データを復元することはできません。
  • 実務での注意:パスワード保存では単純なハッシュだけでなく、ソルトや繰り返し(stretching)、HMAC(Hash-based Message Authentication Code:ハッシュを使った認証コード)などの対策が使われます。
簡単な実例(PythonでSHA-256を計算)
import hashlib

text = "hello world"
h = hashlib.sha256(text.encode('utf-8')).hexdigest()
print(h)  # 同じ文字列なら何度計算しても同じハッシュが出る

FAQ

Q1. ハッシュ値から元のファイルは絶対に復元できませんか?
A1. 理論的な完全不可逆性を数学的に証明するのは難しいですが、設計上「事実上できない(計算上困難)」とされています。実用上は復元できない前提で使います。
Q2. 異なるデータが同じハッシュになることはありますか?
A2. はい(衝突)が理論的には存在します。しかし安全なハッシュ関数では、衝突を見つけるのは計算上非常に困難です。
Q3. パスワードをハッシュするだけで安全ですか?
A3. 単純なハッシュだけでは辞書攻撃やレインボーテーブル攻撃で突破される可能性があるため、ソルトや繰り返し、専用の関数(bcrypt, Argon2など)を使うのが推奨です。
Q4. ブロックチェーンで使われるハッシュの役割は何ですか?
A4. データの改ざん検出とチェーンのつながり(前ブロックのハッシュを次ブロックに入れることで改ざんがすぐ分かる)です。

関連キーワード: ハッシュ関数, ハッシュ値, 一方向性, 事前画像抵抗, 衝突耐性, 固定長出力, SHA-256, ソルト, HMAC, ブロックチェーン, ディジタル署名
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポート
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について