<p>style_prompt
本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">令和5年度 情報処理安全確保支援士試験 午前Ⅱ 問1 デジタル署名</h1>
<p>メッセージの真正性と改ざん検知を保証するデジタル署名の生成工程において、どの鍵で何を処理するかという基本原理を問う問題です。</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>公開鍵暗号方式を用いたデジタル署名の手順のうち、適切なものはどれか。</p>
<p>ア 送信者が、メッセージからハッシュ関数を用いてハッシュ値を求め、それを送信者の秘密鍵で暗号化して署名を作成する。
イ 送信者が、メッセージからハッシュ関数を用いてハッシュ値を求め、それを送信者の公開鍵で暗号化して署名を作成する。
ウ 送信者が、メッセージを送信者の秘密鍵で暗号化し、その暗号文からハッシュ関数を用いてハッシュ値を求めて署名を作成する。
エ 送信者が、メッセージを送信者の公開鍵で暗号化し、その暗号文からハッシュ関数を用いてハッシュ値を求めて署名を作成する。</p>
</blockquote>
<h3 class="wp-block-heading">【解説】</h3>
<p>デジタル署名は、送信者が本人であること(本人確認)と、データが途中で改ざんされていないこと(完全性)を証明する技術です。</p>
<p>デジタル署名の生成プロセスは以下の数式で表現できます。</p>
<p>$$S = E_{SK_{sender}}(H(M))$$</p>
<p>ここで、$S$ は署名、$E$ は暗号化アルゴリズム、$SK_{sender}$ は送信者の秘密鍵、$H$ はハッシュ関数、$M$ はメッセージを指します。</p>
<ol class="wp-block-list">
<li><p><strong>メッセージダイジェストの算出</strong>: 元のメッセージからハッシュ関数を用いて、固定長のハッシュ値(メッセージダイジェスト)を生成します。</p></li>
<li><p><strong>秘密鍵による暗号化</strong>: 算出したハッシュ値を<strong>送信者の秘密鍵</strong>で暗号化します。これが「デジタル署名」となります。</p></li>
<li><p><strong>検証</strong>: 受信者は、送られてきた署名を<strong>送信者の公開鍵</strong>で復号し、自身で計算したハッシュ値と比較することで正当性を確認します。</p></li>
</ol>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph LR
A["メッセージ"] --> B["ハッシュ関数"]
B --> C["ハッシュ値"]
C --> D["送信者の秘密鍵で暗号化"]
D --> E["デジタル署名"]
</pre></div>
<h3 class="wp-block-heading">【選択肢の吟味】</h3>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">選択肢</th>
<th style="text-align:left;">判定</th>
<th style="text-align:left;">解説</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;">ア</td>
<td style="text-align:left;"><strong>正解</strong></td>
<td style="text-align:left;">署名生成の正しい手順です。ハッシュ値を送信者の秘密鍵で暗号化します。</td>
</tr>
<tr>
<td style="text-align:left;">イ</td>
<td style="text-align:left;">不正解</td>
<td style="text-align:left;">公開鍵で暗号化すると、誰でも復号できてしまうため、署名の意味をなしません。</td>
</tr>
<tr>
<td style="text-align:left;">ウ</td>
<td style="text-align:left;">不正解</td>
<td style="text-align:left;">メッセージ自体を暗号化するのは処理負荷が高く、署名の手順としても誤りです。</td>
</tr>
<tr>
<td style="text-align:left;">エ</td>
<td style="text-align:left;">不正解</td>
<td style="text-align:left;">公開鍵によるメッセージの暗号化は「秘匿」が目的であり、署名の手順ではありません。</td>
</tr>
</tbody>
</table></figure>
<h3 class="wp-block-heading">【ポイント】</h3>
<ul class="wp-block-list">
<li><p>署名生成には「送信者の秘密鍵」を使用する。</p></li>
<li><p>署名検証には「送信者の公開鍵」を使用する。</p></li>
<li><p>暗号化の対象はメッセージそのものではなく、ハッシュ値(ダイジェスト)である。</p></li>
</ul>
style_prompt
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
令和5年度 情報処理安全確保支援士試験 午前Ⅱ 問1 デジタル署名
メッセージの真正性と改ざん検知を保証するデジタル署名の生成工程において、どの鍵で何を処理するかという基本原理を問う問題です。
公開鍵暗号方式を用いたデジタル署名の手順のうち、適切なものはどれか。
ア 送信者が、メッセージからハッシュ関数を用いてハッシュ値を求め、それを送信者の秘密鍵で暗号化して署名を作成する。
イ 送信者が、メッセージからハッシュ関数を用いてハッシュ値を求め、それを送信者の公開鍵で暗号化して署名を作成する。
ウ 送信者が、メッセージを送信者の秘密鍵で暗号化し、その暗号文からハッシュ関数を用いてハッシュ値を求めて署名を作成する。
エ 送信者が、メッセージを送信者の公開鍵で暗号化し、その暗号文からハッシュ関数を用いてハッシュ値を求めて署名を作成する。
【解説】
デジタル署名は、送信者が本人であること(本人確認)と、データが途中で改ざんされていないこと(完全性)を証明する技術です。
デジタル署名の生成プロセスは以下の数式で表現できます。
$$S = E_{SK_{sender}}(H(M))$$
ここで、$S$ は署名、$E$ は暗号化アルゴリズム、$SK_{sender}$ は送信者の秘密鍵、$H$ はハッシュ関数、$M$ はメッセージを指します。
メッセージダイジェストの算出: 元のメッセージからハッシュ関数を用いて、固定長のハッシュ値(メッセージダイジェスト)を生成します。
秘密鍵による暗号化: 算出したハッシュ値を送信者の秘密鍵で暗号化します。これが「デジタル署名」となります。
検証: 受信者は、送られてきた署名を送信者の公開鍵で復号し、自身で計算したハッシュ値と比較することで正当性を確認します。
graph LR
A["メッセージ"] --> B["ハッシュ関数"]
B --> C["ハッシュ値"]
C --> D["送信者の秘密鍵で暗号化"]
D --> E["デジタル署名"]
【選択肢の吟味】
| 選択肢 |
判定 |
解説 |
| ア |
正解 |
署名生成の正しい手順です。ハッシュ値を送信者の秘密鍵で暗号化します。 |
| イ |
不正解 |
公開鍵で暗号化すると、誰でも復号できてしまうため、署名の意味をなしません。 |
| ウ |
不正解 |
メッセージ自体を暗号化するのは処理負荷が高く、署名の手順としても誤りです。 |
| エ |
不正解 |
公開鍵によるメッセージの暗号化は「秘匿」が目的であり、署名の手順ではありません。 |
【ポイント】
ライセンス:本記事のテキスト/コードは特記なき限り
CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。
コメント