はじめに
「公開鍵で暗号化して...」「あれ、秘密鍵だっけ?」
エンジニアとして働き始めても、この2つの鍵の役割がごちゃごちゃになってしまう瞬間はありませんか?
WebサイトのSSL(HTTPS)や、サーバーへのSSH接続など、ITインフラの根幹を支えているのが 公開鍵暗号方式 です。
この記事では、暗号化の歴史的な課題から紐解き、公開鍵と秘密鍵の役割を「南京錠」に例えてスッキリと解説します。これを読めばもう迷うことはありません。
全ては「共通鍵」の弱点から始まった
公開鍵暗号方式の登場以前、主流だったのは 共通鍵暗号方式 です。
これは、家の鍵のように「締める鍵」と「開ける鍵」が同じものを指します。
- 暗号化:鍵Aを使う
- 復号:鍵Aを使う
シンプルで処理も高速なのですが、ネットワーク越しにやり取りする場合、致命的な弱点がありました。「鍵配送問題」 です。
- AさんがBさんに暗号文を送りたい。
- 復号してもらうには、AさんはBさんに「鍵A」を渡さなければならない。
- もし鍵Aを渡す途中で誰かに盗まれたら?
「大事なデータを守るための鍵を、安全に渡す方法がない」というジレンマ。これを解決したのが公開鍵暗号方式です。
発想の転換!「公開鍵暗号方式」の登場
この問題を解決するために、「締める鍵」と「開ける鍵」を別々にするという画期的なアイデアが生まれました。
- 公開鍵(Public Key):誰に見せてもいい鍵(南京錠)
- 秘密鍵(Private Key):自分だけが持つ鍵(南京錠のキー)
南京錠でイメージしよう
AさんがBさん(あなた)に秘密のデータを送るシーンを想像してください。
-
公開鍵を渡す
あなた(受信者)は、開いた状態の「南京錠(公開鍵)」をAさんに渡します。南京錠なので、途中で誰かに盗まれても問題ありません。鍵をかけることしかできないからです。 -
暗号化して送る
Aさんは、データを入れた箱にあなたの「南京錠」をかけ、ロックして送り返します。 -
秘密鍵で復号する
ロックされた箱を開けられるのは、ペアとなる「キー(秘密鍵)」を持っているあなただけです。
この仕組みなら、ネットワーク上を流れるのは「南京錠(公開鍵)」と「ロックされた箱(暗号文)」だけ。「解錠するための鍵(秘密鍵)」は一度も移動していないため、安全性が保たれるのです。
実は2通りの使い方がある
公開鍵暗号方式には、大きく分けて2つの利用パターンがあります。ここが混乱しやすいポイントですが、目的が全く逆になります。
1. 「暗号化」〜誰にも見られたくない!〜
先ほどの南京錠の例です。「受信者の公開鍵」 を使います。
- 目的: 盗聴防止(特定の相手にだけ読んでほしい)
-
流れ:
- 送信者: 相手の公開鍵で暗号化する
- 受信者: 自分の秘密鍵で復号する
2. 「電子署名」〜これ、本当に私だよ!〜
こちらは鍵の役割を逆に使うパターンです。「送信者の秘密鍵」 を使います。
- 目的: なりすまし・改ざん防止(本人が書いたことを証明したい)
-
流れ:
- 送信者: 自分の秘密鍵で署名(暗号化)する
- 受信者: 相手の公開鍵で検証(復号)する
「公開鍵で復号できたら、それは間違いなくペアとなる秘密鍵を持っている本人が送ったもの」という論理により、身元保証(認証)が可能になります。
SSHの接続時(公開鍵認証)は、この「電子署名」の仕組みを応用して、「私はサーバーに登録されている公開鍵の持ち主(=秘密鍵を持っている本人)ですよ」と証明を行っています。
身近な活用事例
この技術は、知らず知らずのうちに毎日使っています。
-
HTTPS(Webアクセス)
ブラウザの鍵マークは、この仕組みを使って通信を暗号化している証です。 -
SSH(サーバー接続)
パスワードを使わずに安全にサーバーへログインするために使われます。 -
ブロックチェーン
ビットコインなどの仮想通貨で、取引の正当性を証明するために電子署名が使われています。
まとめ
最後に、覚え方のコツです。
- 公開鍵(南京錠):みんなに配る。ロックはできるが開けられない。
- 秘密鍵(キー):絶対に渡さない。これがないと開けられない。
- 誰かに秘密を送りたいときは「相手の公開鍵」を使う
- 自分が本人だと証明したいときは「自分の秘密鍵」を使う
この2つの鍵の性質を理解しておけば、セキュリティ技術の学習がぐっと楽になります。SSHやSSLの設定で迷ったときは、ぜひこの「南京錠」のイメージを思い出してください。