SSLのやりとりは複雑だ。事前知識なしにすべてをいきなり理解しようとすると,太刀打ちできない。そこで,SSLの実際のやりとりを見る前に,Lesson2としてSSLのやりとりの概要をざっとつかもう。

暗号通信で使う「鍵」を作る

 SSLは,「共通鍵暗号」と「公開鍵暗号」という二つの暗号方式を組み合わせて利用している。実は,SSLの概要をつかむにあたって,これらの暗号方式の知識が欠かせない。最初に押えておこう(図2-1)。

図2-1●SSLでは二つの暗号方式を使う
図2-1●SSLでは二つの暗号方式を使う
SSLは,共通鍵暗号方式と公開鍵暗号方式のそれぞれのメリットを組み合わせて実現する。
[画像のクリックで拡大表示]

 「共通鍵暗号」は,暗号化と復号に同じ(共通鍵)を使う暗号方式である。特徴は,暗号化と復号の処理が軽いこと。そのためSSLでは,実際にアプリケーション同士でやりとりするデータの暗号化/復号に,この共通鍵暗号を利用する。

 ただ,共通鍵暗号を使うには,送信側と受信側の両者が,あらかじめ誰にも知られていない同じ鍵を持っていなければいけない。だが,あらかじめ通信相手を特定していないインターネットの通信で,両者が通信前に同じ鍵を持つことは不可能だ。とはいえ,鍵をそのままインターネットで送ると,肝心の鍵が他人に盗まれる恐れがあるので危険である。

 そこで登場するのが,もう一つの暗号方式である「公開鍵暗号」だ。公開鍵暗号は,公開鍵と秘密鍵と呼ばれるペアの鍵を使う方式である。特徴は,「片方の鍵で暗号化したデータは,ペアとなっているもう片方の鍵でしか復号できない」ということ。つまり,片方の鍵をインターネットで公開しても,もう片方の鍵を秘密にしておけば,目的の相手(公開鍵のペアとなっている秘密鍵を持つ相手)だけに安全にデータを送れるわけだ。

公開鍵暗号で共通鍵を安全に送る

 共通鍵暗号と公開鍵暗号を組み合わせた通信のやりとりの流れを見てみよう。これこそがSSL通信の概要である(図2-2)。

図2-2●SSL通信の概要
図2-2●SSL通信の概要
公開鍵暗号方式を使って「暗号通信で使う共通鍵」を安全に共有し,共有した共通鍵を使って暗号通信をする。
[画像のクリックで拡大表示]

 クライアントがサーバーにSSL通信の要求を送ると,サーバーは,自身の公開鍵が入った証明書をクライアントに返信する。クライアントは,入手したサーバーの公開鍵を使って「アプリケーション同士の暗号通信に使う共通鍵」を暗号化してサーバーに送る

 この暗号化した共通鍵を正しく復号できるのは,暗号化に使った公開鍵のペアとなっている秘密鍵を持つ通信相手のサーバーだけである。このため,ここまでのやりとりが万一盗聴されたとしても,共通鍵が漏えいする心配はない。サーバーは秘密鍵を使ってクライアントから送られてきた暗号データを復号して,「暗号通信に使う共通鍵」を取り出す。この時点で両者は,誰にも知られずに共通鍵を持てたわけだ。

 こうして共有した共通鍵を使って,クライアントとサーバーは,本来の目的であるアプリケーション間でやりとりするデータの暗号化/復号を,高速に処理する。

 SSLではこのようにして,公開鍵暗号を使って暗号化/復号に使う鍵を他人に知られることなく安全に共有し,共有した共通鍵を使って高速にデータを暗号化/復号する。SSLは,二つの暗号方式のメリットをうまく活用しているのである。