摘要

  • RFC 2085 让 64 位 Replay Prevention 字段按 Security Association 选用:SPI 选中的状态决定字段存在或缺席。
  • 计数从 1 开始,同一密钥下不得回绕;每个接收者自行选择有限乱序窗口,但任何被接受的值最多准入一次。
  • 有效 HMAC 加上未见计数,证明包在共享 SA 下可被该接收者接受;它不证明具体多播发送者、全局时间、交付、授权或应用结果。

1997 年,一个 IP 包即使带着完全正确的 keyed authenticator,也可能只是攻击者从线路复制的旧包。包和认证数据都没变,密码校验自然仍会成功。RFC 2085 的回答很窄:把计数器纳入认证材料,让接收者记住足够的历史,拒绝自己已经接纳过的值。

SPI 选择计数器是否存在

RFC 2085 为早期 IP Authentication Header 定义 HMAC-MD5 transform。可选的 64 位 Replay Prevention 字段位于 SPI 与 Authentication Data 之间;若 SA 不使用重放保护,认证数据就直接跟在 SPI 后面。

这意味着 SPI 不只是包上的编号。RFC 1826 规定接收者用 SPI 找到单向 SA 及其算法、模式、密钥与状态。RFC 2085 又把字段布局和重放行为纳入这份选择。

计数器从 1 向上递增,同一共享密钥不得一直用到 64 位回绕。字段若存在,也参加 HMAC 计算。没有密钥的人不能只把旧计数换成新值而保持认证有效。然而 HMAC 与新鲜度仍是两项检验:前者把包和计数绑定到共享秘密,后者由接收者历史判断这个认证过的值是否还能准入。

递增不等于只能按序到达

网络不会保证到达顺序。RFC 2085 因此允许接纳乱序包,并把窗口深度留给实现决定。规范固定的是更核心的约束:窗口内任何被接纳的值都必须此前未曾出现。

一个值低于当前最大值,仍可能是合法迟到包;只要它还在窗口内且对应 seen state 为空。落在窗口左侧的值太旧;窗口内已标记的值是重复;超过右侧的新值在认证成功后可推动窗口。RFC 6479 后来把这个结构明确写成范围与 seen bits,并说明并行密码处理造成的深度重排可能需要更大窗口。

窗口因此是接收者本地政策,不是全局时钟。两个接收者可以用不同窗口,以不同顺序看到同一发送流。序号缺口不证明丢包,迟到不证明攻击,一个接收者的准入也不证明另一个接收者会准入。可靠的收据只能写:在这个 SA 与这个接收状态下,这个认证值以前没有被接纳。

共享多播 SA 丢失了窗口所需的谱系

RFC 2085 最锋利的边界是多播规则:多个发送者若共享通往同一多播目的地址的同一 SA,就不应启用重放保护;若确实需要防重放,每个发送者应有自己的 SA。

问题不是多播让 HMAC 失效。每个共享秘密持有者都能产生有效认证值。问题是计数器由谁拥有。独立发送者都从 1 开始会立即碰撞;各自递增正常,合并后的流仍会重复。RFC 2085 没有另行定义能给多个发送者分配互不重叠序号的协调器。

按发送者拆分 SA,就恢复了缺失的谱系:SPI 与关联状态把包送进正确的计数历史。关闭重放保护则诚实承认另一种结果:共享密钥认证仍可存在,但这一层不再宣称能判断首次出现。

RFC 4302 后来把 Sequence Number 设为固定字段、支持逻辑 64 位 ESN,并再次说明标准没有为 multi-sender SA 提供 anti-replay 机制。这有助于理解历史,但不能倒写 RFC 2085 的线上格式:RFC 2085 直接传输它那段可选 64 位字段。

共享 MAC 证明成员资格,不证明唯一说话者

RFC 1826 已警告,对称密钥持有者既能验证,也能伪造看似来自另一合法参与者的流量。RFC 2085 的身份边界由此确定。HMAC 成功证明有人持有共享秘密,且覆盖内容没有在途中被无密钥者更改;它不能区分共享密钥组中的具体成员。

计数器只在密码校验之后收紧准入。它不会把群组秘密升级成个人签名,也不提供保密性。一个包可以对 SA 而言真实、对接收窗口而言新鲜,却仍未获应用授权、未被目的进程处理、随后被丢弃,或没有产生宣称的业务结果。

审计必须分开记录:SA lookup、字段是否存在、计数值、窗口位置、seen state、HMAC 结果、包准入、上层收件、授权与已提交效果。少掉一环,就会把本地重放判断夸大成普遍事实。

RFC 2085 的历史价值正是它把失败条件写出来。序号只有在拥有者、作用域与重置边界明确时才有力量。“递增”可以描述多个局部计数器,但合并流仍重复;“已认证”可以只表示某个共享密钥成员;“只接受一次”也只是某一个接收者的一次。

计数器没有说出发送者。它只标记一个接收者准入历史中的位置。

来源