標準の DNS over HTTPS(DoH) では、DNS クエリは暗号化されます。ただし、リゾルバーはあなたの IP アドレスと、参照しているドメインの両方を見ることができます。Oblivious DNS over HTTPS(ODoH)はプライバシー層を追加し、1 つの主体がこの 2 つの情報を同時に見られないようにします。
ODoH では、デバイスと DNS リゾルバーの間に次の 2 つの役割が入ります。
- プロキシ(Proxy) — 暗号化された DNS クエリをターゲットへ転送します。プロキシはあなたの IP アドレスを見られますが、クエリは暗号化されているため内容は読めません。
- ターゲット(Target) — DNS クエリを受け取って復号し、上流のリゾルバーへ送ります。ターゲットはクエリを読めますが、見えるのはプロキシの IP アドレスであり、あなたの IP アドレスではありません。
クエリはプロキシに届く前に暗号化され、ターゲットはあなたの IP アドレスを知りません。そのため次のようになります。
- プロキシは DNS メッセージを一切見られません。クライアントが送るクエリも、ターゲットが返す回答も、識別・閲覧・改変できません。
- ターゲットが扱えるのは暗号化されたクエリとプロキシの IP アドレスだけです。クライアントの IP アドレスは見えません。
- クエリの内容を読み、応答を作れるのは意図したターゲットだけです。応答も暗号化されます。
つまり、プロキシとターゲットが結託しない限り、1 つの主体が DNS メッセージとクライアント IP アドレスの両方に同時にアクセスすることはできません。クライアントはプロキシとターゲットを自分で選べます。別々の組織が運用するプロキシとターゲットを選べば、結託のリスクを下げられます。
クライアントは Hybrid Public Key Encryption(HPKE ↗)で、ターゲット向けにクエリを暗号化します。HPKE は、受信者の公開鍵を使ってメッセージを暗号化する標準です。ターゲットの公開鍵は DNS 経由で取得します。公開鍵は HTTPS リソースレコードにまとめられ、DNSSEC で保護されます。
Cloudflare 1.1.1.1 はターゲットとして ODoH に対応しており、odoh.cloudflare-dns.com で到達できます。
ODoH クエリを送るには、dnscrypt-proxy ↗ などのオープンソースクライアントを使えます。
iCloud Private Relay ↗ も同様のプライバシー分離の考え方を使っており、Cloudflare をパートナーの 1 社として利用しています ↗。