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.3 | TLS + 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の仕組み(概念図)
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 8744 | Issues and Requirements for SNI Encryption in TLS |
| draft-ietf-tls-esni | ECHのIETFドラフト仕様(標準化進行中) |
| RFC 8446 | TLS 1.3(ECHが前提とするTLSバージョン) |
関連用語
- ポスト量子暗号 — TLSのセキュリティ強化の別の方向性
- 公開鍵暗号(RSA・ECC) — ECHでInner Client Helloを暗号化する際に使う
- mTLS — TLS通信のセキュリティをさらに強化する相互認証
- DNSファイアウォール — ECHとDNSフィルタリングの関係(ECHはDNSフィルタを回避しやすくする)