认证算法IPSec采用HMAC(Keyed-Hash Message Authentication Code)功能进行认证。HMAC是HASH函数(单向散列函数)和消息认证码MAC(Message Authentication Code)的结合,HMAC利用Hash函数,以一个对称密钥和一个数据包作为输入,生成一个固定长度的输出,这个输出被称为完整性校验值ICV(Integrity Check Value)。接收方通过比较自身生成的ICV和对端发送的ICV来判断数据的完整性和真实性。
数据源验证和数据完整性验证统一被称为验证。因为这两种安全服务总是绑定在一起提供的。数据完整性验证是基于每个IP数据包进行计算;将完整性验证密钥同IPSec对端身份绑定的结果间接提供了数据源验证。
虽然加密后的数据只能通过原始的加密密钥进行解密,但是无法验证解密后的信息是否是原始发送的信息。另外加密和解密的过程非常的消耗CPU资源,恶意用户可能会通过发送欺骗数据包,占用CPU资源。HMAC功能通过比较数字签名进行数据包完整性和真实性验证,这个过程消耗的CPU资源非常少,效率非常高。
所以在IPSec VPN发送设备中,加密和验证通常配合使用。加密后的报文经HMAC生成数字签名,IP报文和数字签名同时发给对端(数字签名填写在AH和ESP报文头的完整性校验值ICV字段,请参见安全协议);在接收设备中,通过比较数字签名进行数据完整性和真实性验证,验证不通过的报文直接丢弃,验证通过的报文再进行解密。
加密和HMAC验证配合使用的过程如图17-105所示。图17-105 HMAC验证过程
用于验证的对称密钥可以手工配置,也可以通过DH算法生成并在两端设备共享。
一般来说IPSec使用以下几种认证算法:
MD5(Message Digest 5):输入任意长度的消息,产生一个128比特的消息摘要。
SHA-1(Secure Hash Algorithm):输入长度小于264比特的消息,然后生成一个160比特的消息摘要。
SHA2-256:通过输入长度小于264比特的消息,产生256比特的消息摘要。
SHA2-384:通过输入长度小于2128比特的消息,产生384比特的消息摘要。
SHA2-512:通过输入长度小于2128比特的消息,产生512比特的消息摘要。
SHA-2的消息摘要长于MD5和SHA-1,因此,SHA-2比MD5和SHA-1更安全。