公開鍵暗号とディジタル署名の可視化 — どの鍵を使う?
公開鍵暗号でいちばん混乱するのが「どの場面で、誰の、どっちの鍵を使うか」。合言葉は「暗号化は“相手”の公開鍵、署名は“自分”の秘密鍵」。下で実際に鍵を選んでみて、正解・不正解とその理由を体感してください。ペアの鍵は「片方でかけたものは、もう片方でしか開けない」関係です。
🔑 Aliceの秘密鍵(本人だけ)
🔑 Bobの秘密鍵(本人だけ)
問題
使う鍵をクリック:
使い方
上で「🔒 暗号化(内容を秘密に)」か「✍️ ディジタル署名(本物と証明)」を選ぶと、Alice と Bob のやり取りの場面が出ます。どの鍵を使うべきかを、AliceとBobの公開鍵・秘密鍵の4つから選んでください。正解・不正解と、その理由が表示されます。「🔄 もう一度」で最初からやり直せます。
2つの目的で、鍵の使い方が「逆」になる
ペアの公開鍵と秘密鍵は、片方でかけたものは、もう片方でしか開けません。この性質を、目的に応じて逆向きに使い分けます。
| 目的 | かける側が使う鍵 | 開く/検証する側の鍵 | 守れるもの |
|---|---|---|---|
| 暗号化(内容を秘密に) | 受信者の公開鍵 | 受信者の秘密鍵 | 盗聴されない(機密性) |
| ディジタル署名(本物と証明) | 送信者の秘密鍵 | 送信者の公開鍵 | なりすまし・改ざん防止 |
なぜ暗号化は「相手の公開鍵」なのか
受信者(Bob)の公開鍵で暗号化すれば、対応するBobの秘密鍵を持つBobだけが復号できます。秘密鍵はBob本人しか持たないので、盗聴者には開けません。公開鍵は誰でも入手できますが、「かける」専用なので配ってOKです。
なぜ署名は「自分の秘密鍵」なのか
送信者(Alice)の秘密鍵はAliceしか持っていないので、それで署名できるのはAliceだけ。受け取った人はAliceの公開鍵で検証し、「確かにAliceが署名した」「途中で改ざんされていない」を確認できます。もしメッセージが1文字でも変われば署名と一致せず、改ざんが検知されます。この署名の考え方は、認証局(CA)が証明書に署名する仕組みそのものです(証明書チェーン検証)。
🔒 実際の通信での使われ方を見るなら:TLSで公開鍵と共通鍵をどう使い分けるかは SSL/TLSの可視化、CAの署名を下からたどる検証は 証明書チェーン検証の可視化、証明書全体の解説は ディジタル証明書の記事 で解説しています。
実際にはどこで使われている?
| 場面 | 使い方 |
|---|---|
| HTTPS(Webサイト) | サーバー証明書には認証局(CA)の署名が付いていて、ブラウザはCAの公開鍵でそれを検証します。そのうえで、通信に使う共通鍵を安全に決めます |
| SSHの公開鍵認証 | ssh-keygen で鍵ペアを作り、公開鍵(.pub)だけをサーバーの ~/.ssh/authorized_keys に登録します。ログイン時、手元の秘密鍵で署名し、サーバーが登録済みの公開鍵で検証します |
| ソフトウェアの配布 | 開発元が秘密鍵でプログラムに署名し、OSが公開鍵で「本物の開発元のものか」「改ざんされていないか」を確かめます(Windowsのコード署名など) |
| 暗号化メール(S/MIME) | 相手の公開鍵で本文を暗号化し、相手だけが自分の秘密鍵で読めるようにします |
実務で多いのは、暗号化よりも署名の使い方です。また、実際の署名はデータ全体ではなく、データのハッシュ値(要約した固定長の値)に対して行います。データが1文字でも変わるとハッシュ値が変わるので、改ざんを見抜けます。
基本情報技術者試験ではこう出る
「公開鍵暗号で暗号化に使う鍵は(→受信者の公開鍵)」「ディジタル署名で署名に使う鍵は(→送信者の秘密鍵)」「署名の検証に使う鍵は(→送信者の公開鍵)」が特によく出ます。暗号化=相手の公開鍵、署名=自分の秘密鍵——この対応を、上のクイズで手を動かして覚えれば確実に得点できます。
よくある質問
Q. 公開鍵を誰でも見られる場所に置いて大丈夫?
A. 大丈夫です。公開鍵から秘密鍵を計算で求めることは、現実的な時間ではできないように作られています。だからこそ「公開」鍵と呼びます。守るべきなのは秘密鍵だけです。
Q. 秘密鍵が漏れたらどうする?
A. その鍵ペアは使えなくなったものとして、すぐに新しい鍵ペアを作り直します。サーバー証明書なら認証局に失効を申請し、SSHなら各サーバーの authorized_keys から古い公開鍵を削除します。