サルでもわかる公開鍵暗号

ご存知のようにインターネットで行きかうものは全てデジタルデータである。デジタルデータとは本質的には一群の数字であって、匂いも味も何もなく所有したり強奪できるものではない。「37は代々わが家に伝わる家宝であって」「まったりとした結構なお味の189でございますこと」「この982は確か俺が昔落としたものだ」こういう類のことを言う奴はいない。

仮に、俺が7346の所有権を主張したとしても、それをあなたが使うことを差し止めることは難しい。「あなたは私の大事な7346を無断で使用しています。すぐにやめないと法的な手段を取る可能性があります」とメールを出したしよう。驚くべきことに、これを全文引用して「バーカ」と付け加えるだけで、さらにもう一度7346を使用されてしまうのだ。つまり、この数字は自分のものだという言明そのものに、どうしても問題の数字が含まれてしまい、それがそのままコピー元になってしまうのである。

それでは聞くが、あなたのブラウザの下の方に鍵のマークがあってこの鍵が閉じたり開いたりするのはどういうことだ?閉じている場合はクレジットカード番号を打ってもいいことになっている、あの鍵だ。サーバが何らかの数字を送ってきたら、ブラウザが自分の持っている数字と照合して、合格と判定するのかもしれない。だが、ブラウザの中に問題の数字が隠されていたとすると、クラッカーがその数字を取り出して、偽のサーバをでっちあげるのは簡単なはずだ。つまり、ブラウザはある特定の数字を見ると、「おおこれはおそれおおくも、ベリサイン社の証明書だ」と恐縮してあの鍵を閉じてしまうのである。この鍵を閉じるための手続き(SSLプロトコル)も公開されていて、そういうことをするプログラムも*オープンソース*になっているのに、なんと危いことだろう。

ところが、ここには魔法のような仕掛けがあり、鑑定することは簡単だが、偽造することはできない不思議な数字が存在するのである。これを理解するには、かけ算ができて割り算ができない人々を想像すればよい。「俺は駅の伝言板に待ち合わせの時間を書いておく。偽物が出るといけないから、その後に、5を掛けると待ち合わせ時刻になる数字を書いておく。この数字がついていれば本物だ」こう友達に言って、610と122を書いておく。友達は5×122=610で確認をとり、俺が本当に6時10分に来ることがわかる。偽物がこれを630に書きかえたとしよう。隣りに正しい数字を書くには630÷5を計算しなければならないが、これはこの世界では不可能なことだ。

注意深い人なら今の説明で、「おい、ちょっと待てよ。どうして『俺』は610÷5が計算できたんだ。その世界じゃ割り算ができないはずだろ」と言うだろう。俺は割り算はしていない。 610×0.2を計算したのだ。つまり、5の逆数である0.2を持っていることが本人の証明になるのだ。これがSSLで使われている公開鍵暗号系というやつのしくみである。

  1. 掛けて1になる一組の数字を用意する(5と0.2)
  2. 0.2を秘密鍵と呼び大事にしまっておく
  3. 5を公開鍵と呼び、みんなに「これが俺のハンコだ」と知らせておく
  4. ハンコを押したい数字に、0.2をかけた数字を書いておく(デジタル証明書)
  5. 友達はその数字に5をかけてそれが正しいことを確認する

実際には割り算は誰でもできるので、もうちょっと別の計算を使うのだが、これと同じことをして上の122に相当する数字がついていることを、 610という数字に5というハンコが押してあることと同じに考える。これで数字にハンコが押せるようになったので、今度は5という数字にハンコを押すこともできる。これが印鑑証明と同じ役割を果たす。ベリサインという会社に自分のハンコにする数字と何がしかのお金を持っていき、ハンコを押してくれと言うと、別の数字をもらえてこれが印鑑証明になる。印鑑証明のついたハンコが押してある数字がやってくるとブラウザの鍵が閉まるという仕組みである。

つまり、上記の例で言うと5という数字(公開鍵)は世界中の全てのブラウザの中にあるが、 0.2という数字(秘密鍵)はベリサイン社の金庫にしかない。これが盗まれると大変なことになるので、このハンコはめったに使わない。このハンコは別のハンコの印鑑証明を作るためだけに使用し、そのハンコもやはりめったに使わない。そのハンコも別のハンコの印鑑証明を作るためだけに使用して、そのハンコを使っている。このハンコで他の会社にハンコに印鑑証明を発行している。それがベリサインの商売である。

それで、先日ベリサインがこの印鑑証明を間違って発行してしまったそうだ。まずいことにその印鑑証明には「マイクロソフト」と書いてある。クラッカーが「マイクロソフト」の発行した印鑑証明つきのハンコで自由に遊べる事態となったのである。長年のクラッカーの夢だったら、「WEBページを見るだけで感染するウイルス」がもうちょっとで実現する。残念ながら、この印鑑証明では一回だけはブラウザに警告が出てしまう。「マイクロソフトの作ったプログラムをインストールしますか」と聞かれて、ユーザがキャンセルすれば、ウイルスは感染しない。だが、これまで大幅な手間を必要としたネットからの感染行為が、オペレーション一回だけになったのである。

オフィシャルな発表では、被害はこれだけだが、何か裏があるような気もする。とりあえず、このニセ印鑑証明が発行されたのは1月末で、既にこのハンコを押したウイルスが出回っている可能性はあるのだが、 2月中にこのハンコを承認してしまった人のことは書いてない。つまり、この警告を読んだ時点で既にこれを正規のハンコと見なせとブラウザに教えちゃってる人がいるかもしれないのだが、そのことが書いてないことが怪しい。たとえ嘘がないとしても(理論的には正確でも)、ウイルスを作る奴は悪知恵が働く。友達から「例の件だけど」と送られた(フリをする)メールにのっかるワームがあったけど、こんな印鑑証明があったら、もっと効果的なトリックができそうなものだ。あるいは別の穴と合わせ技で一本取られるかもな。

だが、これは随分下っぱのハンコだったからまだこれですんでいる。もうちょっと上のハンコが盗まれたら大変である。確認なしにインストールできる便利なウイルスを作ることができる。ハンコと言ってもたかが数字であり、暗記するのは難しくてもフロッピーに楽勝で入る桁数しかない。まして、現代はナップスターという便利なものがあり、一度盗まれたら世界中に広まり誰にも回収できない。

数字にハンコが押せることは非常にありがたい。信頼できる印鑑証明を発行してくれる会社も必要だ。だが、数字は盗まれる可能性があることに改めて気がつかされた。承認の根っこが複数あってもうちょっと分散された体系が必要だとマーフィーさんも言うだろう。