SSLサイト安全性確保の仕組み


SSL通信とは


URLがhttps:// で始まるサイトはSSL通信を行います。
SSL通信とは、データを暗号化して送受信する方法です。
SSL通信の仕組みについて解説します

暗号化とは、データ(平文と呼ばれる)をある鍵を使って暗号文に変換することです。
得られた暗号文は、ランダムなデータでありそのままでは、意味のあるデータとして扱えません。
暗号文を元のデータ(平文)に戻すことを復号化と言いますが、この場合も鍵を使って復号化します。

暗号化と復号化に同じ鍵を使う方法を共通鍵方式、異なった鍵を使う方法を公開鍵方式と言います。

暗号化:共通鍵方式

秘密鍵方式は、暗号化と復号化で同じ鍵を使います。
暗号化に使用した鍵が盗まれると、鍵を入手した者によって簡単に復号化されてしまいます。



この方式では、暗号化する側と複号する側で同じ鍵を持つ必要があります。
両者で同じ鍵を持つにはどのようにすればいいのでしょうか?
通信で送るわけにはいきません。
そもそも暗号化をする理由は、通信経路の盗聴からデータを守るためです。
鍵を通信で送ってしまっては、盗聴者に鍵を盗まれる可能性があります。
鍵の手渡しや郵送等も考えられますが現実的ではありません。
これらの問題を解決するために次に解説する公開鍵方式が、考え出されました。

暗号化:公開鍵方式

暗号化の鍵と複合化の鍵が異なります。
暗号化した鍵で、復号化することはできません。
復合化には、暗号化用鍵と対になった複合化用の鍵が必要です。



もう少し分かりやすく具体例を挙げて解説します。
今、田中さんから鈴木さんにデータを送る場合を考えます

  1. 田中さんが、鈴木さんに公開鍵を要求



  2. 田中さんは、送信データを公開鍵-Aで暗号化



  3. 鈴木さんは受信したデータを秘密鍵-Bで復号化

公開鍵方式は、複雑なため処理が重くなります。
実際の運用では、共通鍵を公開鍵方式で送信し、データは共通鍵方式で暗号化し送信します。

公開鍵方式の問題点

先ほどの例では、田中さんと鈴木さんは直接接続されていることを前提としています。
しかし、攻撃者は田中さんと鈴木さんの間に割り込んで、それぞれに、なりすます可能性があります。



このような接続が確立されると、攻撃者は全てのデータを盗むことが可能です。

この攻撃を防ぐには、田中さんが受け取った公開鍵が、鈴木さんから送信されたものであることを確認できなければなりません。

電子署名


話はちょっと変わって、公開鍵/秘密鍵を使った電子署名について解説します。
あるデータは間違いなく佐藤さんが作成したことを証明する方法として、電子署名の方法があります。
電子署名とは、署名したいデータを佐藤さんの秘密鍵で暗号化し、そのデータに添付します。
署名されたデータに佐藤さんが署名したかどうかは、佐藤さんの公開鍵で署名を復号化することで判断できます。
佐藤さんの公開鍵で復号化できるのであれば、署名は佐藤さんしか持っていない秘密鍵で暗号化されていると判断できるのです。
つまり、佐藤さんが署名したことを保証できるのです。
(佐藤さんが秘密鍵を盗まれていたら別ですが)

SSL通信とは公開鍵と秘密鍵の使われ方が逆になっています。

公開鍵 秘密鍵
SSL 暗号化 復号化 公開鍵で暗号化し秘密鍵で復号化
電子署名 復号化 暗号化 秘密鍵で暗号化し公開鍵で復号化

公開鍵方式の問題点の解決へ向けて


元に戻って、公開鍵方式の問題点であった成りすましへの対抗方法を考えます。
例の場合、鈴木さんが公開鍵を作成したことを確認できれば成りすましに対抗できます。
そこで、公開鍵に鈴木さんの電子署名を添付すれば問題解決のように考えられます。
しかし、電子署名を復号化する鈴木さんの公開鍵は、どのように入手すればいいのでしょうか?
通信で受け取る事を考えると、振り出しに戻って、成りすましに対抗できません。
実は、通信で鍵の授受を考えていたのでは、解決の出来ない問題なのです。
鈴木さんが署名した場合、鈴木さんの公開鍵が必要です。
しかし、鈴木さんの公開鍵は、通信以外の手段で田中さんに渡す必要があります。
手渡し?郵送?さらに元へ戻ってしまいました。

第3の信頼できる機関に署名を依頼し、署名した第3の機関の公開鍵を使用することでこの問題を解決します。
この場合でも、第3機関の公開鍵を何らかの方法で入手する必要があります。
前述のように、入手の手段に通信は使えません。
どのように入手するのか?
実は、皆さんは、既に第3の信頼できる機関の公開鍵を入手済みなのです。
あなたの使っているブラウザ(IE、Mozilla、Opera等々)には、あらかじめ公開鍵が登録されているのです。

IEの場合次のようにすれば確認できます。
[ブラウザメニューのツール]→[インターネットオプション]→[コンテンツタブ]→[証明書→[信頼されたルート証明機関]



発行者欄に表示されている機関が、今回の説明で出てきた、「信頼できる第3の機関」に該当します。
この「信頼できる第3の機関」を証明機関(CA:Certificate Authority)といいます。

以上の事柄を踏まえて、田中さんが鈴木さんへ安全にデータを送信する方法を解説します。

  1. SSL通信の準備として鈴木さんは、自分の公開鍵をCAに依頼し署名してもらいます。
    得れた署名付公開鍵を証明書といいます。



  2. 田中さんが鈴木さんの証明書を要求。



  3. 田中さんは、鈴木さんから受理した証明書が信頼できるかどうかCAの公開鍵を使って確認する。
    確認がOKであれば田中さんは、鈴木さんの公開鍵を抜き出す。

  4. 田中さんは鈴木さんの公開鍵を使って、共通鍵を暗号化し鈴木さんへ送信する。



  5. この時点で両者が共通鍵を持つ。
    以降この共通鍵でデータを暗号化し送受信を行う。