DNS over HTTPS / over TLS:名前解決の暗号化
名前解決が平文で丸見えになる盗聴・改ざんリスクを、DoT と DoH がどう塞ぐかを原理から理解できる。ポート分離と HTTPS 偽装の違い、集中化の代償まで腑に落ちる。
- 1.従来のDNSはUDP/53の平文で、誰がどのサイトを引いたかが経路上で丸見え。盗聴と途中差し替え(改ざん)の両方が成立する。DoT/DoHはこの通信路をTLSで包む。
- 2.DoTはポート853を専有して名前解決と一目で分かる。DoHはHTTPSのポート443上で普通のWebトラフィックに紛れ、ブロックされにくいが端末ごとに設定先が分散する。
- 3.暗号化はリゾルバまでの区間限定で、リゾルバ運営者には引いた名前が全部見える。Oblivious DNS(ODoH)はプロキシで送信元IPとクエリ内容を分離してこの集中を緩和する。
平文 DNS が漏らしているもの
DNS の名前解決 は伝統的に UDP/53(一部 TCP/53)の平文で行われます。スタブリゾルバからフルサービスリゾルバへ送るクエリも、その応答も暗号化されておらず、経路上の誰もが中身を読めます。ここで漏れるのは「どのサイトへ通信したか」という強いプライバシー情報です。仮に接続先が HTTPS で暗号化されていても、その直前に引いた www.example.com という名前そのものが平文 DNS で観測できれば、行き先は丸わかりです。
さらに深刻なのは改ざんです。平文 UDP には認証がなく、攻撃者が偽の応答を本物より先に注入すればクライアントは騙されます。これがキャッシュポイズニングや DNS スプーフィングの根です。
DNSSEC は応答に署名を付け、完全性と真正性(本物の権威が出した、改ざんされていない)を守りますが、秘匿性は守りません。署名付きでも内容は平文のまま流れ、誰が何を引いたかは丸見えです。DoT/DoH が守るのは逆で、秘匿性(盗聴防止)と通信路の完全性であって、答えが本物の権威由来かは別問題です。両者は排他ではなく、暗号化された通信路の上で DNSSEC 検証を併用するのが理想形です。
DoT:ポート 853 を専有する素直な方式
DoT(DNS over TLS, RFC 7858) は最も素直です。クライアントとリゾルバの間に TLS セッションを張り、その中を従来とほぼ同じ DNS メッセージ(TCP/53 と同じ2バイト長プレフィックス付きフレーミング)が流れます。違いは専用ポート 853 を使う点だけです。
[stub] --TCP--> [resolver:853]
1) TCP 3-way handshake
2) TLS handshake(証明書でリゾルバを認証)
3) この TLS の中で DNS クエリ/応答を平文時と同じ形式で送受信
ポートを分けた設計の狙いは明快です。853 を見れば「これは暗号化 DNS だ」と一目で分かるため、リゾルバ側の実装も切り分けやすく、ネットワーク管理者も識別・ポリシ適用がしやすい。半面、その識別しやすさは検閲やフィルタにとっても容易を意味します。ファイアウォールが 853 を落とせば DoT は丸ごと止まり、クライアントは平文 53 にフォールバックしかねません。
DoH:HTTPS に紛れさせる方式
DoH(DNS over HTTPS, RFC 8484) は別の戦略を採ります。DNS メッセージを HTTP/2 以降 のリクエストに載せ、通常の HTTPS と同じポート 443 で送ります。GET ならクエリを base64url した ?dns=... を、POST ならボディに application/dns-message(ワイヤ形式の生 DNS メッセージそのもの)を入れます。
POST /dns-query HTTP/2
Host: doh.example.net
Content-Type: application/dns-message
Accept: application/dns-message
<ワイヤ形式の DNS クエリ(バイナリ)>
ポイントは、ネットワークから見ると DoH トラフィックが普通の Web アクセスと区別しづらいことです。443 の TLS の中身は暗号化されており、SNI などを除けばパケットの見た目は他の HTTPS と同じ。これが「HTTPS 偽装」と呼ばれる性質で、ポートやプロトコルでのブロックを難しくします。
| 観点 | DoT (RFC 7858) | DoH (RFC 8484) |
|---|---|---|
| ポート | 853 専用 | 443(HTTPSと共用) |
| 識別容易性 | 高い(一目で分かる) | 低い(Web に紛れる) |
| ブロック耐性 | 弱い(853 を落とせば停止) | 強い(443 全停止は非現実的) |
| 輸送 | TLS 上の DNS フレーミング | HTTP/2+ の上に DNS メッセージ |
| 設定の主体 | OS / ネットワーク単位が中心 | アプリ(特にブラウザ)単位が多い |
| 管理者の可視性 | 保ちやすい | 失われやすい |
両者の本質的な違いは暗号強度ではなく**「見えやすさ」の設計思想**です。DoT は秘匿しつつ識別可能に、DoH は秘匿しつつ識別困難に振っています。
暗号化されるのは「最初の1区間」だけ
ここが最大の誤解ポイントです。DoT/DoH が暗号化するのはスタブリゾルバ ⇔ フルサービスリゾルバの区間に限られます。リゾルバが TLS を解いた先で、ルートや TLD、権威サーバーへ反復問い合わせする部分は依然として平文 53 が主流です。
[端末] ==DoH/DoT(暗号)==> [リゾルバ] --平文53--> [ルート/TLD/権威]
↑ここだけ保護 ↑ここは従来どおり露出しがち
つまり保護されるのは「端末から最初に頼るリゾルバまで」であり、その先のインターネット側の観測者やリゾルバ運営者自身からは引いた名前が見えます。むしろ DoH/DoT で特定の大規模リゾルバへ集約すると、これまで各 ISP に分散していた「誰が何を引いたか」の全履歴が、少数の運営者に集中します。盗聴者は変わるが、信頼の置き先が一点に寄るという集中化のトレードオフです。
DoH をアプリ(ブラウザ)が独自に有効化すると、OS やネットワーク管理者の DNS 設定を迂回します。社内ポリシで特定ドメインをブロックしていても、ブラウザが外部 DoH リゾルバを直接叩けばフィルタは効きません。スプリットホライズン(社内専用の名前解決)やマルウェア対策の DNS フィルタが無効化される、いわゆる「セキュリティ機能のバイパス」が起きます。利便とプライバシーの裏で、管理者の統制と可視性が失われるのが実務上の論点です。
Oblivious DNS(ODoH):送信元と内容を分離する
集中化の核心は「リゾルバが『どの IP が』『どの名前を』引いたかを同時に知る」点にあります。これを断つのが Oblivious DoH(ODoH, RFC 9230) です。発想は単純で、クエリ内容を暗号化したままプロキシを1段挟み、二つの知識を別々の主体に分けます。
[端末] --(リゾルバ公開鍵で暗号化したクエリ)--> [Oblivious Proxy]
│ 送信元IPは見えるが
│ 中身は復号できない
▼
[Oblivious Target = リゾルバ]
中身は復号できるが
送信元IPはプロキシのものしか見えない
- プロキシは送信元 IP を見るが、クエリ本文はリゾルバの公開鍵で暗号化済みのため内容を読めない。
- ターゲット(リゾルバ)は復号して名前を知るが、接続元はプロキシなので本当の端末 IP を知らない。
「IP を知る者」と「名前を知る者」を分離し、両者が結託しない限り「誰が何を引いたか」は誰にも復元できません。これは プロキシ の中継に、エンドツーエンド暗号(HPKE による封筒暗号)を重ねて実現します。コストはプロキシ1段ぶんの遅延と、プロキシ・ターゲットが共謀しないという信頼前提です。
- 平文 DNS は秘匿性ゼロ。HTTPS で本文を暗号化しても、直前の DNS で接続先名が漏れる。
- DoT=853 専用で識別容易・ブロックされやすい。DoH=443 で HTTPS に紛れブロック困難。暗号強度の差ではなく可視性設計の差。
- 暗号化区間は「端末⇔リゾルバ」だけ。リゾルバ以降は平文 53 が多く、運営者には全クエリが見える=集中化のトレードオフ。
- DNSSEC は完全性・真正性、DoT/DoH は秘匿性。守る対象が直交し、併用が理想。
- ODoH はプロキシで「IP を知る者」と「名前を知る者」を分離し、結託なき限り名寄せを防ぐ。
一段で言うと
DoT と DoH は「端末からリゾルバまでの DNS を TLS で包み、盗聴と途中差し替えを防ぐ」点で同じで、違いは「853 で名乗るか(DoT)、443 で HTTPS に紛れるか(DoH)」という可視性の設計だけです。ただし暗号化は最初の1区間に限られ、リゾルバ運営者にはクエリが集中するため、秘匿性の改善と引き換えに信頼の一点集中という代償が生じます。その集中を緩めるのが、IP と名前を別主体に分ける Oblivious DNS です。検証には kdig +tls や dig の DoH 対応版でハンドシェイクと証明書を確認し、どの区間が暗号化され、どこから平文に戻るかを必ず切り分けてください。
ネットワーク Article
DNS over HTTPS / over TLS:名前解決の暗号化を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
DNS
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 6
導入後に効く点
DoTはポート853を専有して名前解決と一目で分かる。DoHはHTTPSのポート443上で普通のWebトラフィックに紛れ、ブロックされにくいが端末ごとに設定先が分散する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 6
判断チェックリスト
- 自社の用途が「DNS / DoH」に近いか確認する。
- 強みである「従来のDNSはUDP/53の平文で、誰がどのサイトを引いたかが経路上で丸見え。盗聴と途中差し替え(改ざん)の両方が成立する。DoT/DoHはこの通信路をTLSで包む。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。