デジタル証明書と HTTPS を考える

2013年5月13日

「HTTPS」やデジタル証明書についてほんとうに真剣に論じようとすると、暗号学について話さなければならなくなってしまいますが、どうか心配しないでください。あなたを苦しめるつもりはありません。ただし、強力な暗号化というのは、現時点で私たちが持っている強力なセキュリティとプライバシーを保証する最大の要素であることは理解しておいてください。

https-title

これまでのところほとんどのブラウザーでは、小さな緑色またはグレーの南京錠を探すようにと言われてきました。この南京錠は、ハイパーテキスト転送プロトコルのセキュアなバージョン(HTTPS)が使われていることを示しています。私たちは幾度となく、「HTTPS」はセキュリティを意味しており、Web 上で機密情報を入力するとき(特に支払いデータ入力時やオンラインバンキングのログイン時)にはブラウザーのバーに「HTTPS」と表示されていることを確かめるようにと警告されてきましたが、果たして HTTPSとは何でしょうか

HTTPS とは「Hypertext Transfer Protocol Secure」の略です。これはハイパーテキスト転送プロトコルの安全性の高いバージョンで、World Wide Web でデータを移動させる際の基本となっています。原則的には、HTTPS (標準の「HTTP」ではなく)で Web サイトに接続すると、アカウントログイン情報であれ、ブログへのコメント投稿であれ、駐車違反の罰金の支払い情報であれ、そのサイトとやりとりするすべてのデータは暗号化されたTransport Layer Security(TLS)か、その前身であるSecure Sockets Layer(SSL)を介して送信されます。

確かに、HTTPS とは暗号化を意味しており、暗号化とはセキュリティを意味しています。しかし暗号化は別にして、自分が他の人やサービスとオンラインで通信するときに、その相手が自分の想定している人やサービスであることをどうやって知ることできるのでしょうか。自分が見ているサイトやログインしようとしているサイトが手の込んだ偽物ではないとどのように確信することができるのだろうか、と考えたこともあるでしょう。たとえば、あなたがカスペルスキーからアンチウイルス製品を購入しているところだとしましょう。あなたの支払い情報が、ルーマニアの薄暗い部屋に潜む怪しげなハッカーではなく、間違いなくカスペルスキーに届いていることをどうやって確かめられるでしょうか。さらに言えば、あなたが送信するデータをどこかの知らない組織が盗み取っていないとどうしたらわかるのでしょうか。ここで役に立つのが証明書です。

どこかの古いサイトにアクセスして、アドレスバーに「HTTPS」と入力してみてください。そのサイトに有効な証明書があれば、そのサイトをホストしているサーバーがブラウザー(信頼できる証明書発行者のリストが組み込まれているもの)に証明書を表示します。特に変わったことが起きるわけではありません。簡単に言えば証明書とは、あるサイトやサービスが本物であることを証明するものです。ブラウザーによっては、小さな南京錠(またはそれに相当するもの)をクリックして、証明書と発行者についての情報を確認することもできます。しかし有効な証明書がないサイトの「HTTPS」バージョンにアクセスしようとすると、次のような SSL の警告が表示されます。

badsslcert

この警告はブラウザーが、あなたが接続しようとしているサイトのサーバーの識別情報を確認できないことを示すものです。このような証明書システムが重要な理由は、サイトやサービスが本物であることを確認するためだとおわかりいただけたことでしょう。うまく想像できないようであれば、中間者攻撃の記事をお読みください。

これで HTTPS と証明書の概要をつかめたことと思いますが、この 2 つがどう関連するのかと疑問に感じているかもしれません。簡単に言うと、HTTPS によってあなたが送信する情報がその過程で安全に暗号化されます。そしてデジタル証明書は、送信したデータの行く先が、確かに意図した宛先であることを保証します。

