SSLとは?
SSLとは?
SSLとサーバ証明書は、信頼のあるインターネット取引に不可欠なものです。
でも、「SSLとは何か?」、「自サイトにはどの証明書が適しているのか?」、「SSLを選択する場合のSSLプロバイダの比較は?」、「証明書のインストール手順は?」
といった疑問が当然出てくると思います。このページのSSL特集でSSLに関する疑問を全て解消しましょう!
なぜSSLが必要なのか?
SSLとは、Webサービスを暗号化する際に最も広く使われている技術ですね。
ブラウザのアドレスバーが「https://」からはじまるサイトはSSLによる暗号化が行われています。
WebサイトにSSLを導入することで、暗号化や認証の技術を使って、「盗聴」「なりすまし」 「改ざん」「否認」などを防止できるようになるため、ネットショップや、個人情報のやり取りには必須となっています。
SSL通信の仕組み
インターネットを利用しているとき、Webブラウザを利用してホームページを閲覧しますが、この際使っているのは、HTTPというプロトコルです。
Webサイトのアドレスは、「http://www.mecha-security.com」というように、 「http://」から始まりますが、これはHTTPというプロトコル(言葉のようなもの)を使って、そのWebサイト(サーバ)にアクセスすることを表してます。
しかし、このHTTPの通信は情報を保護するという仕組みが全く考えられていなかったため、ネットワークの経路上でちょっと覗き見をすればブラウザとWebサーバ間でやりとりしている内容は丸見えとなってしまいます。
ブラウザ上で名前とか住所、クレジットカードなどの番号を入力すると、簡単にそれらがネットワーク上で監視している第三者に漏れてしまうことになります。
これを解決するために、米NetScape社がSSL(Secure Sockets Layer)というセキュリティ機能付きのHTTPプロトコルを開発しました。
SSLを利用することで、WebサーバとクライアントPC(Webブラウザ)でやり取りされる情報は暗号化されますので、「盗聴」の危険性が非常に低くなります。
また、データをネットワーク上で「改ざん」されることや、偽のサイトが本物のサイトのように「なりすまし」をすることを防ぐための仕組みもあります。
盗聴や、改ざん、なりすましを防ぐための仕組みとして、「共通鍵暗号方式」「公開鍵暗号方式」、そして「PKI」という技術が利用されています。
共通鍵・公開鍵とは?
「共通鍵暗号化方式」
SSLでは、どのような暗号が使われているのか?
技術としては、「共通鍵暗号方式」と「公開鍵暗号方式」の2種類の技術を組み合わせて使っています。
ここで、「鍵」といっているのは、暗号化するときに使うデータのことです。
共通鍵暗号方式では、暗号化と復号化(元のデータに戻すこと)を行うために、同じ鍵を使います。だから文字通り「共通鍵」と言っています。
AさんとBさんは、それぞれ全く同じ合鍵を持っていて、お互いにそれを使って、暗号と復号をすることになります。
とても簡単な仕組みの反面、ちょっと考えると危険性があります。
その鍵を使えばAさんとBさんじゃなくても、データを復号化できてしまうということですね。
あくまでもインターネット経由で暗号化をするときは、ネットワークを使って相手に鍵を渡しますので、鍵が盗聴されたら、アウトです。
共通鍵暗号化方式は、このような危険性もあるんですが、メリットもあります。
暗号化と複合化に同じ鍵を使うため、処理が単純化し、負荷を軽く(高速に)することができるんですね。
だから、SSLでは実際のデータ部分の暗号化はこの共通鍵暗号化方式を使い、鍵を相手に渡す部分でもっと安全な方法をとります。
「公開鍵暗号化方式」
「共通鍵」を安全にやり取りするために利用されるのが、「公開鍵暗号方式」です。
公開鍵暗号方式では、まず最初にペアの鍵を作る必要があります。そのペアとは「公開鍵」と「秘密鍵」の組み合わせです。
ここで重要な点は、
「公開鍵で暗号化したデータは、秘密鍵でしか元に戻せない」
という仕組みがあります。
それを念頭において、AさんとBさんが公開鍵暗号方式を行った場面を考えて見ましょう。
1. Aさんは「公開鍵」と「秘密鍵」のペアを作ります。
2. AさんはBさんに公開鍵を渡し、 「Bさん、この公開鍵でデータを暗号化して送って」 とお願いをします。
3. Bさんは、Aさんの公開鍵を使ってデータを暗号化し、そのデータをAさんに渡します
4. 自分の公開鍵で暗号化されたデータを受け取ったAさんは、それとペアとなる秘密鍵でデータを元に戻します。
この例のポイントは、「2」でAさんはBさんに公開鍵を渡している点です。
共通鍵の場合、ここで盗聴されると、データを元に戻されてしまいますが、公開鍵が漏れても、結局秘密鍵がわからないとデータは元に戻せないので安心です。
だから公開してもいい鍵ということで「公開鍵」と言ってるんです。
このように安全な公開鍵暗号方式ですが、デメリットとしては、暗号と復号化の処理に時間がかかることが挙げられます。
だから、SSLでは、この公開鍵暗号方式を「共通鍵」を渡すことだけに使います。
SSLでは、公開鍵暗号方式を使って、安全にブラウザとWebサーバの間で「共通鍵」を交換して、後は、高速な共通鍵暗号方式を行うというわけです。
電子署名とは?
SSL: 電子署名(デジタル署名)の仕組み
公開鍵暗号方式で盗聴が防げることがわかりましたが、本当にそのデータは信用できるものなのでしょうか?
というのは、ネットワーク経由で届いている以上、通信途中でデータの内容が、書き換えられていないという保証はないからです。
つまり、「改ざん」されている危険があります。
また、インターネットで買い物などをするときに、実際には注文したのに、後で「俺は注文なんかしてない!」と、「否認」する場合もあり得ます。
これを防ぐためにはインターネット上でしっかりと本人確認をする必要があります。
このようなデータの「改ざん」や「否認」を防ぐための仕組みが、「電子署名(Digital Signature)」という技術です。
電子署名は、実は前回説明した公開鍵暗号方式を応用すると簡単にできます。
公開鍵暗号方式では、
「公開鍵で暗号化したデータは秘密鍵でのみ復号化できる」
という仕組みでしたね。
実はこの逆も同じで、
「秘密鍵で暗号化したデータは公開鍵でのみ復号化できる」
という仕組みも持っています。
例えば、Aさんが自分の秘密鍵で暗号化したデータをBさんに送るとします。
Bさんは、Aさんの公開鍵を使ってこのデータを復号化してみると、ちゃんと復号化できます。
ここでわかることは、公開鍵で復号化できるということは、このデータは明らかにAさんの秘密鍵で暗号化されたものであり、データ自体も書き換えられていないという事実です。
ですので、秘密鍵で暗号化するという行為は、自分が署名したデータですよ、と証明する手段となります。
でも、この秘密鍵で暗号化したデータは、公開されている「公開鍵」で復号化できてしまうので、そのままは相手には渡せません。
だから、またAさんとBさんでの例えとなりますが、
1. Aさんが自分の秘密鍵で暗号化する(電子署名)
2. Aさんは、Bさんの公開鍵を使って、その電子署名データを暗号化して送る
3. 受け取ったBさんは、まず自分の秘密鍵で暗号化されたデータを復号化して、中の電子署名を取り出す
4. Bさんは、電子署名がAさんのものであることを確認するため、Aさんの公開鍵で復号化をする
という流れになります。
ちょっと複雑かもしれませんが、こういった技術を使って、SSLではデータの「改ざん」や本人であることを偽る「否認」を防ぐことができるわけです。
PKIとは?
電子署名(デジタル署名)の仕組み
公開鍵暗号方式というのは、SSLに必要不可欠なものなのですが、そもそも、データの暗号化や認証に利用する「公開鍵」自体の信用をどうやって証明すれば良いでしょうか?
例えば、Webサーバが暗号化通信のために、ブラウザに対して「公開鍵」を送ってきたとします。
でも、このWebサーバ自身が悪いやつだったり、信用あるWebサイトに「なりすまし」していた場合、それをどうやって見分ければいいのでしょうか?
その際に必要となるのが、公開鍵が正当なものであると証明してくれる「デジタル証明書(電子証明書)」です。
「デジタル証明書」は、名前の通り、実世界での「身分証明書」と同じで、それを持っている人(Webサーバ)は、信用があると見なすことができます。
実世界での身分証明書は、公共の機関が発行するのが基本ですが、インターネットでは、民間の「認証局(Certificate Authority)」と呼ばれる機関が発行します。
日本では、ベリサイン、ジオトラスト、コモド、ビートラステッドが有名です。
このように、証明書や認証局を利用して、安全な通信を行うための仕組みを 「PKI(Public Key Infrastructure)」と呼びます。
日本語では、「公開鍵暗号方式を利用したセキュリティインフラ」と訳したりします。わかりづらいですね。
民間の業者が実は悪いやつだったら・・・ということも考えられなくもないですが、それを言い出したらそもそもPKIの仕組み自体が成り立たなくなってしまうので、認証局を運営する機関がある程度社会的に信用できるかどうかも重要となります。