跳到主要内容

3.4.4. Integrity Check Value Verification (完整性校验值验证)

接收方使用指定的完整性算法在数据包的适当字段上计算 ICV, 并验证它与数据包的 ICV 字段中包含的 ICV 相同。计算的详细信息如下所示。

如果计算的 ICV 和接收的 ICV 匹配, 则数据报有效, 并被接受。如果测试失败, 则接收方必须 (MUST) 将接收到的 IP 数据报作为无效丢弃。这是可审计事件。审计日志条目应该 (SHOULD) 包括 SPI 值, 接收的日期/时间, 源地址, 目标地址, 以及 (在 IPv6 中) 流 ID。

实现说明:

实现可以使用任何一组步骤, 只要结果与以下步骤集相同。首先保存 ICV 值并将其替换为零 (但不替换任何 ICV 字段填充)。将传输过程中可能已修改的所有其他字段清零。(有关在执行 ICV 计算之前将哪些字段清零的讨论, 请参阅第 3.3.3.1 节 "Handling Mutable Fields (处理可变字段)"。) 如果为此 SA 选择了 ESN 选项, 则在数据包末尾之后附加 ESN 的高 32 位。检查数据包的总长度 (如上所述), 如果根据完整性算法的要求需要隐式填充, 则根据需要在数据包末尾 (如果存在 ESN, 则在 ESN 之后) 附加零填充字节。执行 ICV 计算并使用算法规范定义的比较规则将结果与保存的值进行比较。(例如, 如果数字签名和单向哈希用于 ICV 计算, 则匹配过程更复杂。)