forward secrecyによって「サーバ証明書」の目的がサーバの証明だけになる日が来る


旧聞に属する話ですが、私にとって衝撃だったので記載しておきます。

「サーバ証明書の目的は何か?」と聞かれたら何と答えますか?

私は以下のように理解していました。


  • [1] ドメインの使用権を持つ組織の実在証明
  • [2] 共通鍵の交換のため公開鍵情報の提供

しかし・・・、一部のサイトではすでに2の目的がなくなっています。
forward secrecyによって共通鍵を暗号化する実装に変化が起きています。
論より証拠。Firefox 56.0.2でGoogleにアクセスしたときの暗号スイートを表示させてみます。


TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、鍵長 128bit、TLS 1.2


(※) 暗号スイートはWebサーバとブラウザの対応状況によって変化します。

「鍵交換」は「ECDHE」
鍵交換にサーバ証明書の公開鍵を使用していないのです!

いつからこんなことになっていたのでしょうか・・・

私が勉強不足だっただけなのですが、2013年に起きたLavabit事件が大きな転機になったとのこと。
Lavabit事件
アメリカ当局がスノーデン氏のメールをリアルタイムで監視するために、Lavabitメールサービスの秘密鍵の提出を要求した事件。
共通鍵をサーバ証明書の公開鍵で暗号化し、サーバの秘密鍵で復号する仕組みでは、サーバの秘密鍵が漏れてしまえば、通信パケットさえ残っていれば過去にさかのぼって全ての通信内容を解読できることになります。


この事件を契機に、サーバ証明書の公開鍵とサーバの秘密鍵で共通鍵を暗号化/復号する仕組みを改め、共通鍵自体だけでなく、共通鍵を暗号化/復号する鍵も使い捨てにしようという動きが加速しました。

Google/Facebook/TwitterなどITを生業としている企業はいち早く対応済みです。
今後、Webサーバを構築するときは意識しないといけませんね・・・。