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

基本情報技術者 2013年 春期 午前(科目A)37


問題文

手順に示す処理を実施したとき、メッセージの改ざんの検知の他に、受信者Bがセキュリティ上できることはどれか。
〔手順〕 送信者Aの処理  (1)メッセージから、ハッシュ関数を使ってダイジェストを生成する。  (2)秘密に保持していた自分の署名生成鍵を用いて、(1)で生成したダイジェストからメッセージの署名を生成する。  (3)メッセージと、(2)で生成したデータを受信者Bに送信する。
受信者Bの処理  (4)受信したメッセージから、ハッシュ関数を使ってダイジェストを生成する。  (5)受信したデータ、(4)で生成したダイジェスト及び送信者Aの署名検証鍵を用いて、署名を検証する。

選択肢

メッセージが送信者Aからのものであることの確認(正解)
メッセージの改ざん部位の特定
メッセージの盗聴の検知
メッセージの漏えいの防止

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

電子署名と認証【午前解説】

正解の理由

正解:
手順では送信者Aがメッセージのダイジェストを自分の秘密鍵で署名し、受信者Bがその署名を送信者の公開鍵で検証しています。この仕組みは次を満たします。
  • 署名検証に成功すれば、メッセージは署名を作成した秘密鍵の所有者(=送信者A)によるものであると確認できます(真正性)。
  • 同時に、ダイジェストと署名の不一致は改ざんの検出を意味します(整合性)。
    しかし、通信路での盗聴検知やメッセージの漏えい防止(機密性)は公開鍵/署名方式そのものの機能ではありません。したがって選択肢のうち正しいのは「送信者Aからのものであることの確認(ア)」です。

解法ステップ

  1. 手順を読み、用いられている機能を整理する:ハッシュ(ダイジェスト)生成+秘密鍵での署名+公開鍵での検証。
  2. それぞれの技術が提供するセキュリティサービスを対応付ける:ハッシュ=整合性確認、署名(秘密鍵)=真正性(署名者の確認)、公開鍵=検証手段。
  3. 選択肢を照合する:真正性(送信者確認)は提供されるが、機密性(盗聴検知・漏えい防止)は提供されない。
  4. よって「送信者Aからのものであることの確認(ア)」を選択する。

選択肢別の誤答解説

  • ア(正解)
    送信者Aの秘密鍵で生成した署名を公開鍵で検証することで、送信者の真正性を確認できます。ダイジェストと署名の一致により改ざんも検知できます。
  • イ(誤り)
    署名検証が失敗すれば改ざんは検出できますが、どの位置が改ざんされたかまでは分かりません。ハッシュ比較は全体整合性の検証であり、差分位置の特定は別手法が必要です。
  • ウ(誤り)
    盗聴(傍受)はメッセージが第三者に読まれることを指しますが、署名検証だけでは傍受の有無は分かりません。盗聴検知にはチャネル監視やTLSのような通信保護が必要です。
  • エ(誤り)
    漏えい防止=機密性の確保は暗号化(公開鍵暗号や共通鍵暗号)によって行います。署名は暗号化を伴わないため、情報の漏えいを防ぎません。

よくある誤解

  • デジタル署名は「暗号化」と同義だと考える誤解:署名は認証と整合性を提供しますが、内容を秘匿するものではありません。
  • 署名の不一致で「どの箇所が改ざんされたか」が分かると誤解する点:署名検証は改ざんの有無を示すだけで、変更箇所の特定はできません。
  • 署名により「盗聴が検知できる」と考える誤り:盗聴(第三者が通信を傍受すること)は検知できず、検出には通信レイヤや監査が必要です。

補足コラム

  • 非否認性(後に送信者が否認できないこと):署名は一般に非否認性を提供しますが、鍵管理(秘密鍵の保護)や鍵の帰属確認(証明書)が適切でないと完全ではありません。
  • ハッシュ関数の役割:ハッシュは可変長データを固定長に要約し、効率的に署名可能にします。衝突耐性が弱いハッシュを使うと整合性保証が脆弱になります。
  • 実務的対策:認証と機密性を両立したい場合は「署名+暗号化」の組合せや、先に暗号化してから署名(あるいは逆)する運用方針を明確にします。
  • 用語整理:整合性(Integrity)、真正性(Authentication / Origin Authentication)、機密性(Confidentiality)、非否認性(Non-repudiation)。
簡単なPythonイメージ(概念示例、ライブラリの仮定あり):
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding

# 署名生成(概念)
digest = hashes.Hash(hashes.SHA256())
digest.update(message)
h = digest.finalize()
signature = private_key.sign(h, padding.PSS(...), hashes.SHA256())

# 署名検証(概念)
public_key.verify(signature, h_received, padding.PSS(...), hashes.SHA256())

FAQ

Q1: 署名が成功すればメッセージが改ざんされていないと断言できますか?
A1: 基本的にははい。ただし使用ハッシュ関数や署名アルゴリズム、鍵の安全性(秘密鍵の漏洩)が前提条件です。脆弱なアルゴリズムや鍵漏洩があると保証は崩れます。
Q2: 署名と暗号化はどちらを先に行えばよいですか?
A2: 要件により異なります。一般に機密性を優先するなら先に暗号化してから署名、署名の検証を優先するなら署名後に暗号化する運用もあります。運用方針とプロトコルに従ってください。
Q3: 署名で非否認性は完全に保証されますか?
A3: 完全ではありません。非否認性を主張するには鍵管理(秘密鍵保護)、鍵の者帰属(証明書・CA)、時刻情報(タイムスタンプ)などが必要です。

関連キーワード: 電子署名、ハッシュ関数、公開鍵暗号、整合性、真正性、非否認性、機密性、署名検証、暗号化、鍵管理
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

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

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