2025/03/31
dev/auth
【非エンジニア向け】宇宙一わかりやすい公開鍵暗号(認証)ことはじめ
エンジニアではない方向けに、公開鍵暗号方式(認証)の概要を掴んでいただくための記事です。
公開鍵暗号方式とは?
公開鍵暗号方式(Public key cryptosystem)とは、
- 公開鍵:インターネットなどでいろいろな人に渡す
- 秘密鍵:自分だけが持っておく
の2種類の鍵を組み合わせて、暗号通信や署名を行うための方法のことです。
鍵を公開してるけど、それって、セキュリティ的に大丈夫なの?
心配いりません。安全性についても解説します。 でも説明に入る前に、用語が紛らわしいので整理しておきます。
「公開鍵」というよりは「公開錠」
公開鍵暗号方式をわかりにくくしているのは、何よりもこの「鍵」という呼び方です。
そのため、この記事では「公開鍵」の方を思い切って
公開錠
と呼ぶことにしたいと思います。
これで、
- 🔓️公開錠
- 🔑秘密鍵
という関係性が出来上がりました。
公開鍵による認証
公開鍵ではいろいろなことができるのですが、まずは「認証(Authentication)」から説明します。
Aさんが、自分のパソコンを使い、Bさんのパソコンと通信をしたいとします。
このとき、AさんやBさんはどのようにして、他人に知られず安全にデータを送るのでしょうか。
共通のパスワードでいいんじゃないの?
パスワードだとして、そのパスワードはどうやって安全に送るの?
確かに!じゃあどうするの?
このとき役に立つのが公開鍵もとい公開錠です。
Aさんがまずやるべきことは、秘密鍵の生成です。
秘密鍵を作ると、それに対応した公開錠(公開鍵)を作ることができるようになります。
こうして、Aさんは秘密鍵と公開錠のセットを手に入れました。
あらかじめ公開錠をインターネットの海にばらまいておきます。DMなどで送るのもいいでしょうが、公開鍵は誰でも確認できるほうが信頼度が高くなります。
このとき、配る鍵は開いているのもポイントです。
そして、公開鍵を受け取ったBさんはこれを使って送りたいデータに鍵をかけ、データを送ります。
このようにして鍵をかけたデータは、途中で盗まれたとしても誰にも読めません。読めるのは、その鍵を作ったAさんだけです。
ちなみに、公開鍵から秘密鍵は作れません。だからこの方式は安全なんです。
このようにして、公開鍵認証は安全なデータの送受信に役立っています。
ちょうど皆さんが見ているこのサイトも、HTTPS(HTTP over TLS)という技術で途中のデータをいつのまにか暗号化しています。このTLSは、公開鍵暗号方式と共通鍵暗号方式(普通にパスワードを知らせるような方式)の両方を使っています。
ややこしいので詳細は省きますが、HTTPSでは共通鍵の受け渡しに公開鍵暗号方式を使用しています。
公開鍵暗号方式の弱点
公開鍵暗号方式は革命的にも見えますが、一つ弱点があります。
送り主のなりすましに弱い
公開鍵をばらまくと言いましたが、例えばSNSアカウントやウェブサイトを乗っ取られていると「Aさんのものに見える偽の公開鍵」で暗号化したデータを攻撃者に送ってしまうことになります。
そのため、公開鍵暗号を安全に使うためには、送っている人の身元確認が大事になってきます。
身元を確認するには?
それでは、安全に公開鍵を使うために、送っている人が本人かどうかを確認する方法をお伝えします。
1. SNS経由で送る
SNSのDMなどを経由して公開鍵を送った場合、そのアカウントや端末が乗っ取られていなければその公開鍵は信用できます。
2. あらかじめ複数の人に渡しておく
公開鍵はパスワードと異なり、秘密鍵が流出してしまわない限り変える必要がありません。そのため、あらかじめ広くいろいろな人に配っておくことで、受け取る人同士が公開鍵を照合することができます。
ホームページなどに公開するのもいいアイデアです。そのホームページが乗っ取られていなければ、その公開鍵がその会社のものであることが証明できます。
3. 信用できる機関や会社に渡しておく
「この公開鍵は、たしかにこの人のものです」というものを、誰かがあらかじめ確認して証明してくれれば安心しやすいですよね。
4. 署名と併用する
公開鍵認証方式を応用すると、署名を行うことができます。署名と暗号化を併用することで、その署名を検証すれば本人性が確認できることになります。
署名のやり方については別の記事に書いています。
公開鍵は身近にある
公開鍵認証方式は、とても身近で重要な技術です。仕組みを理解して、いろいろなことに活かしてみてください!
ホームに戻る