摘要

  • draft-hardaker-dnsop-nothing-new-00 提议把截断响应与 NN 信号、带 16 位标识符的 LARGE 记录结合起来,让解析器在大型 RRset 看似未变时避免再次取回完整数据。
  • 这是一份个人提交、明确尚未完整且不可实现的 Internet-Draft。Datatracker 没有记录文档流和目标 RFC 状态,而草案页眉写着 Standards Track。
  • 尚未过期的 RRSIG 证明特定 RRset 在特定密码学链和时间窗内可验证;它不证明运营者当前意图、所有权威节点已经收敛,或缓存选中了正确一代。
  • 可审计的系统必须分别保存提示来源、标识符与 RRset 的绑定、签名窗口、权威节点代际、传输决策、缓存动作与客户端结果,不能把“没有重取”改写为“已经证明最新”。

密码学有效期不是运营意图的时钟

草案面对的问题真实存在。大型 DNS 响应可能超出 UDP 可用空间,触发 TC,然后通过可靠传输再次查询。后量子算法可能让密钥和签名更大,但修订版 00 并没有提供部署事实、流量测量或节省比例。

提案的思路是:如果解析器已经缓存相同的大型 RRset,就不必重复传输。权威服务器在 TC 旁设置 NN,表示请求的记录最近没有改变;LARGE 记录提供一个短标识符。若它与缓存关联的标识符相等,解析器可以保留已有对象。

风险不在于缓存本身,而在于证据被压缩。RRSIG 的开始与结束时间回答“这组签名数据在什么窗口可以验证”。运营者的变更意图回答“现在希望公开什么”。权威集群的加载状态回答“哪些节点已经提供新一代”。三个时钟可能不同步。

旧一代可以继续验证,同时新一代已经在主节点或部分副本上发布。若系统把 signature_valid=true 映射为 current=true,它就把密码学可接受性扩张成了运营现实。

“没有新内容”必须保留说话者

权威 DNS 通常是分布式系统。主节点、副本和 anycast 实例在传送、加载或局部故障期间可能提供不同代际。某一次 NN 只说明该请求抵达的节点怎样比较自己的状态,不是整个权威集合的表决。

设缓存和节点 A 都持有第一代,节点 B 已经持有第二代。A 返回 NN,短标识符也完全匹配。这个事实没有造假,却仍不能证明权威集合已收敛,更不能证明第一代符合当前意图。

因此监测必须有分母。若普通请求只需要一个节点的提示,政策应明确承认这种风险。若 DNSKEY 轮换、委托变化或恢复操作要求更强证据,就要记录待检查的权威成员、观察位置和完成规则。

“全部权威节点”不是形容词,而是一张在某个时刻有效的清单。一个 anycast 地址也不是其全部实例的枚举。没有分母,所谓收敛只是界面颜色。

十六位只在限定窗口内有意义

LARGE 的标识符只有 16 位。草案要求它在所代表数据的签名寿命内保持唯一,并没有把它定义成跨区、跨服务器、跨时间永不重复的版本号。

草案允许使用哈希、递增计数器、谨慎构造的时间值或由内容派生的字段。每一种都带来不同约束:截断哈希可能碰撞;计数器需要持久状态和多节点协调;时间值需要分辨率与重启规则;内容派生需要规范化序列化。

数值相等只有在名称、类型、类别、视图、生成方法和非复用窗口都一致时才支持对象相等判断。配置回滚、计数器重置、视图混合或缓存索引错误,都可能让同一短值指向不同的大对象。

审计记录应把短标识符绑定到完整 RRset 哈希、权威节点、生成配置、RRSIG 窗口和缓存血缘。短值负责协议效率,完整哈希和来源负责事后证明。

SOA 序列号不能替代 RRset 身份

草案特别提醒,不应轻易把 SOA 序列号当作 LARGE 标识符。动态区域可能频繁更新 SOA,而相对静态的大型 DNSKEY RRset 没有改变。区域版本和某个 RRset 的版本回答不同问题。

反过来,某项投影或部署错误也可能使区域层信号看似稳定,而目标 RRset 已经改变。把所有对象挂在一个方便的版本号上,会让版本号生产者在无形中决定“哪些变化算变化”。

最小规范应明确标识符所代表的对象、生成函数、作用域、视图和生命周期。若这些字段没有随提示保存,后续人员只能看到两个数字相等,无法证明两个对象相同。

小提示可能没有签名

