本文へ移動
目次へ
公開していい鍵で、どうして秘密を守れるの?:内容をイメージした挿絵
コンピューター

公開していい鍵で、どうして秘密を守れるの?

鍵をみんなに見せたら、秘密が読まれてしまいそうだね。公開鍵と秘密鍵は、同じ働きをする合鍵ではないんだ。「読める人を限る」と「送り主を確かめる」を分けて考えよう。

まず、ひとことで

公開鍵と秘密鍵は、計算で結び付いた二つのデータだよ。公開鍵暗号で受取人だけに読ませるときは、その人の公開鍵で暗号化し、秘密鍵で戻す。電子署名では、送り主の秘密鍵で署名を作り、公開鍵で確かめるんだ。鍵が本当に誰のものかも大切だよ。

秘密の鍵を、先に渡すのはむずかしい

みなさんが、離れた場所にいるそらさんへ、手紙を送りたいとしよう。途中で誰かがデータを見ても、内容を読めないようにしたいね。文章を決まった計算で読みにくいデータへ変えることを、暗号化というよ。元の文章へ戻すことは復号だ。文字を小さく表示したり、見えない場所へ隠したりするのとは違うんだ。

暗号の計算には、鍵と呼ぶデータを使うよ。同じ鍵で暗号化と復号をする方法を、共通鍵暗号という。二人がその鍵を知っていれば使えるけれど、初めて話す相手と、どうやって安全に鍵を共有するかが問題になるね。手紙といっしょに、誰でも見える形で鍵を送っては、途中で見た人も使えてしまう。ここに、別の役割を持つ二つの鍵という考えが登場するんだ。

公開する鍵と、手元で守る鍵

公開鍵暗号では、計算で結び付いた公開鍵と秘密鍵の組を使うよ。ここでは、そらさんが受取人になる。そらさんは自分の公開鍵を相手に知らせ、秘密鍵は手元で守る。みなさんは、そらさんの公開鍵で文章を暗号化する。届いた暗号文を、そらさんが対応する秘密鍵で元へ戻すんだ。最初の図で、誰の鍵かを追いかけてね。

公開鍵を持っている人は、そらさん宛ての暗号文を作れる。でも、公開鍵だけで同じように読み戻せるわけではないよ。二つの鍵は、同じドアを開ける二本の合鍵ではないんだ。なお、ここでの「みな」は登場人物の名前だよ。公開鍵を知る別の人も暗号文を作れるから、読める人を限っただけでは、送り主がみなさんだと確かめたことにはならない。

そらが公開鍵を知らせ、みながその鍵で手紙を暗号化する。そらは手元の秘密鍵で復号する。秘密鍵は送らない。
受取人の公開鍵で暗号化し、受取人の秘密鍵で戻す

公開鍵による暗号化の役割を示す模式図。「そら」の公開鍵が正しいと確認できている例だよ。鍵と封筒はデータの記号。実際の計算や、Web接続の全手順は表していない。

出典資料に基づきEggplanetが作成した模式図

どうして、公開鍵から秘密鍵が分からないの?

二つの鍵は関係しているのに、片方を見せてもよい。不思議だね。大切なのは、関係があることと、すぐ計算して求められることは違う、という点だよ。公開鍵暗号は、正しい手がかりがあれば進めやすい一方、公開された情報だけから秘密を探すのは、とても大変になるような数学の問題を利用するんだ。使う問題は方式によって違うよ。

「絶対に、どんな計算機でも解けない」と言っているわけではない。計算の方法、鍵の大きさ、道具の進歩などが安全性に関係するんだ。鍵を短い好きな言葉にすれば同じ、という意味でもないよ。この記事では実際の暗号計算を省き、鍵の仕事を整理する。小さな例や自作の文字の置き換えを、そのまま本当の秘密を守る方法には使わないでね。

南京錠のたとえは、どこまで似ている?

そらさんが、開いた南京錠を配る場面を想像しよう。みなさんは、その錠で箱を閉じて送り、そらさんだけが持つ鍵で開ける。このたとえなら、閉じる道具を配っても、開ける道具まで配る必要がないと分かるね。ただし、実物の箱を使った暗号方式を説明しているのではないよ。公開鍵も秘密鍵も、コンピューターが扱うデータなんだ。

箱の絵では、誰の道具を使ったかに注目しよう。「送り主の公開鍵で暗号化すれば、受取人だけが読める」としてしまうと、鍵の持ち主が入れ替わっているね。この例で読む人をそらさんに限りたいなら、使うのはそらさんの組だよ。公開と秘密という名前を覚えるだけでなく、誰が何をする場面なのかを、いっしょに確かめることが大切なんだ。

電子署名は、中身を隠す仕事とは違う

今度は、みなさんが「このお知らせを出したよ」と確かめてもらいたい場合を考えよう。電子署名という方法では、みなさんが自分の秘密鍵と文章を使って、署名のデータを作る。受け取った人は、みなさんの公開鍵で、文章と署名が対応するか検証するよ。紙に名前を描いた画像を貼るのではなく、文章の内容と結び付いた計算の結果なんだ。

