IPSec是网际层实现IP分组端到端安全传输的机制,由一组安全协议组成。

鉴别首部(Authentication Header,AH)和封装安全净荷(Encapsulating Security Payload,ESP)是其中两个协议,AH和ESP均实现IP分组源端鉴别和防重放攻击等功能,两者的差别是,AH只实现数据完整性检测,ESP实现数据加密和完整性检测。

为了实现安全关联的动态建立过程,设计了Internet 密钥交换协议(Internet Key Exchange Protocol,IKE)。IKE 用于完成安全关联两端之间的双向身份鉴别过程和安全关联相关安全参数的协商过程。

1、安全关联

    为了实现数据发送者至接收者的安全传输,需要建立发送者与接收者之间的关联,这种以实现源端鉴别、数据加密和完整性检测为目的的关联称为安全关联(Security Association,SA)。

    安全关联是单向的,用于确定发送者至接收者传输方向的数据所使用的加密算法和加密密钥、消息鉴别码(Message Authentication Code,MAC)算法和MAC 密钥等。

     同一对发送者和接收者之间可以建立多个安全关联,因此,发送者不能简单通过数据的接收者确定安全关联,而且,以后的讨论中会指出:数据的目的地和安全关联的目的地可以不同。为此,发送者需要通过定义安全策略数据库(Security Policy Database,SPD)来判别数据传输所使用的安全策略。

    SPD的目的是将数据分类,然后对不同类的数据施加不同的安全策略,这些安全策略可以是丢弃、使用IPSec和不使用IPSec。如果某类数据的安全策略是使用IPSec,需要将该类数据绑定到某个安全关联,如果该安全关联不存在,需要动态建立该安全关联。

为了实现数据发送者至接收者的安全传输,每一个安全关联需要定义下述参数。所有安全关联相关参数集合构成安全关联数据库(Security Association Database,SAD)。

序号:32位长度,作为AH或ESP首部中序号字段值,用于防止重放攻击。在安全关联存在期间,不允许出现相同序号的AH或ESP报文。

防重放攻击窗口:用于确定接收到的AH或ESP报文是否是重放报文。

AH信息:消息鉴别码(MAC)算法,MAC密钥,MAC密钥寿命,及其他用于AH的参数。

ESP信息:加密算法和加密密钥,MAC算法和MAC密钥,密钥寿命,及其他用于ESP的参数。

安全关联寿命:可以是一段用于确定安全关联存在时间的时间间隔,也可以是安全关联允许发送的字节数。一旦安全关联经过了安全关联寿命定义的时间间隔,或是发送了安全关联寿命允许发送的字节数,将立即终止该安全关联。

2、传输模式和隧道模式

传输模式:

用于保证数据端到端安全传输,并对数据源端进行鉴别,在这种模式下,

安全关联IPSec所保护的数据就是作为IP分组净荷的上层协议数据,如TCP、UDP报文和其他基于

网络IP的上层协议报文。

隧道模式

安全关联的两端是隧道的两端。在这种模式下,连接源端和目的端的内部网络被一个公共网络分隔,由于内部网络使用本地IP地址,而公共网络只能路由以全球IP地址为目的IP地址的IP分组,因此,直接以源端IP地址为源IP地址、目的端IP地址为目的IP地址的IP分组不能由公共网络正确地从路由器 R1 路由到路由器 R2,路由器 R1为了将源端至目的端的 IP 分组经过公共网络传输给路由器R2,将源端至目的端的IP分组作为净荷封装在以路由器R1的全球IP地址为源IP地址,路由器R2的全球IP地址为目的IP地址的IP分组中,这种将整个IP分组的净荷的封装方式就是隧道格式。

3、防止重放攻击

由于IPSec对源端至目的端的IP分组实现源端鉴别、数据加密和完整性检测,黑客伪造源端至目的端的AH或ESP报文是不可能的,即使黑客截获源端至目的端的AH或ESP报文,也无法篡改,或者解密AH或ESP报文包含的数据。但黑客可以重复转发截获的 AH 或 ESP报文,或是延迟一段时间后,再转发截获的AH或ESP报文。目的端必须能够区分出重复的AH或ESP报文和因为传输时延超长而失效的 AH或 ESP报文,防重放攻击机制就是解决上述问题的机制。

   新建立源端至目的端的安全关联时,序号初始值为0。源端发送AH或ESP报文时,先将序号增1,然后将增1后的序号作为AH或ESP报文的序号字段值。在安全关联寿命内,不允许出现相同的序号,因此,目的端只要接收到序号重复的AH或ESP报文,确定是重复接收到的AH或ESP报文,予以丢弃。由于AH或ESP报文经过IP网络传输后,不是按序到达目的端,因此,序号小的AH或ESP报文后于序号大的AH或ESP 报文到达目的端是正常的,但AH或ESP报文经过IP网络传输的时延抖动有一个范围,如果某个 AH或 ESP报文的传输时延和其他 AH或 ESP报文传输时延的差值超出这个范围,可以认为该AH或ESP报文被黑客延迟了一段时间。防重放攻击窗口就用于定义正常的时延抖动范围。假定防重放攻击窗口值为W,目的端正确接收到的AH或ESP报文中最大序号值为N,则序号值为N-W+1~N的AH或ESP报文属于虽然传输时延大于序号为N的AH或ESP报文,但传输时延仍在正常的时延抖动范围内的AH或ESP报文,目的端正常接收这些AH或ESP报文。

对于防重放攻击窗口,目的端每接收到一个 AH或 ESP报文,执行如下操作。

