公開鍵暗号とディジタル署名の可視化 — どの鍵を使う?

公開鍵暗号でいちばん混乱するのが「どの場面で、誰の、どっちの鍵を使うか」。合言葉は「暗号化は“相手”の公開鍵、署名は“自分”の秘密鍵」。下で実際に鍵を選んでみて、正解・不正解とその理由を体感してください。ペアの鍵は「片方でかけたものは、もう片方でしか開けない」関係です。

👩 Alice(送信者)
🔓 Aliceの公開鍵(みんなに配る)
🔑 Aliceの秘密鍵(本人だけ)
🧑 Bob(受信者)
🔓 Bobの公開鍵(みんなに配る)
🔑 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 から古い公開鍵を削除します。