文章を途中で変えたのに、元の署名だけを付けた場合は、検証が通らなくなる。けれど、署名を付けるだけで文章が読めなくなるわけではないよ。二つ目の図では、公開鍵で行う仕事が「復号」ではなく「検証」になっているね。署名を、ただ秘密鍵で文章を暗号化することだと考えないでね。暗号化用と署名用では方式や鍵の使い道が異なり、同じ鍵を何にでも使えるわけではないんだ。

みなが文章と自分の秘密鍵から電子署名を作り、文章と署名を送る。そらはみなの公開鍵で検証する。文章を変えて元の署名を付けても検証は通らない。
署名では、送り主の秘密鍵と公開鍵を使う

公開鍵方式の電子署名の模式図。「みな」の公開鍵が正しいと確認できている例。署名だけでは本文を隠さないよ。ここでは鍵の組が担う仕事を比較しており、暗号化と署名に同じ鍵を兼用する指示ではない。

出典資料に基づきEggplanetが作成した模式図

その公開鍵は、本当にそらさんのもの?

もし別の人が、自分の公開鍵へ「そらの鍵」と名前を付けて渡したらどうなるかな。それを信じて暗号化すると、その別の人が持つ秘密鍵で読めるようになってしまう。署名の検証も、使った公開鍵が誰のものか分からなければ、名前だけを信用できないね。計算の仕組みに加えて、相手と鍵を正しく結び付ける仕事が必要なんだ。

Webでは、ドメイン名と公開鍵などの情報を結び付けた電子証明書が使われるよ。証明書には、発行した認証局の電子署名がある。例えば認証局のLet’s Encryptは、そのドメインを操作できることを課題への応答で確かめてから、証明書を発行する。この確認は、サイトの記事が全部正しいとか、お店が必ず誠実だとかを保証するものではない。何を確かめた証明かを分けよう。

Webの通信では、いくつもの道具を組み合わせる

HTTPSで使うTLSという仕組みは、公開鍵の技術だけで、全ての文章や画像を一つずつ直接暗号化するわけではないよ。接続の初めに相手を確かめたり、通信に使う鍵を用意したりし、その後のデータには共通鍵暗号を使う。大量のデータを扱う仕事と、最初に相手や鍵を確かめる仕事を分けて、組み合わせているんだ。

特にTLS 1.3などでは、証明書の公開鍵で共通鍵を包んで送る、という一通りの説明だけでは正確ではない。署名や、両側が情報を交換して鍵を導く方法など、役割の異なる計算を使うよ。最初の図は公開鍵による暗号化の基本例で、Web接続の全手順ではないんだ。名前が同じ「鍵」でも、どの段階で、何のために使われるかを区別してみよう。

どっとと考えよう:二つの問いを分けてみる

紙に「みなの公開鍵」「みなの秘密鍵」「そらの公開鍵」「そらの秘密鍵」の四枚のカードを描こう。まずは、みなさんからそらさんだけに読んでもらう手紙を送る。暗号化と復号の場面に、どのカードを置けばよいかな。次に、みなさんのお知らせへ署名を付け、そらさんが確かめる。今度は、どの人の組を使うかな。

最後に、公開鍵カードの名前が、誰かに書き換えられた場合も考えてみよう。文字が書いてあるだけで、本当にその人の鍵だと分かるだろうか。「読める人を限る」「内容と署名を確かめる」「鍵の持ち主を確かめる」は、つながっているけれど違う問いだね。カードは役割を学ぶ模型で、秘密の情報は書かないよ。データを届ける技術の中には、こうして別々の仕事をつなぐ工夫があるんだ。

ことばのメモ

暗号化・復号
文章などのデータを、鍵を使って読みにくい形へ変えることと、元へ戻すこと。
公開鍵・秘密鍵
公開して使ってもらうデータと、持ち主が秘密にして守るデータ。数学的な関係を持つ組だよ。
共通鍵暗号
暗号化と復号に、同じ秘密の鍵を使う方式。
電子署名
文章と秘密鍵から作るデータ。対応する公開鍵で、文章との対応を確かめられる。
電子証明書
ドメイン名などと公開鍵の関係を示し、発行者の電子署名が付いたデータ。
TLS
Webなどの通信を、暗号や相手を確かめる仕組みの組み合わせで守るための約束。

もとになった資料・もっと知りたい人へ

下記の資料をもとに、説明と考える問題を独自に構成しています。外部資料には英語のページもあります。どっとの画像は案内用のイラストで、観測写真や科学的な図ではありません。

分かりやすくするために、説明を短くしたり、たとえ話を使ったりしています。まちがいを見つけたらお問い合わせへお寄せください。制作方法は編集方針、いっしょに読むときのヒントは保護者・先生へで紹介しています。