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