课题研究 DNS解析安全研究 子课题03 · 第2页 / 共8页
03六大核心研究子课题 · 协议技术深度解析

三大协议机制与隐私增强架构

本页对DoT(RFC 7858)、DoH(RFC 8484)、DoQ(RFC 9250)三大标准协议进行逐机制解析:握手与封装格式、认证模式(RFC 8310严格/机会模式)、0-RTT与队头阻塞等性能特征、协议固有局限;进而剖析ODoH(RFC 9230)与OHTTP(RFC 9292)的目标-中继信任分离架构、SVCB/HTTPS RR(RFC 9460)与DDR(RFC 9463)构成的发现机制体系;最后给出加密DNS与DNSSEC的互补矩阵,澄清“加密即完整”的常见误解。

DoTDoHDoQ0-RTTRFC 8310HPKESVCBDDRODoHOHTTP研究状态:研究中
标准化主体IETF DPRIVE / ADD 工作组
关键RFC7858 / 8310 / 8484 / 9000 / 9250 / 9230 / 9292 / 9460 / 9463
阅读前提建议先读第1页威胁模型与协议全景

01 · DoT深度解析(RFC 7858)

1.1 机制与封装

DoT在TCP之上运行TLS,默认端口853(IANA注册服务名“dns-tls”)。DNS报文以标准wire format传输,每条报文前附加2字节大端长度前缀(与TCP 53上的DNS over TCP封装完全一致,仅传输层由明文TCP替换为TLS)。这一设计使DoT可以复用现有DNS软件栈的报文编解码逻辑,改动面最小。

握手流程:TCP三次握手 → TLS 1.3握手(1-RTT,支持会话票证恢复实现0.5-RTT效果)→ 证书验证 → 加密DNS传输。TLS 1.3(RFC 8446)的会话恢复机制使重复连接可避免完整证书交换,但首个查询的“冷启动”延迟仍显著高于明文UDP(后者无连接建立开销)。

1.2 认证模式:严格模式与机会模式(RFC 8310)

RFC 8310定义了两种使用profile,这是工程部署中最关键的决策点:

模式行为安全性适用场景
严格模式 Strict必须成功建立TLS且认证通过(证书/SPKI pin匹配ADN),失败即报错,不允许降级高:任何降级、伪造、劫持都会显式失败而非静默回退明文固定使用可信加密递归的场景(企业网关、Android“私人DNS”严格档)
机会模式 Opportunistic尝试加密,失败则静默回退明文53低:主动攻击者可强制降级至明文(经典的“剥离攻击”面)大规模公网部署的兼容性折中(不推荐用于高安全需求)

1.3 认证方式

  • 主机名验证(默认推荐):解析器证书中的SAN/CN匹配预设域名(如 dns.example.com),依赖PKI信任链。
  • SPKI Pinning:将解析器公钥的SHA-256指纹硬编码到客户端配置,不依赖CA体系,可防 rogue CA 签发,但证书轮换需同步更新pin。

1.4 已知局限

  • TCP队头阻塞:单连接上丢失一个TCP段会阻塞其后的所有DNS应答,高丢包链路(移动网络)上性能劣于UDP方案。
  • 专用端口的双刃剑:853端口可识别性极强——利于企业策略管控(可精确放行/阻断),但也意味着加密DNS流量可被任何中间方一眼识别并定向阻断。
  • 连接复用:依赖edns-tcp-keepalive(RFC 7828)选项协商空闲连接保持时长,实现长连接复用。

02 · DoH深度解析(RFC 8484)

2.1 机制与封装

DoH将DNS查询封装为HTTP请求:POST方法携带application/dns-message媒体类型的二进制DNS报文,或GET方法将DNS报文base64url编码后以dns=参数传递(便于HTTP缓存与CDN处理)。响应同样为application/dns-message,HTTP状态码语义化映射DNS层错误。

POST /dns-query HTTP/1.1
Host: cloudflare-dns.com
Content-Type: application/dns-message
Accept: application/dns-message
Content-Length: <DNS报文字节数>

<标准DNS wire format查询报文>

2.2 与Web生态深度融合的架构后果

  • 同端口同协议栈:DoH跑在443端口,使用与正常网页浏览完全一致的TLS+HTTP栈。其直接后果是:中间方无法简单通过端口区分“DNS查询”与“浏览网页”——隐私收益最大化,但企业网络的可观测性与策略管控被严重削弱(这正是第4、6页深入展开的核心矛盾)。
  • CDN化部署:DoH天然可被CDN承载(任意边缘节点均可代理DoH请求),这使公共递归获得了与Web内容分发同级的全球分布式能力,也是云厂商在DoH上投入远超DoT的根本原因。
  • HTTP缓存双刃剑:中间缓存可能缓存DoH应答(提高性能),也可能导致陈旧数据被复用——RFC 8484允许服务端通过Cache-Control精确控制。
  • 队头阻塞缓解路径:HTTP/2 over TCP仍存在TCP层队头阻塞;迁移至HTTP/3(QUIC)后缓解,即“DoH3”。

