主要是两个协议,认证头AH(Authentication Header)和封装安全载荷ESP(Encapsulate Security Payload)。AH提供了认证(integrity,抗否认,抗重放),ESP除了这些还提供了加密。
AH和ESP都提供传输和隧道两种模式,传输模式就是正常的加了个AH头,隧道模式是把原来包里的所有内容都封起来了,加了一个新的IP头。注意在隧道模式下,这个AH头是加在新IP头的扩展头标里的,它是直接将原来的ip包整个封装起来。而且注意,这里AH是对整个包所有内容都做了认证。
这是AH的头,前面下一头标、载荷长度是标准的v6扩展头标的格式,
1.下面第一个就是之前说的SPI,需要用这个SPI去索引对应的SA,SA里通常含有
1)序列号计数器,这个序号和IPsec的滑动窗口机制结合提供抗重放。
2)Sequence Counter Overflow,也就是最大可以接受的序列号,超过这个序列号之后这个SA就相当于过期了,就需要重新协商一个SA。
3)Anti–Replay Window,包含了这个滑动窗口的大小信息
这个滑动窗口情况比较特殊,他收到窗口内的包就会验证,并传给上层,而如果是窗口外的新包(序列号更大的包),他就会直接把窗口挪过去,移动后不在窗口中,且还未被验证的包就会全部被丢弃。
4)要么是AH相关的的什么信息,要么是ESP相关的的什么信息
5)还有一个Lifetim,从时间上过期。
6)IPSec Protocol Mode,可能是隧道也可能是传输模式
7)路径MTU
2.接下来这个字段序列号就代表了这个包的序列号。
3.AH ICV包含了一些用来认证的数据,这里看一个v4的抓包来了解下这里面会有什么。
这里的AH ICV,它使用HMAC来提供认证和完整性保护,所以这个AH ICV就是使用数据和共同秘密来做的HMAC的值。它使用数据包中不可变的内容来做哈希。可变内容有什么,v4中典型的可变内容就是ttl(逐跳递减),校验和(每跳重新计算)。v6中没有校验和了,所以典型的可变内容就是ttl。因为不管是AH还是ESP,这个首部都是目的地路由器才处理,途径路由器是不处理的,所以如果加上这些可变内容哈希不就不对了吗。
接下来在看一个隧道模式的抓包例子
这里能看到两个ip头,上面那个就是新头,下面紧接着AH头,AH头后面就是原来的ip头,所以想想ipv6扩展头标里,为什么会有ipv4封装(4),ipv6封装(41)这两个,就是因为这里AH的下一头标要填这个。
这里和AH主要的不同点就在于,ESP只对从ESP header开始到ESP trailer结束部分认证,只对从ESP扩展头之后的内容加密,包括ESP扩展头之后的扩展头,以及载荷(例如TCP载荷),直到包含ESP trailer。这里的dest指的是destination option目的地选项扩展首部,想想v6里讲的,这是要出现在ESP头后面的头。
这是从ESP header开始到结束ESP auth的整个报文。
前两行就是ESP header,包括SPI和序列号,和AH一个效果。这个不包含在加密里。
从第三行开始就是数据了,这里的数据可能是ESP之后的扩展头,再加上正常的TCP数据,这一段是定长的,如果不到255字节的话要用0填充。最后1字节是这个头标的长度和下一头标。
至此是数据和ESP trailer,这些是被加密的内容。
最后是认证数据,是不加密的。这个是可选的。
一样的,只不过是把原来的整个ip包封在了ESP报文的data部分。
这俩可以无限套娃,因为只要每套一层隧道,就有新的ip头,就能使用一次AH和ESP。
但是这里讨论的不是这个无限套娃,讲的是在一个最简单的IP包里,这俩可以同时出现。
复习一下v6里扩展头出现的顺序
AH在ESP前面。那么就看例子吧,看一个传输模式的一个隧道模式的。
传输模式那就应该是直接在原来的ip头后面把这两个扩展头接上就行了,AH是可以直接接的,但是ESP是有头有尾的,所以是把原来的数据套进ESP的头和尾之间。
应该是这种情况,还是AH对所有不可变的内容做认证。ESP对ESP头之后,ESP认证之前的内容做加密,对从ESP头开始,到ESP认证之前的内容做认证。
这个抓的包能看见IP头,然后AH头,然后ESP头,然后就没了,后面的都是加密的(这里没有选择ESP认证,ESP认证是可选的)。
那就是直接把原来的IP包封进ESP头和尾之间,然后前面的新IP头后面接AH头和ESP头。
加密部分和认证部分还是同理。
这个抓到的包看不到ESP后面的下一头标,想想为什么,因为下一头标在ESP尾里,而ESP尾是被加密的!