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 计算, 则匹配过程更复杂.)