2.3 性能特征

单次冷查询:TCP+TLS握手+HTTP请求,RTT开销大于DoT(HTTP层附加开销);但在连接复用后(浏览器持续向同一DoH端点发送大量查询),摊销成本极低,实测性能与明文DNS相当甚至更优(复用消除了逐查询的UDP丢包重试开销)。

03 · DoQ深度解析(RFC 9250)

3.1 机制与设计约束

DoQ在QUIC v1(RFC 9000)之上承载DNS,默认端口UDP 853(IANA注册“dns-quic”)。协议设计遵循三项关键约束:

  • 一条QUIC流对应一个DNS查询:每个查询在独立STREAM帧中传输,彻底消除应用层与传输层的队头阻塞——某查询丢失重传不影响其他查询。
  • 一个UDP数据报只承载一个DNS查询:避免分片重组的延迟与放大攻击面。
  • 不承载HTTP语义:DoQ直接在QUIC STREAM帧中传输DNS报文,不使用HTTP/3,因此不涉及HPACK/QPACK头部压缩——RFC 9250 §4.2.1明确禁止在DoQ中使用QPACK。

3.2 0-RTT与连接迁移

QUIC的0-RTT机制允许客户端在复用先前会话密钥时,于首个数据报中携带加密DNS查询——冷查询延迟从DoT的2-RTT以上(TCP握手+TLS握手)降至接近单次UDP RTT,是三大协议中冷启动性能最优的方案。同时QUIC的连接ID机制使网络切换(Wi-Fi与蜂窝间)时连接不中断,对移动设备尤为友好。

3.3 风险与现状

  • 0-RTT重放风险:0-RTT数据理论上可被重放,DNS查询的幂等性使其实际影响有限,但协议实现仍应遵循RFC 9001对0-RTT的使用约束。
  • UDP 853可识别可阻断:与DoT类似,专用端口赋予其可治理性,也赋予中间方定向阻断能力。
  • 部署曲线:自RFC 9250(2022-05)发布以来,Cloudflare(1.1.1.1)、AdGuard、Mullvad等公共递归已提供DoQ服务,但操作系统与浏览器级原生支持仍在推进中,生态成熟度显著落后于DoH(详见第3页)。

04 · 隐私增强架构:ODoH与OHTTP

4.1 ODoH(RFC 9230):目标-中继信任分离

加密DNS的固有残留问题是:递归解析器仍然看得见全部查询。ODoH通过引入“中继(Relay)”实体打破这一单点可见性:

ODoH架构信任分离示意
中继只见客户端IP不知查询内容;目标只见中继IP不知客户端身份——任何单一方不再同时持有“谁”与“查了什么”
机制来源:RFC 9230(ODoH)与RFC 9180(HPKE)。图为本课题绘制的教学示意。

ODoH的安全性依赖于一个明确的不共谋假设:中继与目标分属不同运营主体且不相串通。该假设是架构性的——它把“信任某个运营者”转化为“信任两个运营者不共谋”,这是威胁模型的质变而非量变。Cloudflare在其1.1.1.1生态中与多家合作伙伴部署过ODoH服务,用于验证该架构的可行性。

4.2 OHTTP(RFC 9292):从DNS到任意HTTP的泛化

OHTTP将ODoH的“中继+HPKE加密”思想抽象为通用隐私架构,可承载任意HTTP请求(不限于DNS),并依赖ECH(Encrypted Client Hello,RFC 9849)保护客户端与中继之间TLS握手中的SNI明文暴露。OHTTP与ECH的组合被视为Web隐私基础设施的下一代形态:ECH消除握手阶段的域名明文,OHTTP消除应用层的请求可见性。

评估结论(先行给出,第4页展开):ODoH/OHTTP在隐私工程学上是优雅的方案,但其不共谋假设的可治理性(中继由谁运营、如何审计不共谋、如何防止中继与目标被同一集团隐性控制)仍是未解决的治理难题;且中继引入的额外跳数带来延迟增加与新的故障点。当前阶段更现实的定位是高隐私需求场景的增强选项,而非默认架构。

05 · 发现机制:SVCB/HTTPS RR与DDR

