根据RFC4106,我试图在传输模式下以ESP的形式实现IPSEC,并使用galis / counter模式的aes。
我应该将初始化向量放在转换后的数据包中的密文之前。
它应该是经过身份验证(但未加密)数据的一部分吗? (我假设你没有加密它......)
我无法看到RFC指定的位置。它应该是显而易见的吗?为什么会这样?
答案 0 :(得分:2)
据我了解GCM定义,不需要在关联数据中包含初始化向量 - 使用不同的初始化向量将提供不同的加密结果以及不同的完整性检查值。< / p>
这是使用组合认证加密模式的优势,您不必关心在MAC中包含初始化向量。
因此,要使用GCM为ESP编码数据包,请执行以下操作:
答案 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)