AH协议提供3类安全服务:数据完整性、数据源认证(身份验证)和反重播。AH协议能够保护通信免受篡改,但是由于不能加密数据,不提供机密性,也就不能防止被窃听,只适用于传输非机密数据。在IP首部中使用IP协议号51来标识AH。
1、AH工作原理
AH协议在每一个IP数据包上添加一个AH首部(认证首部)。此首部包含一个带密钥的散列值,此散列值由整个数据包计算得到,因此对数据的任何更改都将使散列无效,从而对数据提供了完整性保护。例如,主机A将数据发送给主机B,通过签名来防止修改,这样主机B对签名进行验证,可以确定是主机A发送的数据并且未经修改。
AH通过密钥的散列来提供传输数据的完整性。目前支持的散列算法包括HMAC MD5和HMAC SHA。MD5产生一个128位的值,而SHA产生一个160位的值。SHA通常更安全,但不如MD5快。
2、AH传输模式
在传输模式中,AH为提供完整性和身份验证而对整个数据包进行签名,签名就是在IP首部(报头)和传输协议(TCP或UDP)首部之间放置AH首部(报头)。AH首部位于IP数据报首部和传输层协议首部之间。
3、AH隧道模式
AH隧道模式使用AH首部与新的外部IP首部(隧道IP报头)来封装IP数据包,并对整个数据包进行签名以求完整性并进行验证。AH隧道模式不提供隧道内容的保密,只提供更强的完整性和身份验证。AH签署整个数据包后,一旦隧道的源发出数据包,就不能更改其源和目标地址。
4、AH首部格式
- 下一个首部:该字段长度为8位,指示AH首部之后一个首部的类型,也就是使用IP协议号来标识IP有效载荷。例如,紧接其后的是TCP首部,则该字段值为6。·
- 长度:该字段长度为8位,以32位字长为单位,指明AH首部的长度。·
- 保留:该字段长度为16位,留作将来使用,目前必须将其置为0。
- SPI:该字段长度为32位,用于标识一个SA(安全关联)。SPI即IKE协商SA时指定的安全参数索引,与目的地址及安全协议(AH 或ESP)组合使用,以确保通信的正确安全关联。接收方使用该值确定数据包是使用哪一个安全关联标识的。有关SA 与SPI 的详细介绍请参见12.2.6节。
- 序列号:该字段长度为32位,表示报文的编号。在安全关联的生存期内序列号不能重复,从而为安全关联提供反重播保护。
- 认证数据:该字段长度可变,包含完整性校验值,也称为报文验证代码,用来进行报文认证与完整性验证。该字段值实际上是将散列函数应用到整个IP数据报的结果。
5、AH首部添加过程
AH首部添加过程如下。
- 将AH首部加到IP有效载荷上,但认证数据字段要置为0。
- 可能需要在IP数据部分加入填充,以使总长度为4字节的倍数,便于特定散列函数处理。
- 基于总的分组长度进行散列,在IP首部中只有在传输中不发生变化的那些字段才包含在报文摘要的计算中。
- 将认证数据插入到AH首部中。
- 将协议字段值改为51,然后再加上IP首部。