跳到主要内容

2.4. Padding (for Encryption) (填充用于加密)

两个主要因素需要或促使使用 Padding 字段。

  • 如果采用的加密算法要求明文是某个字节数的倍数, 例如分组密码的块大小, 则使用 Padding 字段将明文 (由 Payload Data, Padding, Pad Length 和 Next Header 字段组成) 填充到算法所需的大小。

  • 无论加密算法要求如何, 也可能需要填充, 以确保生成的密文在 4 字节边界上终止。具体来说, Pad Length 和 Next Header 字段必须在 4 字节字内右对齐, 如上面的 ESP 报文格式图所示, 以确保 ICV 字段 (如果存在) 在 4 字节边界上对齐。

超出上述算法或对齐原因所需的填充可用于隐藏载荷的实际长度, 以支持 TFC。但是, 所描述的 Padding 字段过于有限, 无法有效用于 TFC, 因此不应用于该目的。相反, 当需要 TFC 时, 应使用下面描述的单独机制 (参见第 2.7 节)。

发送方可以添加 0 到 255 字节的填充。在 ESP 报文中包含 Padding 字段是可选的, 但须遵守上述要求, 但所有实现必须支持填充的生成和使用。

  • 为了确保要加密的位是算法块大小的倍数 (上面的第一个要点), 填充计算适用于不包括任何 IV 但包括 ESP 尾部字段的 Payload Data。如果组合算法模式需要传输 SPI 和 Sequence Number 以实现完整性, 例如在 Payload Data 中复制 SPI 和 Sequence Number, 则这些数据项的复制版本以及任何相关的 ICV 等效数据都包含在填充长度的计算中。(如果选择了 ESN 选项, 如果组合模式算法需要传输高 32 位以实现完整性, 则 ESN 的高 32 位也将进入计算。)

  • 为了确保 ICV 在 4 字节边界上对齐 (上面的第二个要点), 填充计算适用于包括 IV, Pad Length 和 Next Header 字段的 Payload Data。如果使用组合模式算法, 则任何复制的数据和 ICV 等效数据都包含在填充计算覆盖的 Payload Data 中。

如果需要 Padding 字节但加密算法未指定填充内容, 则必须使用以下默认处理。Padding 字节使用一系列 (无符号 1 字节) 整数值初始化。附加到明文的第一个填充字节编号为 1, 后续填充字节构成单调递增序列: 1, 2, 3, ...。当采用此填充方案时, 接收方应该检查 Padding 字段。(选择此方案是因为它相对简单, 易于在硬件中实现, 并且如果接收方在解密时检查填充值, 它在缺少其他完整性措施的情况下可以对某些形式的 "剪切和粘贴" 攻击提供有限的保护。)

如果加密或组合模式算法对用于填充的字节值施加约束, 则必须由定义算法如何与 ESP 一起使用的 RFC 指定它们。如果算法需要检查用于填充的字节值, 这也必须在该 RFC 中指定。