本日、インターネット上のすべての人のプライバシーを向上させるための貢献を発表できることを嬉しく思います。ユーザーがどのWebサイトを閲覧しているかをネットワークが盗み見ることを防ぐために提案された新しい標準である「Encrypted Client Hello」が、現在すべてのCloudflareプランで利用可能になりました。
Encrypted Client Hello(ECH)はESNIの後継で、TLSハンドシェイクのネゴシエーションに使用されるServer Name Indication(SNI)を隠蔽します。つまり、ユーザがECHを有効にしたCloudflare上のWebサイトにアクセスした場合、ユーザ、Cloudflare、Webサイトの所有者以外は、どのWebサイトにアクセスしたかを特定することができません。Cloudflareはすべての人のプライバシーを強く支持しており、この技術を実用化できる可能性を嬉しく思います。
インターネットの閲覧とプライバシー
Webサイトにアクセスするたびに、ブラウザはWebサーバーにリクエストを送信します。Webサーバーからコンテンツが返信され、ブラウザでWebサイトの読み込みが開始されます。インターネットの黎明期には、これは「平文」で行われ、その情報はブラウザは誰もが読める状態で、閲覧元の企業ネットワーク、インターネット接続を提供しているインターネットサービスプロバイダー、WebサイトをホストしているWebサーバーに到達するまでにリクエストが通過するネットワーク上を流れていました。閲覧者とWebサーバーの間にあるネットワークでトラフィックを見ることができれば閲覧者の行動のすべてが把握されてしまうため、プライバシー擁護者たちは「平文」でどれだけの情報が見られるかを長い間懸念してきました。銀行送金を開始する場合、ネットワークの中間に位置する人であれば誰でも送金先と送金額を見ることができてしまいます。
では、どうすればこのデータをよりプライベートにできるのでしょうか?盗聴を防ぐために、SSLや後のTLSという形で暗号化が導入されました。これらは、ユーザーのプライバシーを守るだけでなく、ユーザーが見たりアップロードしたりしたコンテンツをネットワークの中間に位置する者が改ざんできないようにする素晴らしいプロトコルです。しかし、暗号化はここまでしかできません。
実際のコンテンツ(訪問中のWebサイトの特定のページや、アップロードした情報)は暗号化され、ネットワークの中間に位置する者から保護することはできますが、ユーザーの行動を知るための方法は残されています。例えば、DNSリクエストとSNIを見ることでユーザーが訪問しているWebサイトのアドレス(IP)を特定して利用状況を追跡することができます。
まずはDNSから見ていきましょう。Webサイトにアクセスする都度、オペレーティングシステムは接続先のIPアドレスを知る必要があります。これはDNSリクエストによって行われます。DNSはデフォルトでは暗号化されていないため、どのWebサイトのものを問い合わせたかを誰でも見ることができます。このリクエストをネットワークの中間に位置する者から保護するため、2019年にCloudflareは2019年にDNS over HTTPS(DoH)を導入しました。さらに一歩進み、2020年には、CloudflareでさえユーザーがどのWebサイトについて問い合わせたかを見ることができないようにするOblivious DNS over HTTPSを導入しました。
これにより、ネットワークの中間に位置する者に残された、ユーザーが訪問するWebサイトを知るための暗号化されていないビットはSNIのみとなります。DNSクエリを実行した後でブラウザが最初に行うことの1つはTLSハンドシェイクの実行です。このハンドシェイクは、使用する暗号方式、使用するTLSバージョン、Webサーバーの身元を確認するために使用する証明書など、いくつかのステップで構成されます。このハンドシェイクの一部として、ブラウザは訪問しようとしているサーバー(Webサイト)の名前を提示します。
この時点のセッションはまだ暗号化されておらず、サーバは使用する証明書を認識していないため、ブラウザはこの情報を平文で送信する必要があります。SNIを平文で送信するということは、インターネットの中間に位置する者は誰でも、接続のための最初のパケットをチェックするだけで、ユーザーがアクセスしようとしているWebサイトを知ることができるということになります。
これは、これまでのTLSとDoHの努力に関わらず、依然としてユーザーがどのWebサイトを訪問しているのかを本当の意味で秘匿化できていないことを意味します。本日、私たちはECHという最後のピースを埋めることでこのパズルを完成させます。ECHでは、ブラウザはCloudflareとTLSハンドシェイクを行いますが、お客様に固有のホスト名は使用しません。つまり、インターネットの中間に位置する者は、ユーザーがCloudflare上のWebサイトの_どこか_を訪問していることまでを知ることはできても、どのWebサイトかまでを特定することはできません。
ECHの仕組み
ECHの仕組みを説明するには、まずTLSハンドシェイクの実行手順を理解する必要があります。TLSハンドシェイクは、使用する暗号化方式、TLSバージョン、アクセスしようとするサーバー(SNI)をクライアントが伝えるClientHelloパートから始まります。
ECHでは、ClientHelloメッセージは、内向けと外向けの2つのメッセージに分割されます。外向けのものには、使用する暗号やTLSのバージョンなど、機密性のない情報が含まれています。「外向けのSNI」も含まれています。内向けの部分は暗号化されており、こちらには「内向けのSNI」が含まれています。
外向けのSNIは一般的な名前(この場合、ユーザーがCloudflare上のアクセスしようとする暗号化されたWebサイト)を表します。私たちは、すべてのWebサイトがCloudflareで共有するSNIとしてcloudflare-ech.comを選択しました。Cloudflareはそのドメインを管理しているため、そのサーバ名のTLSハンドシェイクのネゴシエートに使用する証明書はCloudflareが保有します。
内向けのSNIには、ユーザーがアクセスしようとしている実際のサーバー名が記載されます。これは公開鍵を使用して暗号化されており、Cloudflareだけが読み取ることができます。ハンドシェイクが完了すると、TLS経由で読み込まれる他のWebサイトと同じように、通常通りWebページが読み込まれます。
ユーザーがどのWebサイトを訪問しているかを確認しようとするインターネットの中間に位置する者が見える情報は、通常のTLSハンドシェイクのみで、CloudflareでECHが有効になっているWebサイトを訪問する際のサーバー名は全て同じになります。どのTLSハンドシェイクも同じように、実際のサイトとは異なるWebサイト「Cloudflare-ech.com」を読み込もうとしているように見えます。私たちの取り組みは、訪問するWebサイトをインターネットの中間に位置する者に知られたくないユーザーのプライバシーを保護するという最後のピースを埋めることに成功しました。
ECH技術の詳細については、紹介ブログをご覧ください。
プライバシーの未来
私たちは、これがインターネット上のプライバシーにとって何を意味するのか、興味深く感じています。Google ChromeやFirefoxのようなブラウザは、すでにECHのサポートを強化し始めています。Webサイト運営者であり、インターネットの中間に位置する者にユーザーの行動を知られたくない方は、今すぐCloudflareでECHを有効にしてください。私たちは既にすべての無料範囲のお客様のECHを有効にしています。既存の有料のお客様であれば、Cloudflareのダッシュボードにアクセスして、この機能を適用してください。今後数週間のうちに、ご契約いただいたすべての方にこの機能を有効にする予定です。
将来的には、他の企業も私たちの取り組みを追随し、誰もがよりプライベートなインターネットを利用できるようになることを願っています。ECHを提供するプロバイダーが増えれば増えるほど、インターネット上でユーザーの活動を傍受することは困難になります。それどころか、プライバシー問題を永久に解決できるかもしれません。
ECHの詳細、仕組み、有効にする方法については、ECHの開発者向けドキュメントをご覧ください。