初めまして。Fusicで副社長をしている浜崎です。
社内全体が「副社長も書けよ」的な雰囲気になり、なんとなく書くことになりました。
納富と同様、とても長いこと技術から離れているので、さて何を書こうかと悩んだわけですが、少しさかのぼって、学生時代の社会インフラに関する研究の一環として取り組んでいた「暗号」について話したいと思います。当時に暗号を専門とする先生から得た知識なのですが、公開鍵暗号に関して、誤解されて広まっている情報についてです。
公開鍵暗号とは?
さて本題に入る前に、公開鍵暗号とはなんやねん?ということについて書いておきます。
そもそも暗号というのは、ある情報を秘匿的にやりとりするための手段なのですが、公開鍵暗号もその手段の1つです。公開鍵暗号は、暗号化のために用いる「公開鍵」と復号化のために用いる「秘密鍵」という異なる別の鍵を用いることで成り立つ暗号方式のことです。これは1976年にデフィーとヘルマンによって発表されました。
それまで暗号といえば、共通鍵暗号という方式が主流でした。これは、暗号化と復号化に同じ「共通鍵」を用いることで成り立つ暗号方式です。例えばお互い秘匿情報をやりとりする場合は、事前に「共通鍵」を共有しておき、その鍵で暗号化・復号化を行うことで秘匿情報のやりとりを成り立たせています。この概念は一般社会でも広く応用されている考え方で、例えば野球やバレーボールにおけるブロックサインなんかも広義ではその枠組みに入るんではないかと思います。
ただ、この共通鍵暗号には問題がありました。それは前述した、事前に「共通鍵」を共有しておくことをどうやってするか?という配送問題です。共通鍵が漏れてしまった場合、それで暗号化されたものを第三者が復号化出来てしまうわけですから、当然共通鍵そのものも秘密にやりとりしなければなりません。じゃあまたそれを秘密に通信するために別の鍵を作って、またそれを秘密に・・なんてことをしてても一向に解決はしないわけです。また、例えば100人の人と別個に秘匿通信をする場合、管理すべき共通鍵は100通りとなり、それも煩雑です。
そのような問題を解決したのが公開鍵暗号です。これは鍵の配送問題や管理の煩雑さを解決する手段としてとても有効なものです。フローは以下の通りです。
1. 情報の受信者(以下A)は、暗号化用の鍵(公開鍵、以下P)と復号化用の鍵(秘密鍵、以下S)を作成する。
2. 続いてAは、Pのみを広く公開する。SはA自身が厳重に管理する。
3. Aに対して秘密の情報を送りたい送信者(以下B)は、公開されているPを用いて、情報を暗号化してAに送信する。
4. 暗号化された情報を受け取ったAは、Sを用いて復号化する。
この方法を用いることで、AさんはPを広く公開すればよいだけなので、配送問題がクリアされます。
この公開鍵暗号には、ElGamal暗号や楕円曲線暗号等いくつかの方式がありますが、最もメジャーな方式は、1977年、つまり公開鍵暗号が発表された翌年に、Rivest、Shamir、Adlemanにより発表されたRSA暗号でしょう。これは素因数分解の困難さを利用したものなのですが、SSL通信等で用いられている方式です。ただこのRSA暗号が、本日の標題である誤解を引き起こしている要因になっているのです。
公開鍵暗号の誤解
その誤解は以下のようなものです。
秘密鍵Sで暗号化したものは公開鍵Pで復号化できる
これってよくよく考えると暗号化の意味がない(だって誰でも復号できるんで)わけなんですが、この記述がなされたものが多く出回っているのは事実です。例えば日本ベリサインの公開鍵暗号について解説したページでも同様の記載が見受けられます。
このような誤解を招いた理由は、前述した公開鍵暗号方式の1つであるRSA暗号がそのような性質を持つためなのです。つまり、秘密鍵Sで暗号化したものを公開鍵Pで復号化する対称性の性質を持っているんですね。公開鍵暗号を代表する最もメジャーな方式がそのような性質を持つため、公開鍵暗号自体がそのような性質を持つと勘違いしてしまっているということです。実際に他の方式ではそのような性質を持たないものもありますんで、公開鍵暗号の定義としては問題ありかなと思います。
とまぁ、つらつら書きましたが、私は暗号の専門外なのでうかつなことが書けないなぁ〜と思いながら最後まで来てしまいました。でも昔学んでいたことをほじくり返してみるのもいいですね。よい機会でした。では、みなさん、よいお年を!