5.1 SVCB与HTTPS资源记录(RFC 9460)

HTTPS RR(SVCB RR的HTTPS专用形式)允许域名在DNS中公告其服务的连接参数:ALPN(h2/h3)、ipv4hint与ipv6hint(服务端IP提示)、ech(ECH配置)、port等。对加密DNS而言,其关键作用是加密解析器的服务端点发现与参数下发——客户端查询指定名称的HTTPS RR,即可获得该解析器支持的协议、端口与IP,避免将IP地址硬编码在客户端。

5.2 DDR:网络指定加密解析器的发现(RFC 9463)

DDR解决“设备接入网络后,如何获知网络运营商推荐的加密解析器”的问题。机制要点:

  • 客户端向特殊域名 _dns.resolver.arpa 查询SVCB记录,网络(通过DHCP/RA或本地代答)返回网络指定加密解析器的ADN(认证域名)、协议与端口;
  • 客户端随后验证该ADN的证书,建立加密通道,并将默认解析切换到加密模式;
  • 设计目标:让加密DNS与“网络原生解析器”共存——既获得链路加密,又不绕过网络治理点。

对本课题的意义:DDR是“加密”与“治理”之间最具建设性的标准化桥梁——它将加密DNS的信任锚从“客户端厂商预置名单”交还“所接入网络”,为企业与监管场景提供了协议层抓手。当前主流浏览器尚未大规模默认启用DDR,其生态落地进度是第3页的重要观察项。

5.3 ADN与降级策略

ADN(认证域名)是所有加密DNS配置的核心安全锚点:无论证书主机名验证还是SPKI pin,最终都落到“客户端配置的ADN是否可信”。降级策略(加密失败后是否回退明文、回退到哪个解析器)是RFC 8310之外的工程实践要点——错误的降级策略会把严格模式架空为机会模式(见第4页攻击面)。

06 · 加密DNS与DNSSEC的互补矩阵

威胁加密DNS(DoH/DoT/DoQ)DNSSEC(RFC 4033-4035)组合效果
链路窃听查询内容防护(加密)不防护(内容仍明文)防护
链路篡改/抢答防护(通道完整性,仅限加密段)防护(端到端签名验证)纵深防护
递归作恶/被攻陷给出假应答不防护防护(验证失败即bogus)防护
递归可见全部查询(隐私)不防护(ODoH部分缓解)不涉及ODoH与DNSSEC可叠加

工程结论:加密DNS与DNSSEC是正交互补关系——前者保护“传输中”,后者证明“内容真”。理想的递归配置应同时开启两者:对客户端提供加密通道,对上游应答执行DNSSEC验证。这与本专题子课题02(DNSSEC部署与验证)直接衔接。

本节参考来源(第2页)

以下均为真实可查的权威来源(IETF RFC、IETF Trust文档、IANA)。

[1]

RFC 7858, Specification for DNS over Transport Layer Security (TLS)(2016):rfc-editor.org/rfc/rfc7858

[2]

RFC 8310, Usage Profiles for DNS over TLS and DNS over DTLS(2018,严格/机会模式与认证方式):rfc-editor.org/rfc/rfc8310

[3]

RFC 8484, DNS Queries over HTTPS (DoH)(2018):rfc-editor.org/rfc/rfc8484

[4]

RFC 9250, DNS over Dedicated QUIC Connections(2022):rfc-editor.org/rfc/rfc9250

[5]

RFC 9000, QUIC: A UDP-Based Multiplexed and Secure Transport(2021):rfc-editor.org/rfc/rfc9000

[6]

RFC 9114, HTTP/3(2022):rfc-editor.org/rfc/rfc9114

[7]

RFC 9230, Oblivious DNS over HTTPS(2022):rfc-editor.org/rfc/rfc9230

[8]

RFC 9292, Oblivious HTTP(2022):rfc-editor.org/rfc/rfc9292

[9]

RFC 9180, Hybrid Public Key Encryption (HPKE)(2022):rfc-editor.org/rfc/rfc9180

[10]

RFC 9460, SVCB and HTTPS Resource Records(2023):rfc-editor.org/rfc/rfc9460

[11]

RFC 9463, Discovery of Network-designated Resolvers (DNR and DDR)(2023):rfc-editor.org/rfc/rfc9463

[12]

RFC 7828, The edns-tcp-keepalive EDNS0 Option(2016,DoT连接复用):rfc-editor.org/rfc/rfc7828

[13]

IANA Service Name and Transport Protocol Port Number Registry(dns-tls=853/tcp, dns-quic=853/udp):iana.org/assignments/service-names-port-numbers