你应该在ipsec中验证初始化向量吗?

时间:2011-10-10 18:42:03

标签: cryptography ipsec aes-gcm

根据RFC4106,我试图在传输模式下以ESP的形式实现IPSEC,并使用galis / counter模式的aes。

我应该将初始化向量放在转换后的数据包中的密文之前。

它应该是经过身份验证(但未加密)数据的一部分吗? (我假设你没有加密它......)

我无法看到RFC指定的位置。它应该是显而易见的吗?为什么会这样?

4 个答案:

答案 0 :(得分:2)

据我了解GCM定义,不需要在关联数据中包含初始化向量 - 使用不同的初始化向量将提供不同的加密结果以及不同的完整性检查值。< / p>

这是使用组合认证加密模式的优势,您不必关心在MAC中包含初始化向量。

因此,要使用GCM为ESP编码数据包,请执行以下操作:

  • 获取密钥
  • 生成IV
  • 计算相关数据(来自SPI和序列号)
  • 获取明文
  • 将IV,关联数据,密钥,明文传递给GCM算法
  • 从GCM算法中获取密文和ICV
  • 发送IV,密文和ICV

答案 1 :(得分:1)

对于AES-GCM-ESP,IV(特别是8字节)不是AAD的一部分。 AAD只是ESP头。 注意,传递给AES_GCM的IV是盐(四字节)+ iv(特别是8字节)的串联。一些hw加密引擎将IV作为16字节,在这种情况下,你需要将最后四个字节填充为0x0。

检查这个文档,它非常整洁 http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf

答案 2 :(得分:1)

不,你不应该。

它应该是显而易见的吗? 通常是的。用于ESP机制的许多其他RFC包括用于消除此类问题的测试向量。 RFC4106没有。在讨论过程中注意到了这一点,但他们没有在文本中注明:https://www.ietf.org/mail-archive/text/ipsec/2005-08.mail

但是有一个带有测试向量的草稿文档:https://tools.ietf.org/html/draft-mcgrew-gcm-test-01。您会注意到IV(第一个示例中“nonce”的字节4-11,4956ed...)在数据包数据中包含 cleartext 。它们不包含在“明文”中,也不包含在“aad”中,“aad”是GCM密码验证的数据总数。

还要考虑到GCM密码本身的IV是盐和ESP IV的串联 - 称为“随机数”以避免模糊。盐是从IKE期间协商的密钥材料中获得的,因此它在两个端点之间达成一致,并且在SA寿命期间保持不变。

答案 3 :(得分:0)

显然,两个明显的答案都是正确的。

根据RFC 4543指定ENCR_NULL_AUTH_AES_GMAC(未加密的身份验证),您可以包含IV。

然而,相同的RFC表示,对于AES-GCM-ESP(加密和身份验证),您没有。

有了这些信息,现在很明显,这就是RFC 4106(实际上指定了AES-GCM-ESP)所说的,虽然这不是我最初解释它的方式。