暗号化・証明書

ECH(Encrypted Client Hello) いーしーえいち(いんくりぷてっどくらいあんとはろー)

ECHEncrypted Client HelloTLSSNI暗号化プライバシーESNI
ECH(Encrypted Client Hello)について教えて

簡単に言うとこんな感じ!

HTTPSで接続するとき、最初の「どのサイトに繋ぎたいか」という情報(SNI)が暗号化されずに丸見えだったんだ。ECHはその部分も暗号化して「接続先がバレない」ようにするプライバシー強化技術だよ!


ECH(Encrypted Client Hello)とは

ECH(Encrypted Client Hello) は、TLS接続の最初のメッセージ(Client Hello)に含まれるサーバー名指示(SNI:Server Name Indication)を暗号化して、通信の傍受者から接続先ドメインを隠すプライバシー技術です。

TLS 1.3でも通信内容自体は暗号化されていますが、接続開始時のClient HelloにはSNI(どのドメインに接続したいか)が平文で含まれていました。これを使うと、ISPや企業の監視システム、検閲システムがユーザーの接続先サイトを把握できます。

ECHでは、Client HelloをOuterとInnerの2つに分割し、実際の接続先(Inner)はCloudflareなどのCDN/プロキシが持つ公開鍵で暗号化します。観察者からは「CloudflareのCDNに接続した」としか見えません。

ECHの前身技術としてESNI(Encrypted SNI)がありましたが、より包括的な設計のECHが後継となっています。


Client Helloの変化

フィールドTLS 1.2以前TLS 1.3TLS + ECH
通信内容(HTTPボディ)平文暗号化済み暗号化済み
証明書(TLSハンドシェイク平文暗号化済み暗号化済み
SNI(接続先ドメイン名平文平文暗号化
IPアドレス平文平文平文(IPは隠せない)

歴史と背景

  • 2018年:CloudflareがESNI(Encrypted SNI)の実験実装を公開
  • 2018年〜2020年:IETF TLSワーキンググループでESNIからECHへの設計進化
  • 2020年:中国がESNIを使うTLS接続をブロック開始(検閲回避に使えるため)
  • 2021年:Firefox 85でECHのトライアル実装
  • 2023年:Chrome・FirefoxがECHのサポートを段階的に開始
  • 2023年:RFC 8744として標準化
  • 現在:Cloudflare管理のドメインではECHが利用可能になっている

ECHの仕組み(概念図)

ブラウザ CDN/プロキシ (Cloudflare等) Outer SNI: cdn.example.com Inner SNI: 暗号化 実際のサーバー target.com 暗号化ECH送信 復号して転送 観察者(ISP・監視機器) 見えるのは「CDNへの接続」のみ

関連する規格・RFC

規格・RFC番号内容
RFC 8744Issues and Requirements for SNI Encryption in TLS
draft-ietf-tls-esniECHのIETFドラフト仕様(標準化進行中)
RFC 8446TLS 1.3(ECHが前提とするTLSバージョン)

関連用語