ディジタル署名と改ざん・存在の証明
ディジタル署名で「どの鍵を誰が使うか」と「署名でできること・できないこと」を即答できるようになる。あわせて、署名の応用(セキュアブート・XML署名・トランザクション署名)と、存在を証明する技術・埋め込む技術(タイムスタンプ・電子透かし・ステガノグラフィ)を選択肢から見分けられるようになる。
ディジタル署名は、ソフトの配布、電子契約、OS の起動など、ネット上で「誰が出したか」「途中で書き換えられていないか」を確かめる基本の仕組みです。試験では鍵の取り違えを狙う問題が毎年のように出るので、ルールを1つ覚えるだけで確実に1問取れます。
このレッスンで稽古する(用語チェック・過去問)結論:署名は「送信者の秘密鍵で作り、送信者の公開鍵で確かめる」
ディジタル署名は、データに付ける「本人が出した証拠」です。作るときは送信者の秘密鍵(本人しか持たない鍵)、確かめるときは送信者の公開鍵(誰でも入手できる鍵)を使います。使う鍵はどちらも送信者のもので、受信者の鍵は出てきません。
たとえるなら、秘密鍵は自分だけが持つ実印、公開鍵は役所で誰でも照合できる印影の登録です。押せるのは本人だけで、照合は誰でもできます。
前のレッスンの暗号化とは鍵の向きが逆なので、ここが一番のひっかけです。
| 目的 | 使う鍵(かける側) | 使う鍵(戻す・確かめる側) | 守るもの |
|---|---|---|---|
| 暗号化(盗み見防止) | 受信者の公開鍵 | 受信者の秘密鍵 | 機密性(中身を隠す) |
| ディジタル署名 | 送信者の秘密鍵(署名鍵・署名生成鍵) | 送信者の公開鍵(検証鍵・署名検証鍵) | 完全性(改ざん検知)+送信者の確認 |
覚え方:暗号化は「受信者だけが開けられる」ようにしたいので受信者の鍵を使います。署名は「送信者しか作れない」ようにしたいので送信者の鍵を使います。
署名の流れ:ハッシュ → 秘密鍵で署名 → 公開鍵で照合
署名はメッセージそのものではなく、ハッシュ値(メッセージダイジェスト:データから作る短い要約値)に対して作ります。受信者は、自分で計算したハッシュ値と、署名を公開鍵で戻した値を比べます。一致すれば「改ざんなし」かつ「送信者本人が作った」と分かります。
flowchart TD
A["送信者:メッセージ"] --> B["ハッシュ関数でダイジェストを作る"]
B --> C["送信者の秘密鍵で署名を作る"]
C --> D["メッセージと署名を送る"]
D --> E["受信者:届いたメッセージからダイジェストを作る"]
D --> F["送信者の公開鍵で署名を検証(RSAなら署名からダイジェストを取り出す)"]
E --> G["2つが一致するか比べる"]
F --> G
G --> H["一致:改ざんなし+送信者本人"]
RSA 方式(代表的な公開鍵暗号)の問題では「受信者が送信者の公開鍵を使い、署名からメッセージダイジェストを算出する」という言い方で出ます。「算出する」のは受信者で、使うのは送信者の公開鍵です。
署名でできること・できないこと
署名で分かるのは2つだけです。①改ざんされていないことと、②確かに送信者本人が作ったこと(なりすましの防止)です。なりすましとは、他人のふりをしてメッセージを出すことです。
署名はメッセージを暗号化しないので、中身は誰でも読めます。だから盗聴の検知や漏えいの防止はできません。
| 選択肢によく出る表現 | 署名で実現? | 理由 |
|---|---|---|
| 改ざんを検知できる | ○ | ハッシュ値が一致しなくなる |
| 送信者本人からのものと確認できる | ○ | 秘密鍵を持つのは本人だけ |
| 内容を関係者以外に分からないようにする | × | それは暗号化(機密性)の役目 |
| 盗聴を検知する・漏えいを防ぐ | × | 中身は平文のまま |
| 改ざんされた部位を特定する | × | 一致・不一致しか分からない |
| 使用を特定の利用者に制限する | × | 署名はアクセス制御ではない |
| 利用者による修正を不可能にする | × | 修正はできる。修正したことがバレるだけ |
| 著作権が作成者にあることを証明する | × | 誰が配布したかは示せるが、権利の帰属までは証明しない |
| 不正中継・特定日時の再送信がないこと | × | 経路や送信時刻は署名の対象外 |
アプリケーションソフトウェアへの署名(コード署名)の目的は「利用者が改ざんを検知できるようにする」です。過去問はこの1択です。
署名の応用:セキュアブート・XML署名・トランザクション署名
セキュアブートは、PC の起動時に OS やドライバのディジタル署名を検証し、許可されていないものを実行しない仕組みです。OS より前に動くマルウェアを防ぎます。BIOS パスワードや HDD パスワード、起動後のウイルススキャンとは別物です。
XML署名は、XML 文書用の署名の規格です。文書全体だけでなく**一部分だけに署名(部分署名)**したり、複数人が署名(多重署名)したりできます。選択肢では TLS による暗号化、Ajax(JavaScript の非同期通信)、ステガノグラフィの説明がダミーとして並びます。
MITB(Man-in-the-Browser)攻撃は、利用者のブラウザに入り込んだマルウェアが、ネットバンキングの送金先や金額を裏で書き換える攻撃です。通信路は本物で暗号化もされているので、EV SSL 証明書、ワンタイムパスワード、TLS 化では防げません。有効なのはトランザクション署名で、利用者が入力した取引内容と銀行が受け取った内容に差がないかを検証します。
存在の証明と埋め込む技術:タイムスタンプ・電子透かし・ステガノグラフィ
この3つは「時刻を証明する」「出どころを埋め込む」「秘密を隠す」という、目的の違いで見分けます。
| 技術 | 何をするか | 目的のキーワード | よく並ぶダミー |
|---|---|---|---|
| タイムスタンプ(時刻認証) | データがある日時に存在し、それ以降改ざんされていないことを証明する | 存在証明・改ざんなし | 時刻を表示する Web サービス、時計合わせ(NTP) |
| 電子透かし | コンテンツに作者などの識別情報を埋め込む | 不正コピー・転売の判別や追跡 | タイムスタンプ、配達証明 |
| ステガノグラフィ | 画像や音声に秘密のメッセージを埋め込む | メッセージの存在自体を隠す | 暗号、ディジタル署名、CAPTCHA、ストレッチング |
たとえると、タイムスタンプは郵便局の確定日付印で、「この日にこの書類があった」ことを第三者が保証します。
ステガノグラフィと暗号の違いは要注意です。**暗号は「読めなくする」**だけで、暗号文があること自体は見えます。**ステガノグラフィは「あること自体に気付かせない」**技術です。
試験での問われ方
- 鍵当て問題(最頻出):ア〜エに「受信者の公開鍵/受信者の秘密鍵/送信者の公開鍵/送信者の秘密鍵」が並びます。生成なら送信者の秘密鍵、検証なら送信者の公開鍵です。
- 組合せ表問題:「作成:秘密鍵/検証:公開鍵」が正解です。共通鍵が入っている選択肢は即消去します(署名は公開鍵暗号の仕組み)。
- 目的問題:「送信者が署名鍵で署名を作り、メッセージに付加して、受信者が送信者を確認」が正解の型です。「署名鍵でメッセージを暗号化して内容を隠す」「改ざん部位を特定」はダミーです。
- 手順を読ませる問題:ハッシュ→署名生成鍵→署名検証鍵の手順を見せ、「改ざん検知の他にできること」を聞きます。答えは送信者の確認です。
- 定義当て問題:セキュアブート・XML署名・タイムスタンプ・電子透かし・ステガノグラフィは、それぞれ目的のキーワード(起動時に署名検証/部分署名/存在証明/コピー判別/存在を隠す)で選びます。
手順を読んで「改ざん検知の他にできること」を選ぶ
ア メッセージが送信者 A からのものであることの確認
イ メッセージの改ざん部位の特定
ウ メッセージの盗聴の検知
エ メッセージの漏えいの防止
解き方と答えを見る
- 手順(2)を見る:送信者 A が「秘密に保持している自分の署名生成鍵」で署名を作っている。つまり、この署名を作れるのは A だけ。
- 手順(5)を見る:受信者 B は「送信者 A の署名検証鍵」(A の公開鍵)で署名を検証している。
- 検証に成功するのは、A の秘密鍵で作った署名だけ。だから B は、メッセージが A から来たことを確認できる。
- 残りの選択肢を消す:署名は改ざんの有無しか分からないので、イ(改ざん部位の特定)は×。
- メッセージ本体は暗号化されていないので、ウ(盗聴の検知)とエ(漏えいの防止)も×。
答え:ア:メッセージが送信者 A からのものであることの確認
要点(試験直前に読む)
- 署名は「送信者の秘密鍵で作り、送信者の公開鍵で検証」。使う鍵はどちらも送信者のもの。
- 暗号化は逆で、受信者の公開鍵で暗号化し、受信者の秘密鍵で復号する。
- 署名でできるのは「改ざん検知」と「送信者の確認(なりすまし防止)」の2つだけ。盗聴防止・改ざん部位の特定・利用制限はできない。
- セキュアブートは起動時に署名を検証する仕組み。XML署名は部分署名と多重署名。MITB 攻撃にはトランザクション署名が効く。
- タイムスタンプは「その日時に存在し、以降改ざんなし」の証明。電子透かしは不正コピーの判別。ステガノグラフィは存在自体を隠す技術。
ひっかけ
- 「受信者の公開鍵で署名」は暗号化との取り違え。署名の問題に「受信者」が出てきたら疑う。
- 「署名鍵でメッセージを暗号化して内容を隠す」は機密性の説明なので誤り。署名は中身を隠さない。
- 「改ざん部位を特定できる」は誤り。ハッシュ値は一致するかどうかしか分からない。
- ソフトへの署名で「修正を不可能にする」「使用を制限する」「著作権を証明する」は誤り。正解は「改ざんを利用者が検知できる」。
- MITB 攻撃の対策で、EV SSL・ワンタイムパスワード・TLS 化は不正解。ブラウザの中で書き換えられるので、取引内容を照合するトランザクション署名を選ぶ。
用語(15)
ハッシュ値を送信者の秘密鍵で処理して作り、データに付ける「本人が出した証拠」で、改ざん検知と送信者の確認に使う。
⚠ 暗号化と混同しやすい。暗号化は中身を隠すために受信者の公開鍵を使い、署名は中身を隠さず送信者の秘密鍵を使う。
署名を作るための鍵で、送信者の秘密鍵のこと。
⚠ 「署名鍵で復号する」「署名鍵でメッセージを暗号化して隠す」という選択肢は誤り。
署名が正しいかを確かめる鍵で、送信者の公開鍵のこと。
⚠ 受信者の公開鍵ではない。検証も「送信者の」鍵を使う。
公開鍵暗号で、持ち主だけが保管する鍵。
⚠ 共通鍵とは違う。共通鍵は送受信者2人で同じ鍵を共有し、秘密鍵は1人だけが持つ。
公開鍵暗号で、誰に公開してもよい鍵で、秘密鍵と対になる。
⚠ 暗号化では受信者の公開鍵、署名の検証では送信者の公開鍵を使う。
メッセージをハッシュ関数にかけて得る短い固定長の値で、署名はこれに対して作る。
⚠ MAC(共通鍵を使う改ざん検知用の値)は、送信者を第三者に証明できない点で署名と異なる。
他人のふりをしてメッセージを送ったりシステムを使ったりする行為。
⚠ 改ざん(中身の書き換え)とは別の脅威。署名はこの両方に効く。
配布するソフトウェアにディジタル署名を付け、利用者が改ざんの有無と配布元を確かめられるようにすること。
⚠ 使用制限、改変の禁止、著作権の証明はできない。
PC の起動時に OS やドライバの署名を検証し、許可されていないものを実行させない仕組み。
⚠ BIOS パスワードや HDD パスワード(本人確認)、起動時のマルウェアスキャンとは別物。
XML 文書用の署名の規格で、文書の一部への署名(部分署名)や複数人による多重署名ができる。
⚠ TLS(通信の暗号化)や Ajax(非同期通信による画面の書き換え)の説明と混同させる選択肢が出る。
ブラウザに感染したマルウェアが、利用者の入力した取引内容を裏で書き換える攻撃。
⚠ 中間者攻撃(MITM、通信経路の途中で割り込む)とは違い、ブラウザの中で起きるため、通信の暗号化や証明書では防げない。
送金などの取引内容そのものに署名し、利用者の入力と金融機関の受信内容が同じかを検証する対策。
⚠ ワンタイムパスワード(ログイン認証の強化)やEV SSL証明書(サイトの正当性確認)では MITB を防げない。
電子データがある日時に確かに存在し、それ以降改ざんされていないことを証明するサービス。
⚠ 時刻を表示するサービスや、時計合わせの NTP とは違う。
画像などのコンテンツに識別情報を埋め込み、不正コピーや転売を判別・追跡できるようにする技術。
⚠ ステガノグラフィは秘密のメッセージの存在を隠すのが目的。電子透かしは権利者の表示や追跡が目的。
画像や音声などのデータの中に、秘密の情報を他人に気付かれないよう埋め込む技術。
⚠ 暗号は「読めなくする」が、ステガノグラフィは「あること自体を隠す」。CAPTCHA やストレッチングとも無関係。
このレッスンの過去問
- ディジタル署名の生成鍵(送信者の秘密鍵)基本情報技術者試験 科目A免除 修了試験 20250608 実施分 問29
- ディジタル署名の検証鍵(公開鍵)の使用方法令和元年度 秋期 基本情報技術者試験 午前 問38
- ディジタル署名による送信者認証(なりすまし防止)平成29年度 秋期 基本情報技術者試験 午前 問40
- ディジタル署名による改ざん検知平成30年度 秋期 基本情報技術者試験 午前 問36
- XML署名の定義(部分署名・多重署名)基本情報技術者試験 科目A免除 修了試験 20241208 実施分 問29
- MITB攻撃への対策(トランザクション署名)基本情報技術者試験 科目A免除 修了試験 20250727 実施分 問32
- タイムスタンプサービスの機能平成29年度 春期 基本情報技術者試験 午前 問41
- セキュアブートの仕組み平成30年度 秋期 基本情報技術者試験 午前 問43
- 電子透かしの定義平成23年度 特別試験 基本情報技術者試験 午前 問45
- ステガノグラフィの定義(情報の隠蔽)基本情報技術者試験 科目A免除 修了試験 20260125 実施分 問32