IPSec IKE-ISAKMP-DH AH-ESP MD5-SHA1 DES-3DES-AES-RSA
从宏观上来看,ISAKMP主要做了三件事情:
1. SA协商
2. **交换
3. 认证
SA协商的目的是为了在通信双方间协商出一组双方都认可的安全参数。比如两端采用相同的加密算法和完整性算法。
**交换的目的是为已经协商好的算法生成必要的**信息。
认证的目的是鉴别对方的身份,保证自己不是在跟一个伪造的对象通信。
一般有两种方式。第一种叫做**传输,第二种叫做**生成。
**生成与**传输有着本质的不同。由于**是不在网络上传输的,这样,即便一个攻击者截取了**交换信息,也无法取得**。**生成通常使用Diffie-Hellman算法。首先通信的双方各自独立的生成一个私钥,记为Xi和Xr。然后利用Xi和Xr生成可以公开的**信息Yi和Yr。双方交换Yi和Yr,于是发起端拥有Xi和Yr,而接收端拥有Yi和Xr。利用这些信息和DH算法,两端就可以生成相同的**。
DH算法最大的一个缺陷在于,它无法防止中间人攻击,因此需要认证。
ISAKMP一般使用UDP传输,port为500;
2.SA - Security Association
SA是IPsec的基础。IPsec在两个端点(end point)之间提供安全通信,SA是两个端点之间某些参数的约定。
比如:
- 使用哪种协议,AH,ESP,还是二者同时;
- 认证算法,MD5,还是SHA1等;
- 加密算法,DES,3DES,还是其它;
- 协议的封装模式,传输模式还是隧道模式;
- 特定流中的Key,以及Key的生存周期;
SA是单向的,连个端点需要双向通信时,至少需要一对SA;
如果需要同时使用AH和ESP,那么每个端点都需要针对AH和ESP建立单独的SA,即双向通信时需要2对SA;
SA的建立方式:
- 手工建立;
- IKE自动协商建立;
SA的生存周期
- 手工建立,永久的;
- IKE自动建立的SA,有两种生存周期,基于时间的和基于流量的,分别在达到一定时长或者流量的情况下过期;
3. AH和ESP
AH(authentication header)和ESP(Encapsulating Security Payload)用于提供安全服务。
IPsec协议中的:
AH协议定义了认证的应用方法,提供数据源认证和完整性保证;IP协议号为51,认证算法有MD5,SHA1等;
ESP协议定义了加密和可选认证的应用方法,提供数据可靠性保证;IP协议号为50,加密算法有DES,3DES,AES等,作为可选项,可以使用MD5,SHA1等进行认证;
AH和ESP都可以提供认证服务,不过,AH提供的认证服务要强于ESP。同时使用AH和ESP时,设备支持的AH和ESP联合使用的方式为:先对报文进行ESP封装,再对报文进行AH封装,封装之后的报文从内到外依次是原始IP报文、ESP头、AH头和外部IP头。
AH:
next hdr 下一个报头:使用 IP 协议 ID来标识 IP 负载,。从下图可知,表示被AH协议包含的那一个协议的类型。例如,TCP数据中,传输模式值 6 表示 TCP,隧道模式表示下一个报头为IP报头。
AH len 长度:表示 AH 报头的长度。
Reserved 保留字段
SPI 安全参数索引 :与目标地址及安全协议(AH 或 ESP)组合使用,以确保通信的正确安全关联。接收方使用该值确定数据包是使用哪一安全关联标识的。
Sequence Number 序数 :为该数据包提供抗重播保护。序数是 32 位、递增的数字(从 1 开始),它表示通过通信的安全关联所发送的数据包数。在快速模式安全关联的生存期内***不能重复。接收方将检查该字段,以确认使用该数字的安全关联数据包还没有被接收过。如果一个已经被接收,则数据包被拒绝。
Authentication Data 身份验证数据 :包含完整性校验值 (ICV),也称为消息身份验证码,用于验证消息身份验证与完整性。接收方计算 ICV 值并对照发送方计算的值校验它,以验证完整性。ICV 是通过 IP 报头、AH 报头与 IP 负载来计算的。AH可对整个数据包(IP 报头与数据包中的数据负载)提供身份验证、完整性与抗重播保护。所以不论是传输模式还是隧道模式,AH协议都不能穿越nat设备。
下图中黄色部分表示被AH协议签名保护的部分。
ipsec协议的操作模式
在传输模式下,AH或 ESP被插入到IP头之后但在所有传输层协议之前,或所有其他 IPSec协议之前。
在隧道模式下,AH或 ESP插在原始 IP头之前,另外生成一个新IP头放到 AH或 ESP之前。不同安全协议在传输模式和隧道模式下的数据封装形式(传输协议以 TCP为例)如下图所示:
ESP:
封闭安全载荷ESP包格式
ESP不仅为IP 负载提供身份验证、完整性和抗重播保护,还提供机密性。传输模式中的
ESP 不对整个数据包进行签名。只对IP 负载(而不对IP 报头)进行保护。ESP
可以独立使用,也可与 AH 组合使用。
ESP属于IPSec的一种协议,ESP提供机密性、数据起源验证、无连接的完整性、抗重播服务和有限业务流机密性。ESP本身是一个IP协议,协议号是50。
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长度、验证的比较规则和处理步骤。
ESP 验证尾端(即上面的验证数据)包含下列字段:
身份验证数据:包含完整性校验值 (ICV),也称为消息身份验证码,用于验证消息身份验证与完整性。接收方计算 ICV 值并对照发送方计算的值校验它,以验证完整性。ICV 是通过 ESP 报头、负载数据与 ESP 尾端计算的。
数据包签名与加密:ESP 可为 IP 负载提供保护。数据包的签名部分表示数据包的完整性和身份验证签名是在哪里进行的。数据包的加密部分表示什么信息受到机密性保护。
ESP在传输模式时会保护TCP/UDP头,但是并不保护IP 头,因此修改IP 地址并不会破坏整个数据包的完整性。但是如果数据包是TCP/UDP数据包,NAT设备就需要修改数据包的校验值,而这个校验值是被ESP 所保护的,这样却会导致完整性校验失败。所以ESP在传输模式不能用于NAT穿越。
ESP在隧道模式下, NAT会修改新增的IP头,新增IP协议的数据时ESP,就不需要想TCP/UDP一样修改ESP的验证,所以最终能和NAT一起工作的只能是隧道模式下的ESP。