はじめに
公開鍵と秘密鍵について調べていると、「錠前と鍵で説明するとわかりやすい」という意見がある一方で、「その説明は不適切で、誤解を招く」という意見も見かけます。
実際最近X(旧ツイッター)で再燃してました。
個人的には、錠前と鍵の比喩は入門として有効ですが、それだけで公開鍵暗号全体を説明するのは難しいと考えています。
今回は、その理由と、そもそも公開鍵は何に使われるものなのかを整理してみます。
1. 錠前と鍵の比喩は何がわかりやすいのか?
公開鍵暗号の「暗号化・復号」を説明する場合、次のような比喩がよく使われます。
- 公開鍵:誰でも使える錠前
- 秘密鍵:その錠前を開けられる鍵
例えば、Aさんに秘密のメッセージを送りたいとします。
- Aさんから公開鍵を受け取る。
- 公開鍵を使ってメッセージを暗号化する。
- 暗号文をAさんに送る。
- Aさんは秘密鍵を使って復号する。
この比喩なら、「公開鍵は他人に渡してもよいが、秘密鍵は自分だけで管理する」という関係を直感的に理解できます。
そのため、公開鍵暗号の基本を理解する最初の説明としては、十分に有効だと思います。
2. なぜ錠前と鍵の比喩は不適切だと言われるのか?
問題は、物理的な錠前と暗号技術では、仕組みが異なることです。
① 物理的な錠前と数学的な安全性は違う
物理的な錠前は、ピッキングや破壊などによって開けられる可能性があります。
一方、公開鍵暗号の安全性は、適切な方式や鍵長を前提として、秘密鍵を現実的な時間で求めることが困難である、といった数学的・計算量的な性質に基づいています。
錠前の防犯性と暗号の安全性は、同じようには考えられません。
② 公開鍵が本当に本人のものか確認する必要がある
例えば、Aさんの公開鍵だと思って受け取った鍵が、実は攻撃者の公開鍵だったらどうなるでしょうか。
その鍵でメッセージを暗号化すると、攻撃者が自分の秘密鍵で内容を復号できてしまう可能性があります。
つまり、公開鍵暗号では、鍵を公開するだけでなく、その公開鍵が本当に通信相手のものか確認することも重要です。
実際には、電子証明書や認証局などを利用して、公開鍵と相手の身元を結び付けます。
③ 公開鍵暗号は暗号化だけに使うわけではない
これが、錠前と鍵の比喩だけでは説明しきれない、最も重要なポイントだと思います。
3. そもそも公開鍵は暗号化するためのものなのか?
結論から言うと、公開鍵は暗号化だけに使われるものではありません。
代表的な用途は、次の3つです。
| 用途 | 公開鍵の役割 | 秘密鍵の役割 |
|---|---|---|
| 暗号化・復号 | 暗号化する | 復号する |
| 電子署名 | 署名を検証する | 署名を作成する |
| 鍵共有 | 共通の秘密情報を導き出す処理に参加する | 同様に処理に参加する |
暗号化
公開鍵で暗号化し、対応する秘密鍵で復号します。
これは、錠前と鍵の比喩で説明できる用途です。RSAなどが代表例です。
電子署名
秘密鍵で署名を作成し、公開鍵で検証します。
データが改ざんされていないか、対応する秘密鍵によって署名されたかなどを確認するために使います。
なお、「秘密鍵で暗号化し、公開鍵で復号する」という説明を電子署名に当てはめることがありますが、一般的な電子署名の仕組みを正確に表現したものではありません。署名の作成と検証は、それぞれ専用の処理です。
鍵共有
例えばECDHという方式では、公開鍵と秘密鍵を使って、通信する双方が共通の秘密情報を導き出します。
この場合、公開鍵の目的はメッセージを直接暗号化することではありません。
HTTPSなどでは、このような鍵共有によって通信に使う共通鍵を確立し、その共通鍵で実際の通信データを暗号化することがあります。
4. では、どう説明するのがよいのか?
個人的には、相手の知識レベルに合わせて説明を使い分けるのがよいと考えています。
初心者向けなら、まずは次の説明で十分です。
公開鍵と秘密鍵はペアになっていて、公開鍵は誰に渡してもよく、秘密鍵は自分だけで管理する。
公開鍵暗号には、暗号化・復号、電子署名、鍵共有などの用途がある。それぞれの用途で、鍵の使い方は異なる。
暗号化・復号のイメージを補足したい場合には、錠前と鍵の比喩を使えばよいと思います。
ただし、比喩はあくまで一つの用途を理解するためのものであり、公開鍵暗号全体の仕組みを表しているわけではありません。
5. まとめ
錠前と鍵の比喩について、私の考えは次のとおりです。
- 入門としてはわかりやすく、有効な比喩である。
- 物理的な錠前と暗号の安全性は異なるため、比喩だけでは誤解が生じる可能性がある。
- 公開鍵暗号には暗号化だけでなく、電子署名や鍵共有などの用途もある。
- 比喩を禁止するのではなく、何を説明するための比喩なのかを明確にすることが重要である。
大切なのは、比喩を使うかどうかではなく、比喩で説明できる範囲と、実際の技術との違いを理解することだと思います。