修订版 00 规定:如果 LARGE 的 DNSSEC 签名能放进响应,必须携带;如果放不下,则仍建议发送未签名的 LARGE。这意味着未认证的小数据可能决定是否取回已签名的大数据。

安全章节承认这个问题,并提出相对能力论证:能伪造提示的路径中间人,本来就能丢弃请求或响应,让解析器在超时后转向陈旧缓存。NN 最多使旧数据更快被使用。

这个论证说明攻击者可能没有获得一种全新能力,却没有认证提示,也没有证明更快进入旧数据路径没有影响。超时会留下刷新失败的证据与告警窗口;收到 NN 则留下“服务器说无需刷新”的不同事实。

运行记录必须分别描述 NN 是否认证、LARGE 是否认证、缓存 RRset 的 RRSIG 是否验证、当地政策是否允许继续使用。一个 secure 字段无法容纳四种不同权限。

TC 不等于 TCP 没有价值

TC 表示当前响应被截断,不表示 TCP 不可用,也不表示完整响应不会增加信息。RFC 7766 把可靠传输保留在完整 DNS 实现的要求中。跳过一次传输是一项优化决策,不是网络对数据相同所作的证明。

解析器应留下决策输入:NN 能力协商、TC/NN、LARGE 标识符、签名状态、缓存对象、风险类别、陈旧数据政策和可靠传输可用性。准确的输出是“依据政策 P 未再次取回”,而不是“已验证新鲜”。

不同阶段可以有不同阈值。普通查询可能偏向效率;密钥轮换、委托变化、事件恢复或信任重建可能要求完整取回、多权威观察或人工暂停。这个选择属于治理,不能藏在缓存命中率里。

运行代码测试应故意复用标识符、让部分权威改变、保持 TCP 正常、使 RRSIG 过期、伪造未签名 NN,并在比较后驱逐缓存。正确实现不必对所有情形作同一选择,但必须遵守已声明政策并保留不确定性。

陈旧可服务与最新是两种合同

RFC 8767 允许在权威刷新失败时,按照有界规则提供陈旧数据。这说明缓存可以在明确的连续性政策下继续服务,却不把旧数据变成当前数据。

超时与 NN 可能最终选择相同字节,但证据不同。超时说明刷新没有成功;NN 说明某个服务器声称刷新不会带来变化。事件响应、升级和信任强度不应相同。

有用的状态包括:TTL 内有效、签名窗内有效、经认证 NN 后保留、经未认证 NN 后保留、刷新失败后提供陈旧数据、通过可靠传输完成更新。若全部折叠为 cache_hit,事故中最需要的因果关系就消失了。

客户端和应用结果还在更下游。应用可能在旧数据下继续工作,也可能在 DNS 状态正确时因其他依赖失败。业务成功不能替换新鲜度证据,DNS 新鲜度也不保证业务结果。

草案状态限制结论强度

证据冻结时,Datatracker 把修订版 00 列为活跃的个人 Internet-Draft,并明确说明任何人都可以提交,它没有 IETF 正式背书。页面没有文档流、负责 AD、telechat 或目标 RFC 状态;草案页眉却写 Standards Track。这个差异应原样保留。

文本本身更加谨慎:它明确说仍是非常早期、未完整且不可实现的工作。IANA 部分是 TBD;DNSSEC 部分注明关于大签名与小记录的想法尚未写入;记录格式、位置与解析器向父侧发送标识符仍是讨论。

因此不能声称最终分配、实现、互操作、部署、带宽收益、PQC 上线或事故。可以分析的是:如果这类机制继续成熟,它不得删掉哪些证据边界。

收据图比“最新”标签更有用

收据图从查询和缓存代际开始,追加权威节点与视图、TC/NN、LARGE、认证状态和生成配置。比较节点把短值绑定到完整哈希、签名窗口和缓存血缘。政策节点记录为何取回或不取回。

传输结果、缓存接纳、客户端响应与应用观察继续作为后续节点。任何后续结果都不重写之前提示的原始语义。

这样系统可以作出精确陈述:“权威 X 在时间 T 返回 NN;标识符 Y 与缓存 RRset 哈希 Z 的绑定相等;Z 的签名有效至 E;政策 P 因此跳过一次取回。”这句话比“DNS 是最新的”窄,却更能指导行动。

领导者真正要决定的是:什么场景允许低成本提示授权不去获取高成本证据。日常场景可以偏向效率,不可逆的信任与委托转换应要求更强收据。

小信号可以节省大传输。它不能因为阻止了再次观察,就自动成为“现实没有变化”的证明。

来源