証明書がどのように機能するか、またどんな役割を持っているかをこれまで説明してきましたが、証明書とは実体のないアイデアなどではありません。それでは証明書とは何でしょうか。デジタル証明書とは電子的な声明文であり、特有のアルゴリズムを持つデジタル署名、証明書が発行された Web サイトやサービスの識別情報、発行者自体の識別情報、そして証明書が発行された日といつまで有効かを示す期限の情報が含まれています。アルゴリズムを持つデジタル署名は、デジタル証明書の特に重要な部分です。署名は証明書の一部であり、あなたが通信しているのはあなたが意図している相手であって間違いはないこと、またその通信が暗号化されていることを保証します。

このパズルの中で説明が必要な最後のピースは、証明書の発行者です。多くの組織がデジタル証明書の販売や発行を行っており、証明書認証局と呼ばれています。すぐに思いつくのは、GoDaddy、VeriSign、Entrust の 3 つの認証局です。やろうと思えば、私が自分で証明書認証局と名乗って、証明書の権利をあちこちに販売することもできます。問題は私が証明書を発行しても誰も信用せず、誰も買ってくれないということです。これこそ、証明書認証局が重要である理由です。認証局は信頼されていなければ意味がありません。

このような信頼に基づくシステムが機能するために、「ルート証明書」というリストがあります。ほとんどのブラウザーでルート証明書は既定で信頼されています。また、他の証明書認証局にその信頼性を拡張できる力を持っています。たとえば、Larry という名の人物が証明書を発行し、Larry はルート証明書認証局であるとしましょう。あなたのブラウザーは Larry が発行した証明書であればすべて信頼します。また、Larry が正しいと保証する他の証明書もすべて信頼します。証明書認証局は数多くあり、私たちはそれらの正当性を確かめるためにこの方法を使っているのです。36 ほどの信頼された認証局があり、それらに他のどの証明書認証局が信頼に値するかを判断してもらい、万事オーケー、ということでしょうか。いいえ、必ずしもそうではないようです。

現代のデジタル証明書システムは複雑で、入り組んでいて、議論の余地があるということを知っておいてください。デジタル証明書とそれに含まれる署名、そしてその証明書の正当性を保証する認証局は、オンラインでの認証と信用の要となるものです。なんとも皮肉なことに、現在の証明書認証局とデジタル署名のシステムは救いがたいほど崩壊しており、はなはだ不適切な状態であることは業界ではよく知られています。しかし私たちはそのシステムを頼りに、日々支払いをしたり、他の人と通信したりしています。

DigiNotar や Comodo のような大規模な証明書認証局の事件や、1 つならず 2 つの偽造証明書が Stuxnet ウイルスに付与されていたという事実から考えると、新しいシステムが必要であることは明白です。セキュリティ研究者の Moxie Marlinspike 氏は、自身の「Convergence SSL」システムがこの証明書問題のソリューションとなると述べています。Convergence は 2 年ほど前に Black Hat Security カンファレンスで発表され、総じて前向きに受け入れられたものの、私たちはいまだに不完全な証明書システムに依存しています。私たちはオンラインで通信をしたり支払いをしたりするときに、バックグラウンドで動作する証明書について楽観的に考えすぎなのかもしれません。証明書認証局の事件について耳にするたびに、私たちはこの問題に不満の声を上げて嘆き、結局は何も改善することなく進んでいきます。

では、どうしたらいいのでしょうか。支払い情報やログイン認証情報、またメールメッセージであっても、機密データを入力するときには、「HTTPS」を使うことです。さらに、ブラウザーバーに表示されている南京錠やそれに相当するものをクリックして、証明書自体を確認します。技術に詳しい人であれば、セキュリティのニュースに気を配り、証明書認証局が攻撃に遭ったら、ブラウザー設定からその認証局に対する信頼を手動で無効にできます。信頼を取り消すということは、その認証局が発行する、もしくは正当性を保証する証明書をブラウザーが今後は信頼しなくなるということです。証明書認証局の事件が起きたら、すぐにブラウザー設定からその認証局への信頼を取り消すことがベストですが、心配しすぎる必要はありません。Microsoft、Mozilla、Google は過去に、信頼の取り消しについて迅速に対応してきました(残念ながら Apple については同じことは言えません)。ブラウザーとオペレーティングシステムのパッチを最新の状態に保っている限り、悪意のある人物や偽の証明書からは守られるでしょう。