(1)如果报文序号小于N-W+1,或者该序号对应的报文已经正确接收,丢弃该报文。

(2)如果报文序号在窗口范围内,且未接收过该序号对应的报文,接收该报文并将该序号对应的标志改为已正确接收该序号对应的报文。

(3)如果报文序号大于N,假定为L(L>N),将窗口改为L-W+1~L,并将序号L 对应的标志改为已正确接收该序号对应的报文。

AH

在传输模式下,在IP首部和净荷之间插入鉴别首部AH,在隧道模式下,整个IP分组作为隧道格式的净荷,在外层IP首部和净荷之间插入鉴别首部AH。

ES 结果distinct essect_网络

ES 结果distinct essect_网络_02

 

ES 结果distinct essect_ES 结果distinct_03

next hdr 下一个报头:使用 IP 协议 ID来标识 IP 负载,。表示被AH协议包含的那一个协议的类型。例如,TCP数据中,传输模式值 6 表示 TCP,隧道模式表示下一个报头为IP报头。

AH len 长度:表示 AH 报头的长度。

Reserved 保留字段

Sequence Number 序数 :为该数据包提供抗重播保护。序数是 32 位、递增的数字(从 1 开始),它表示通过通信的安全关联所发送的数据包数。在快速模式安全关联的生存期内序列号不能重复。接收方将检查该字段,以确认使用该数字的安全关联数据包还没有被接收过。如果一个已经被接收,则数据包被拒绝。

Authentication Data 身份验证数据 :包含完整性校验值 (ICV),也称为消息身份验证码,用于验证消息身份验证与完整性。接收方计算 ICV 值并对照发送方计算的值校验它,以验证完整性。ICV 是通过 IP 报头、AH 报头与 IP 负载来计算的。AH可对整个数据包(IP 报头与数据包中的数据负载)提供身份验证、完整性与抗重播保护。所以不论是传输模式还是隧道模式,AH协议都不能穿越nat设备。

ESP

IPsec 封装安全负载(IPsec Encapsulating Security Payload)是 IPsec 体系结构中的一种主要协议,其主要设计来在 IPv4 和 IPv6 中提供安全服务的混合应用。IPsec ESP 通过加密需要保护的数据以及在 IPsec ESP 的数据部分放置这些加密的数据来提供机密性和完整性。且ESP加密采用的是对称密钥加密算法,能够提供无连接的数据完整性验证、数据来源验证和抗重放攻击服务。根据用户安全要求,这个机制 既可以用于加密一个传输层的段(如:TCP、UDP、ICMP、IGMP),也可以用于加密一整个的 IP 数据报。封装受保护数据是非常必要的,这样就可以为整个原始数据报提供机密性。
ESP 头可以放置在 IP 头之后、上层协议头之前 (传输层),或者在被封装的 IP 头之前 (隧道模式)。IANA 分配给 ESP 一个协议数值 50,在 ESP 头前的协议头总是在“next head”字段(IPv6)或“协议”(IPv4)字段里包含该值 50。 ESP 包含一个非加密协议头,后面是加密数据。该加密数据既包括了受保护的 ESP 头字段也包括了受保护的用户数据,这个用户数据可以是整个 IP 数据报,也可以是 IP 的上层协议帧(如:TCP 或 UDP)。

ES 结果distinct essect_ES 结果distinct_04

 

ESP头包含下面一些字段:

SPI 安全参数索引(32位):这个值,和IP头之前的目标地址以及协议结合在一起,用来标识用于处理数据包的特定的那个安全关联。SPI本身是个任意数,一般是在IKE交换过程中由目标主机选定的。

Sequence Number 序列号(32位):序列号是一个独一无二的、单向递增的、并由发送端插在ESP头的一个号码。发送方的计数器和接收方的计数器在一个SA建立时被初始化为0,使用给定SA发送的第一个分组的序列号为1,如果激活抗重播服务(默认地),传送的序列号不允许循环。因此,在SA上传送第232个分组之前,发送方计数器和接收方计数器必须重新置位(通过建立新SA和获取新密钥),序列号使ESP具有了抵抗重播攻击的能力。

受保护数据(可变):通过加密保护的传输层协议内容(传输模式)或IP包(隧道模式)。如果受保护数据需要加密同步数据,那么初始化向量IV可以在受保护数据字段的开头携带,并且IV通常不加密,但经常被看作是密文的一部分。

填充(0~255字节):主要用于加密算法要求明文使某个数目字节的倍数、保证填充长度字段和下一个头字段排列在32位字的右边、提供部分业务流机密性。

填充长度(8位):指出填充字节的数目。

下一个头(8位):标识受保护数据的第一个协议头。例如,IPv6中的扩展头或者上层协议标识符。

验证数据(可变):完整性检查值。验证数据是可变长字段,它包含一个完整性校验值(ICV),ESP分组中该值的计算不包含验证数据本身。字段长度由选择的验证函数指定。验证数据字段是可选的,只有SA选择验证服务,才包含验证数据字段。验证算法规范必须指定ICV长度、验证的比较规则和处理步骤。

ES 结果distinct essect_字段_05

 ESP的验证灵活,不验证IP头部(传输模式)或新IP头部(隧道模式),这使得它能很好的兼容NAT。但是,这也使得接收端无法检测IP头部被修改的情况(只要保证校验和计算正确),故ESP的验证服务没有AH的验证服务强大。所以,AH主要用于验证IP头部,ESP主要用于加密,通常也会将两者嵌套使用。