ECH(Encrypted Client Hello) いーしーえいち
簡単に言うとこんな感じ!
HTTPSで通信するとき、「どのサイトに繋ごうとしているか」が暗号化前に丸見えになってた問題を解決する技術だよ!封筒の中身は見えなくても、宛名は見えてた状態を、宛名まで隠せるようにした感じ!
ECH(Encrypted Client Hello)とは
ECHとは、TLS(Transport Layer Security)通信を始める際に送られる「Client Hello」メッセージ全体を暗号化する技術です。TLS 1.3をベースに設計されており、通信の開始段階から接続先のドメイン名などの情報を第三者から隠すことを目的としています。
従来のHTTPS通信では、暗号化セッションが確立される前に「どのサーバーに接続しようとしているか」を示す SNI(Server Name Indication) という情報が平文で送信されていました。これは封筒(暗号化された中身)を閉じる前に宛名書きをすることに相当し、通信経路上の機器やISPがどのサイトを閲覧しているか把握できる状態でした。ECHはこの「宛名」に相当する部分も暗号化し、通信の完全なプライバシー保護を実現します。
ECHはCDN(コンテンツデリバリーネットワーク)プロバイダーを中心に実装が進んでおり、CloudflareやGoogle、Mozillaなどが積極的に対応を進めています。企業がシステムを選定する際、「HTTPS対応しているから安全」だけでは不十分になりつつある時代を象徴する技術といえます。
ECHの仕組みと構造
ECHは「外側のClient Hello」と「内側のClient Hello」という二重構造になっています。
| 役割 | 名称 | 内容 |
|---|---|---|
| 外側(公開OK) | Outer Client Hello | CDNなど中継サーバー向け。接続先は汎用ドメイン(例: cloudflare-ech.com)を示す |
| 内側(暗号化) | Inner Client Hello | 実際のサーバー向け。本当の接続先ドメイン(SNI)などを含む。暗号化されている |
クライアント 中継サーバー(CDN) 実際のサーバー
│ │ │
│── Outer Client Hello ────▶│ │
│ (汎用ドメインのSNI) │── Inner Client Hello ───────▶│
│ +暗号化済みInner ───── │ (本当のドメインを復号) │
│ │ │
│◀─────────────────────────────────── TLS確立 ────────────│
鍵配布の仕組み(ECHConfigList)
ECHを使うには、接続先サーバーがあらかじめ公開鍵をDNSのHTTPSレコード(またはSVCBレコード)に登録しておく必要があります。クライアントはDNS経由でこの公開鍵(ECHConfigList)を取得し、Inner Client Helloの暗号化に使います。
1. クライアントがDNSに問い合わせ
→ HTTPSレコードからECHConfigListを取得
2. 取得した公開鍵でInner Client Helloを暗号化
3. 暗号化済みのOuter Client Helloをサーバーへ送信
4. 中継サーバーが秘密鍵で復号してルーティング
ECHが隠すもの・隠せないもの
| 情報 | ECHなし | ECHあり |
|---|---|---|
| 接続先IPアドレス | 見える | 見える(隠せない) |
| SNI(接続先ドメイン名) | 見える | 隠れる |
| 通信内容 | 暗号化済み | 暗号化済み |
| 使用するTLSバージョン | 見える | 一部隠れる |
歴史と背景
- 2014年頃〜: SNIが平文で送信されることによるプライバシー問題が指摘され始める
- 2018年: ESNIとして最初のドラフトがIETFに提出される(draft-ietf-tls-esni)
- 2019年: CloudflareがESNIの試験的サポートを開始。FirefoxがESNIをオプション実装
- 2020年: ESNIから設計を抜本改訂し、ECHとして再設計。「Outer/Inner」の二重構造が導入される
- 2021〜2022年: 複数のドラフトを経て仕様が安定化。DNS HTTPSレコードとの連携が明確に定義される
- 2023年: CloudflareがECHを本番環境でサポート。Chrome・Firefoxが段階的に有効化を開始
- 2024年〜: iOS・Androidでの対応も広がり、主要ブラウザでデフォルト有効化が進む
関連技術との比較
ECHは単独では機能せず、周辺技術と組み合わせて完全なプライバシー保護を実現します。
ECHを使う上での実務上の注意
ECHを利用するには、以下の条件がすべて揃っている必要があります。
- サーバー側のCDN・ホスティングがECH対応していること(2024年時点でCloudflare等が対応)
- クライアント(ブラウザ)がECH対応していること(Chrome 117+、Firefox 118+などで対応)
- DNSがDoH(DNS over HTTPS)対応していること(ECHConfigListを安全に取得するため)
- TLS 1.3を使用していること(1.2以下では動作しない)
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 8446 | TLS 1.3の仕様。ECHが動作する基盤プロトコル |
| RFC 9180 | HPKE(Hybrid Public Key Encryption)。ECHの暗号化に使われる |
| RFC 9460 | DNS SVCBおよびHTTPSレコードの仕様。ECHConfigListの配布に使用 |
| draft-ietf-tls-esni | ECH(Encrypted Client Hello)のIETFドラフト仕様(標準化進行中) |
関連用語
- TLS 1.3 — ECHが動作する基盤となる最新のトランスポート層セキュリティプロトコル
- SNI(Server Name Indication) — ECHが暗号化する主要ターゲット。複数ドメインを1つのIPで扱うTLS拡張
- DNS over HTTPS(DoH) — ECHConfigListの取得を安全に行うために組み合わせるDNS暗号化技術
- ESNI(Encrypted SNI) — ECHの前身技術。設計上の問題からECHへ置き換えられた
- HPKE(Hybrid Public Key Encryption) — ECHの暗号化処理に使われる公開鍵暗号の仕組み
- CDN(コンテンツデリバリーネットワーク) — ECHを実際に終端・配布するインフラ。CloudflareなどがECH対応を牽引
- HTTPS レコード(DNS) — ECHConfigListをDNSで配布するためのDNSリソースレコード
- PKI(公開鍵基盤) — ECHが利用する公開鍵暗号の基盤となる仕組み