摘要
- RFC 2845 规定,签名 DNS 响应的 MAC 要纳入触发它的请求 MAC。
- 对多报文 DNS/TCP 交换,运行中的 MAC 会覆盖前一 MAC 和其后的报文;TSIG 位于首尾报文,并至少每百条报文设置一次检查点。
- RFC 8945 后来要求发送方给每条响应报文附上 TSIG,同时为验证方保留有限的兼容容忍。无论新旧规则,交易认证都不等于保密、数据真实性或本地授权。
响应不是彼此无关的报文
DNS 的消息编号和响应码可以描述一次请求与应答,却不能认证对端,也不能阻止交易内容被改动。RFC 2845 于 2000 年 5 月发布,引入 TSIG:附在 DNS 报文上的元记录,由共享密钥校验。它的范围刻意限定在点对点交易。两个对端必须事先配置同一密钥;密钥如何分发不属于这份规范。
设计关键在 MAC 的输入。客户端先认证自己的请求;服务器返回签名应答时,计算会纳入请求 MAC、应答本身和应答 TSIG 的变量。验证方因此不会把响应当成脱离上下文的新对象:密码学检查一路回溯到最初请求。签名时间与容差值也被覆盖,中间节点若修改时间字段,MAC 就不再匹配。
这个绑定说明的是“这些被覆盖的字节与某个共享密钥关系相符”。密钥由双方共用,校验成功表明报文能通过本地配置密钥的验证,却不能指出究竟是哪个人或进程持有密钥。TSIG 不会加密 DNS 内容,也不决定服务器应否接受更新。RFC 2136 定义 DNS UPDATE;接收方仍须通过本地策略判断已认证的对端能否改动区域数据。
区域传送成为一段报文记录
更棘手的情况是一个响应横跨多条报文,例如通过 TCP 进行区域传送。如果每条报文各自孤立校验,验证方就看不到它们的顺序关系。RFC 2845 要求第一条和最后一条报文带 TSIG,并至少每一百条报文设置一个签名检查点。两个检查点之间,DNS 报文按顺序逐条并入下一次 MAC 计算,同时带上前一 MAC 和相关计时字段。
验证方检查的是一段有界报文流的连续性,并非每条中间报文都带有独立签名。校验失败时,规范要求关闭 TCP 连接,并把区域传送视为中断;至于具体如何重试,规范没有作出统一规定。因此,即便某个检查点有效,它证明的也只是收到的报文链某一段,不能证明服务器后来已提交哪些内容,或从服务器取得数据的次级节点后来实际提供了什么。
规则变了,边界没有
RFC 4635 在原有 HMAC-MD5 设计之外增加了 HMAC-SHA 算法标识。2020 年,RFC 8945 取代 RFC 2845 和 RFC 4635,成为 STD 93。它收紧了发送要求:符合规范的发送方应为响应中的每条报文附上 TSIG。验证方的兼容规则是另一回事:它必须允许最多 99 条中间报文没有 TSIG,但第一条和最后一条仍须签名。“最多 99 条可接受”并不意味着现代发送方可以省略签名。
RFC 8945 也明确划出证据边界:TSIG 认证的是共享密钥双方之间的传输,不是源数据的来源或正确性。它与采用另一种信任模型认证数据的 DNSSEC 不同。某些部署可用 TKEY 建立密钥,但密钥分发并非 TSIG 自带能力。这组标准描述的是边界明确的交易机制,不是一枚包办一切的信任印章。
来源:RFC 1035、RFC 2104、RFC 2845、RFC 8945、RFC 4635、RFC 2136、RFC 2930。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
