基本情報技術者 2019年 秋期 午前(科目A) 問38
問題文
メッセージにRSA方式のディジタル署名を付与して2者間で送受信する。そのときのディジタル署名の検証鍵と使用方法はどれか。
選択肢
ア:受信者の公開鍵であり、送信者がメッセージダイジェストからディジタル署名を作成する際に使用する。
イ:受信者の秘密鍵であり、受信者がディジタル署名からメッセージダイジェストを算出する際に使用する。
ウ:送信者の公開鍵であり、受信者がディジタル署名からメッセージダイジェストを算出する際に使用する。(正解)
エ:送信者の秘密鍵であり、送信者がメッセージダイジェストからディジタル署名を作成する際に使用する。
メッセージにRSA方式のディジタル署名を付与して2者間で送受信する。そのときのディジタル署名の検証鍵と使用方法はどれか。【午前2 解説】
要点まとめ
- 結論: 署名の検証には送信者の公開鍵を用い、受信者は署名から復元したダイジェストと自ら計算したダイジェストを比較して一致を確認します。
- 根拠: RSA署名では送信者が秘密鍵でメッセージダイジェストを署名し、その署名を対応する公開鍵で復号して整合性と送信者性を検証するためです。
- 差がつくポイント: 暗号化と署名で鍵の役割は逆になる点を押さえ、検証に受信者の鍵を使うという誤解を避けることが合格の分かれ目です。
正解の理由
正解は ウ です。
RSA方式のディジタル署名は次の流れで成り立ちます。送信者はまずメッセージからハッシュ関数でメッセージダイジェストを作成し、それを送信者の秘密鍵で暗号処理(署名作成)します。受信者は送信者の公開鍵でその署名を復号(検証)して得られたダイジェストと、自身が計算したメッセージのダイジェストを比較します。一致すれば改ざんされておらず、送信者がそのメッセージを作成したことの証明(送信者性)になります。 ウは「送信者の公開鍵であり、受信者がディジタル署名からメッセージダイジェストを算出する際に使用する」と正しく述べています。
RSA方式のディジタル署名は次の流れで成り立ちます。送信者はまずメッセージからハッシュ関数でメッセージダイジェストを作成し、それを送信者の秘密鍵で暗号処理(署名作成)します。受信者は送信者の公開鍵でその署名を復号(検証)して得られたダイジェストと、自身が計算したメッセージのダイジェストを比較します。一致すれば改ざんされておらず、送信者がそのメッセージを作成したことの証明(送信者性)になります。 ウは「送信者の公開鍵であり、受信者がディジタル署名からメッセージダイジェストを算出する際に使用する」と正しく述べています。
よくある誤解
- 「署名も暗号と同じで受信者の公開鍵を使う」と考える誤り。暗号化(機密性)では送信時に受信者の公開鍵を使うが、署名は送信者の秘密鍵で作り公開鍵で検証する点が逆になります。
- 「検証には受信者の秘密鍵を使う」とする誤解。検証は公開鍵で行い、秘密鍵は署名生成者が保有するものです。
- 「署名は内容を隠す(暗号化する)」という認識。署名は改ざん検知と送信者確認が目的であり、メッセージそのものの機密性を保証するものではありません。
解法ステップ
- 問題文で求められているのは「検証鍵」と「使用方法」であることを確認する。
- RSA署名の基本手順を思い出す:メッセージ→ダイジェスト(ハッシュ)→送信者の秘密鍵で署名作成。
- 検証側の処理:受信者は送信者の公開鍵で署名を復号してダイジェストを得る→自身で計算したダイジェストと比較。
- 選択肢の本文と照合し、公開鍵を使って受信者が署名からダイジェストを得る選択肢(ウ)を選ぶ。
選択肢別の誤答解説
- ア: 受信者の公開鍵であり、送信者がメッセージダイジェストからディジタル署名を作成する際に使用する。
→ 誤り。署名を作るのは送信者の側で送信者の秘密鍵を使う。受信者の公開鍵は署名作成には関係ありません。 - イ: 受信者の秘密鍵であり、受信者がディジタル署名からメッセージダイジェストを算出する際に使用する。
→ 誤り。検証は公開鍵で行うため、受信者の秘密鍵を使うことはない(秘密鍵は送信者が署名に使う場合がある)。 - ウ: 送信者の公開鍵であり、受信者がディジタル署名からメッセージダイジェストを算出する際に使用する。
→ 正解。送信者の秘密鍵で作成した署名を、対応する送信者の公開鍵で復号(検証)してダイジェストを得る処理に合致しています。 - エ: 送信者の秘密鍵であり、送信者がメッセージダイジェストからディジタル署名を作成する際に使用する。
→ 一見正しい署名作成の説明ですが、問題は「検証鍵と使用方法」を問うているため検証に使う鍵を答えるべきで、検証で使うのは送信者の公開鍵(ウ)です。
補足コラム
- RSA署名の実務では、直接メッセージ全体を秘密鍵で処理するのではなく、ハッシュ関数(例:SHA-256)で短いダイジェストを作成してから署名します。これにより処理効率と安全性が向上します。
- 署名は「改ざん検知」と「送信者確認(非否認)」を提供しますが、メッセージの機密性を確保するには暗号化(受信者の公開鍵で暗号化するなど)が別途必要です。
- 公開鍵基盤(PKI)を用いれば、送信者の公開鍵が正当なものであるかをCA(認証局)の証明書で確認できます。署名検証だけで送信者の公開鍵が正しいことまでは保証できない点に注意してください。
FAQ
Q: なぜ検証に公開鍵を使うのですか?
A: 送信者が秘密鍵で署名を作るため、その対応鍵である公開鍵で復号(検証)すると署名がその秘密鍵で作られたことを確認できるからです。
A: 送信者が秘密鍵で署名を作るため、その対応鍵である公開鍵で復号(検証)すると署名がその秘密鍵で作られたことを確認できるからです。
Q: 署名されたメッセージは誰でも読めますか?
A: 署名自体はメッセージの可読性に影響しないため、メッセージが平文であれば誰でも読めます。機密性が必要なら別途暗号化します。
A: 署名自体はメッセージの可読性に影響しないため、メッセージが平文であれば誰でも読めます。機密性が必要なら別途暗号化します。
Q: 送信者の秘密鍵が漏えいしたらどうなる?
A: 第三者が偽の署名を作成できるため、非否認性と信頼性が失われます。秘密鍵は厳重に保護する必要があります。
A: 第三者が偽の署名を作成できるため、非否認性と信頼性が失われます。秘密鍵は厳重に保護する必要があります。
関連キーワード: RSA、ディジタル署名、公開鍵暗号、メッセージダイジェスト、ハッシュ関数、非否認、署名検証、PKI、秘密鍵、公開鍵

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

