・暗号方式には,共通鍵暗号方式と公開鍵暗号方式の二つしかない。
・共通鍵暗号では,あらかじめ特定のグループで一つの鍵(共通鍵)を共有しておき,
 この鍵でデータを暗号化/復号する。
・公開鍵暗号は,公開鍵と秘密鍵のペアがあり,
 だれでも入手できる公開鍵で暗号化したデータは,秘密鍵でしか復号できない。

 ネットワークと暗号は切っても切れない関係にある。ネットワークの世界では,データを第三者が簡単に“のぞき見”できてしまうからだ。のぞき見だけでなく,内容をこっそりと書き換えることもできる。こうした不正に対抗するためには,暗号を使うしかないのである。

基本となる暗号方式はたった二つ

 普段ネットワークを利用するとき,「今暗号を使っている」と実感できる機会は少ないかもしれない。しかし,実はいろいろな場面で暗号は利用されている。

 身近な例としては,Webサイトへのアクセスがある。Webサイトで買い物をしたり,会員登録をするとき,個人情報やクレジット・カード番号などが盗聴されないように,SSLという暗号プロトコルを使って送受信データは保護される。

 このほか,ネットワーク経由で安全にサーバーへログインするために利用したり,ネットワーク上を流れるIPパケットを暗号化して安全な通信路を確保するときなど,大切な情報をネットワークで扱う場面では必ずといっていいほど,暗号が利用される。

 このほかにも,ネットワークで使う暗号プロトコルはたくさんある。しかし,基本となる暗号方式はたった二つしかない。「共通鍵暗号方式」と「公開鍵暗号方式」である。数多くある暗号プロトコルも,これら二つの方式の組み合わせに過ぎないのだ。したがって,二つの暗号方式と,そこで使う3種類の暗号鍵の役割さえ理解すれば暗号の基本はマスターできる。

図 暗号方式は二つ,これらに使う鍵は3種類しかない

一つの暗号鍵を全員で共有

 まずは共通鍵暗号方式から見ていこう。共通鍵暗号は,一つの暗号鍵を決め,秘密を共有したいユーザー同士であらかじめこの暗号鍵を共有する(図の上側[拡大表示])。この暗号鍵のことを「共通鍵」と呼ぶ。グループだけで通用する“合い言葉”を決めておくのと同じと考えればよい。

 暗号データを送りたいユーザーは,共通鍵でデータを暗号化し,相手に送る。暗号データを受け取ったユーザーは,同じ共通鍵を使ってデータを復号する。これが共通鍵暗号である。

 もう少しくわしく暗号化の手順を見ておこう。共通鍵暗号は,元のデータをバラバラにして並べ替えたり,共通鍵と論理演算したりすることでデータを暗号化する。暗号データを受け取った相手もこの暗号化の手順(アルゴリズム)がわかっているので,共通鍵を持っていれば暗号化と逆の手順をとることでデータを復元できるのである。

 ただ共通鍵暗号では,「いかに安全に共通鍵を相手に渡すか」という点が問題になる。電子メールに添付して共通鍵を送るのはナンセンスだ。電子メールの送受信は暗号化されないから,共通鍵が簡単に他人に盗まれてしまい,暗号化する意味がなくなるからだ。直接相手に手渡しする,電話で伝えるなど,ほかの手段をとるしかない。

ペアになった二つの鍵を使う

 次に公開鍵暗号方式を見てみよう(図の下側[拡大表示])。公開鍵暗号の最大の特徴は,対になった二つの鍵を利用することだ。この二つの鍵を「公開鍵」と「秘密鍵」と呼ぶ。このペアには,公開鍵で暗号化したデータは秘密鍵でしか復号できず,逆に秘密鍵で暗号化したデータは公開鍵でしか復号できない,という特徴がある。

 通常,公開鍵はその名が示すように一般に公開する。一方の秘密鍵は,自分だけの秘密にしておく。そして,あるユーザーから自分にデータを送ってもらうときには,送り手のユーザーが公開鍵を使ってデータを暗号化し,受信したユーザーは自分の秘密鍵でデータを復号する。こうすれば,不特定多数のユーザーからのデータが暗号化でき,受信データは自分しか復号できなくなる

実際には2方式の組み合わせ

 公開鍵暗号は上記のような性質を持っているので,共通鍵暗号でネックとなっていた鍵交換の問題で悩まされることはない。つまり,お互いが離れていて,面識がなくても暗号で通信ができるのである。暗号データをやりとりしたい場合には,お互いに正々堂々と電子メールなどで相手に公開鍵を渡せばよい。

 しかし,残念なことに,公開鍵暗号は共通鍵暗号と比べて,暗号処理のために必要な演算量が多い。同等の暗号強度なら,演算時間は,およそ数百~数千倍以上も公開鍵暗号の方がかかると言われている。

 そこで実際の暗号プロトコルは,公開鍵暗号を使って「共通鍵」をまず相手に渡し,この共通鍵を使って実際のデータを暗号化してやりとりするものが多い。

斉藤 栄太郎