RFC8221 -- 密码算法实现要求和使用指南
RFC 8221废掉了RFC 7321(RFC 7321废掉了RFC 4835)。
4. 加密必须经过身份验证
没有身份验证的加密是无效的,MUST NOT使用。IPsec提供三种方式来提供加密和认证:
- ESP采用AEAD密码
- ESP采用非AEAD密码+身份验证
- ESP使用非AEAD密码+ AH进行身份验证
最快速也最现代的方法是ESP使用组合模式密码,例如AEAD密码,加解密和认证在一步中完成。在这种情况下,AEAD密码被设置为加密算法,而认证算法设置为空。例如使用算法ENCR_AES_GCM_16和ENCR_CHACHA20_POLY1305。
更传统的方法是,ESP使用加密算法和验证算法。这种方法处理起来更慢,因为要处理两次:一次用于加密/解密,一次用于认证。例如ENCR_AES_CBC结合 AUTH_HMAC_SHA2_512_256。
可以使用的最后一种方法是ESP + AH。这种方法不推荐使用。因为它最慢,由于ESP + AH两层头,因此占用更多的字节。这导致加密数据的有效MTU变小。使用这种方法,ESP只用于没有认证算法的加密,需要启用AH协议用于认证。例如ESP使用ENCR_AES_CBC算法,AH使用AUTH_HMAC_SHA2_512_256算法。
5. ESP加密算法
+-------------------------+------------+---------+----------------+ | Name | Status | AEAD | Comment | +-------------------------+------------+---------+----------------+ | ENCR_DES_IV64 | MUST NOT | No | UNSPECIFIED | | ENCR_DES | MUST NOT | No | [RFC2405] | | ENCR_3DES | SHOULD NOT | No | [RFC2451] | | ENCR_BLOWFISH | MUST NOT | No | [RFC2451] | | ENCR_3IDEA | MUST NOT | No | UNSPECIFIED | | ENCR_DES_IV32 | MUST NOT | No | UNSPECIFIED | | ENCR_NULL | MUST | No | [RFC2410] | | ENCR_AES_CBC | MUST | No | [RFC3602][1] | | ENCR_AES_CCM_8 | SHOULD | Yes | [RFC4309](IoT) | | ENCR_AES_GCM_16 | MUST | Yes | [RFC4106][1] | | ENCR_CHACHA20_POLY1305 | SHOULD | Yes | [RFC7634] | +-------------------------+------------+---------+----------------+
6. ESP和AH认证算法
本节中的身份验证算法建议针对两种类型的通信:
- 通信仅经过身份认证,不加密,如ESP使用NULL加密或AH通信
- 使用非AEAD算法加密的通信必须与身份验证算法结合使用。
+------------------------+----------------+-------------------------+ | Name | Status | Comment | +------------------------+----------------+-------------------------+ | AUTH_NONE | MUST / | [RFC7296][RFC5282] | | | MUST NOT | AEAD-only | | AUTH_HMAC_MD5_96 | MUST NOT | [RFC2403][RFC7296] | | AUTH_HMAC_SHA1_96 | MUST- | [RFC2404][RFC7296] | | AUTH_DES_MAC | MUST NOT | UNSPECIFIED | | AUTH_KPDK_MD5 | MUST NOT | UNSPECIFIED | | AUTH_AES_XCBC_96 | SHOULD / MAY | [RFC3566][RFC7296] | | | | (IoT) | | AUTH_AES_128_GMAC | MAY | [RFC4543] | | AUTH_AES_256_GMAC | MAY | [RFC4543] | | AUTH_HMAC_SHA2_256_128 | MUST | [RFC4868] | | AUTH_HMAC_SHA2_512_256 | SHOULD | [RFC4868] | +------------------------+----------------+-------------------------+
使用AUTH_NONE的唯一场景是,经过身份验证的加密算法选自第5节。在所有其他情况下,绝不能选择AUTH_NONE。正如ESP和AH都提供身份验证,人们可以将这些协议组合起来提供身份验证。正如[RFC7321]所述,不建议使用ESP非认证加密与AH结合;此外,AUTH_NONE身份验证无法与ESP NULL加密组合使用。
注:AEAD为“用关联数据进行认证的加密”