ECH の config を well-known URI で配布するドラフトのメモ

Encrypted Client Hello (ECH) の設定の課題

現状 Chrome などで実装が進んでいるECHは、サーバーが生成した ECH 用の公開鍵を DNS のHTTPS resource record の値の ECHConfigList に設定していることが前提になっている。 この DNS の resource record に依存するやり方は、サーバーの管理者が ECH 用の鍵ペアを更新する際に

  • サーバー管理者の管轄外の DNS に resource record が登録されている可能性がある
  • 鍵の更新時に resource record の値を自動的に書き換える API が DNS プロバイダーから提供されているとは限らない

という課題があった。

HTTPS record のみでの ECH のイメージ図

well-known URI と zone factory

このような背景があり提案された draft が A well-known URI for publishing ECHConfigList values. だ。

この draft では

  • サーバー管理者が well-known URI で ECHConfigList の値を配布する
  • DNS の resource record への書き込み権限を持つ存在が、https クライアントとして well-known URI から ECHConfigList の値を取得し、DNS の HTTPS resource record に書き込む
    • (draft ではこのような存在を zone factory と呼称している)

という仕組みでサーバー側の鍵更新と DNS の resource record の更新を同期させることを提案している。

draft に明記はされていないが、おそらく zone factory は各種 DNS プロバイダーがデプロイすることになるだろう。

well-known URI で ECHConfigList の値を配布する

サーバーは zone factory 向けに https://{HOSTNAME}/.well-known/origin-svcb に JSON コンテンツを置く。この JSON には以下のような情報を含める

  • SVCB record の AliasMode と等価の設定
  • SvcPriority に対応する設定
  • TargetName に対応する設定
  • SvcParamKey の port に対応する設定
  • ECHConfigList を 含む base64 encoded な文字列。SvcParamKey の ech に対応する設定

JSON content のフォーマットは現在議論中であり、draft-00 から draft-01 でも大きく変わったため、今後も変更される可能性が大いにある。

AliasMode 相当

AliasMode を利用するときの JSON コンテンツの例はこのようになる。

// https://foo.example.com/.well-known/origin-svcb
{
  "alias": "foo.example.com:443"
}

ServiceMode 相当

AliasMode を用いずに、ServiceMode に対応する設定はこのようになる。

// https://foo.example.com/.well-known/origin-svcb
{
  "endpoints": [
    {
      "priority": 1,
      "target": "foo.example.com",
      "ech": "Zm9vYmFy.....aG9nZQ=="
    },
    {
      "priority": 1,
      "port": 8443,
      "ech": "Zm9vYmFy.....aG9nZQ=="
    },
    {}
  ]
}

空の endpoint ({}) は、

  • SvcPriority が 未設定 (推論に任せる)であり
  • TargetName が . であり
  • ECH を サポートしていない

HTTPS resource record に対応する。これは HSTS を利用する方法の 1 つになる。

zone factory の挙動

zone factory は /.well-known/origin-svcb から JSON を fetch したら、DNS の resource record を設定し公開する前に、提示された endpoint が動作していて Origin にアクセス可能であることをテストする。 また、 zone factory は GREASEd ECH を送信して、返ってきた retry-config と ECHConfig 値の整合性を確認することができる。

/.well-known/origin-svcb の freshness と DNS の TTL

サーバー管理者が/.well-known/origin-svcbに配置する JSON を、例えば cache-control: max-age=3600 で配布しているとする。これは ECH の設定が最短 1h で更新されうることを意味する。そのため、zone facttory はこの JSON の freshness time を考慮して十分短い時間で DNS の resource record の TTL を設定する必要がある。

HTTPS record と zone factory を組み合わせた ECH のイメージ図

参考資料

変更履歴

360d0cfd Add icon variations