根据 RFC4106,我正在尝试在传输模式下以 ESP 的形式实现 IPSEC,并在 galois/counter 模式下使用 aes。
我应该将初始化向量放在转换后的数据包中密文之前。
它应该是经过身份验证(但未加密)的数据的一部分吗?(我假设你不加密它......)
我看不到 RFC 在哪里指定了这一点。它应该是显而易见的吗?如果是,为什么?
根据 RFC4106,我正在尝试在传输模式下以 ESP 的形式实现 IPSEC,并在 galois/counter 模式下使用 aes。
我应该将初始化向量放在转换后的数据包中密文之前。
它应该是经过身份验证(但未加密)的数据的一部分吗?(我假设你不加密它......)
我看不到 RFC 在哪里指定了这一点。它应该是显而易见的吗?如果是,为什么?
据我了解GCM定义,无需在关联数据中包含初始化向量 - 使用不同的初始化向量将给出不同的加密结果以及不同的完整性检查值。
这是使用组合身份验证加密模式的优势,您不必关心在 MAC 中包含初始化向量。
因此,要使用 GCM 为 ESP 编码数据包,请执行以下操作:
对于 AES-GCM-ESP,IV(尤其是 8 字节的 iv)不是 AAD 的一部分。AAD 只是 ESP 标头。请注意,传递给 AES_GCM 的 IV 是 salt(fourbytes) + iv(esp iv of 8bytes) 的串联。一些硬件加密引擎将 IV 作为 16 字节,在这种情况下,您需要将最后四个字节填充为 0x0。
检查这个文档,它非常简洁 http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf
不,你不应该。
应该很明显吗?通常是的。ESP 机制的许多其他 RFC 包括测试向量以消除此类问题。RFC4106 没有。在讨论中注意到了这一点,但他们没有进入正文:https ://www.ietf.org/mail-archive/text/ipsec/2005-08.mail
不过,有一个带有测试向量的草案文档:https ://datatracker.ietf.org/doc/html/draft-mcgrew-gcm-test-01 。您会注意到 IV(4956ed...
第一个示例中的“nonce”的字节 4-11)包含在数据包数据中的明文中。它们既不包含在“明文”中,也不包含在“aad”中,后者是由 GCM 密码验证的数据的总和。
还要考虑到 GCM 密码本身的 IV 是盐和 ESP IV 的串联 - 称为“nonce”以避免歧义。salt 是从 IKE 期间协商的密钥材料中获得的,因此它在两个端点之间达成一致,并且在 SA 生命周期内保持不变。