TLS・PKI・証明書

ECH(Encrypted Client Hello) いーしーえいち

TLS 1.3Client HelloSNI暗号化ESNIプライバシー保護HTTPS
ECHについて教えて

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

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 HelloCDNなど中継サーバー向け。接続先は汎用ドメイン(例: 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単体では不十分。以下の技術と組み合わせて初めて「見えない通信」が実現する DNS over HTTPS (DoH) ECHConfigListの取得自体を 暗号化DNSで行う ECH (Encrypted Client Hello) TLS接続開始時のSNIなど メタ情報を暗号化 TLS 1.3 ECHが動作する 基盤プロトコル。 1.2以下では利用不可 ECH vs 前身技術との比較 技術名 暗号化対象 現在の状態 問題点 ESNI(初期版) SNIのみ 廃止・置き換え済み 設計上の欠陥あり ECH(現行) Client Hello全体 標準化進行中・実装拡大 CDN対応が必要 HTTPS(TLS) 通信内容のみ 広く普及 SNIは平文のまま VPN 通信全体をトンネル 広く普及 VPN事業者には見える

ECHを使う上での実務上の注意

ECHを利用するには、以下の条件がすべて揃っている必要があります。

  1. サーバー側のCDN・ホスティングがECH対応していること(2024年時点でCloudflare等が対応)
  2. クライアント(ブラウザ)がECH対応していること(Chrome 117+、Firefox 118+などで対応)
  3. DNSがDoH(DNS over HTTPS)対応していること(ECHConfigListを安全に取得するため)
  4. TLS 1.3を使用していること(1.2以下では動作しない)

関連する規格・RFC

規格・RFC番号内容
RFC 8446TLS 1.3の仕様。ECHが動作する基盤プロトコル
RFC 9180HPKE(Hybrid Public Key Encryption)。ECHの暗号化に使われる
RFC 9460DNS SVCBおよびHTTPSレコードの仕様。ECHConfigListの配布に使用
draft-ietf-tls-esniECH(Encrypted Client Hello)のIETFドラフト仕様(標準化進行中)

関連用語