安全关联被称为SA,它是IPSec的一个基本部件。SA 是SADB中的一个条目,SADB包含双方协商的IKE和IPSec安全信息。
- IKE(ISAKMP)SA
- IPSec SA
对等体之间的IKE SA用于控制数据流,比如协商对IKE数据流进行加密以及对对等体进行验证的算法。在对等体之间只有一个IKE SA,寿命通常比IPSec SA长,因此增加的数据流量更少。
IPSec SA用于协商对对等体之间的IP数据流进行加密的算法,对于哪些数据流进行加密由策略决定,IPSec SA是单向的,因此至少需要两个:入站和出站。在对等体之间可以有多个IPSec SA,用于描述不通IP主机组或者数据流。IPSec SA的寿命通常比IKE SA短,而增加的数据流量更多。
确定和维护IKE SA 和IPSec SA是IKE协议的一项主要功能。内容主要有RFC 2409(IKE)、RFC2408(ISAKMP)、RFC2412(OAKLEY)和RFC 2407(ISAKMP Domain of Interpretation)
IKE 分两个阶段运行,用来协商IKE、IPSec SA
- Phase 1: 让IKE对等体彼此验证对方并确定会话密钥。这个阶段使用DH 交换、cookie和ID交换创建一个IKE SA.确定IKE SA后,发起方和应答方之间的所有IKE通信都将通过加密和完整性检查保护。
- Phase 2:使用ESP或AH来保护数据流,以协商并确定IPSec SA。
虽然我们互换地使用 ISAKMP IKE ,但它们之间是有区别的 ISAKMP规定了IPSec对等体之间如何通信、对等体之间交换的消息的结构以及对等体建立连接时经过的状态交换 ISAKMP提供了检证对等体和交换密钥的方法 然而,它没有规定如何交换验证密钥,但lKE对此做了规定。
IKE 消息是将通过将ISAKMP有效负载链接到ISAKMP报头构建而成的。
- 报头中发起方和应答方cookie是由各个对等体创建的,他们与消息ID共同决定了正在进行的ISAKMP交换的状态。Cookie是一个8个字节的随机值,用于标识IKE SA。用作ISAKMP SPI。
- 下一有效负载字段指出了跟在ISAKMP有效负载得类型。
- ISAKMP版本由主版本和次版本指出。到目前为止,主版本为1,次版本为0。
- 交换类型指出了使用的消息类型
- 标记字段长1字节,其中只有最右边3位被使用
- 第0位为加密位,为1时标识有效负载时加密的
- 第1位为提交位,如果为1,将确保建立SA后才能收到加密内容
- 第2位为验证位,如果为1,将只对有效负载进行验证,而不进行加密
- 长度字段长4字节,指出了整条消息的总长度,包括报头和有效负载
IKE Phase 1 工作原理
IKE Phase 1 提供了两种模式:主动模式和积极模式。每种模式的结果都是建立一个IKE SA,IKE SA包含各种由两个对等体协商的参数。必不可少的参数包括加密算法、散列算法、验证算法、DH组,还有寿命的可选参数。
crypto isakmp policy 10
encr aes
hash md5
authentication pre-share
group 5
lifetime 77777
可以配置多组IKE策略参数,发起方可以提供多种IKE策略,应答方在自己左右策略组中查找与之相匹配的策略。
主模式
主模式由发起方和应答方之间交换的6条消息组成:每个方向3条,提供身份保护,在可协商的参数和配置方面具有极大的灵活性。
在第一次交换中,发起方发送一个包含cookie的ISAKMP报头和一个SA有效负载(SAi)。SAi用于协商Phase 1参数(加密算法、散列算法、验证方法、寿命等)。第二次交换中,应答方用选定的策略和SA报头以及包含Cookie Cr的ISAKMP报头进行应答。应答方选择一种匹配的策略并返回,他不能选择不同的策略做回应,如果没有有效的负载,需要返回拒绝发起方的提议。
在第三四次交换后,便能够推导出4个不同的密钥。
- SKEYID
- SKEYIDd
- SKEYIDa
- SKEYIDe
如果不需要完善转发安全性(PFS),将使用SKEYIDd推导出这些密钥信息。SKEYIDa被用来做ISAKMP消息提供数据完整性的密钥。SKEYIDe被用作最IKE消息进行加密的密钥。
对于交换的第五和第六条消息,将使用SKEYIEe进行加密,并使用散列值HASHi和HASHr、最开始两次交换中协商的Phase 1加密算法和散列算法以及SKEYIEe和SKEYIDa进行验证。这两次交换的主要内容时发起方和应答方的身份IDi和IDr
在使用预共享密钥的主模式中,只能根据发起方的源IP地址来确认身份,因为ID有效负载被加密了。
积极模式
IKE 积极模式只进行3次交换就产生第一条SA,IKE SA。从而提高了IKE的处理速度,但牺牲了一定的安全性。
第一条消息中,发送方发送ISKAMP报头、安全关联、DH公开值、临时值和身份ID。在第二条消息中,应答方选定提议的所有参数和DH公开值进行应答。该消息被验证,但是没有加密。第三条消息由发起方回应给应答方,该消息被验证,让应答方能够确定其中的散列值是否与计算的散列值相同,进而确定该消息是否有问题。积极模式主要用于提供远程接入的IKE客户使用。这种情况下,应答方预先并不知道发起方的地址,且使用的验证方法是预共享密钥。
IKE Phase 2
快读模式交换3条消息,这些消息都由IKE进行保护,这意味着使用IKE Phase1 推导出来的SKEYIDe和SKEYIDa对分组进行加密和验证。
- 第一条消息包括ISAKMP 报头和IPSec有效负载,IPSec有效负载包括用于通讯数据加密的所有提议和交换以及HASH1
- 第二条消息包含选定的ISAKMP报头、临时值、、HASH2值
- 在这次交互后,发起方有足够的信息推导出密钥信息并开始发送数据流。
- 在这次交互后,发起方有足够的信息推导出密钥信息并开始发送数据流。
- 第三条消息发起方使用HASH3进行验证,这是在IPSec数据流通信前的有效性验证。
- 如果第三条消息还没到达,但是加密分组已经到了的话回丢弃这些分组。
- 应答方在第二条消息设置提交位,告诉发起方必须等待确认,应答方验证第三条消息后,会发送第四条消息,告诉发起方可以接受数据。
验证方式
在IKE中支持两种验证方式:预共享密钥和数字签名。
- 预共享密钥验证
这种方法中,发起方和应答方必须有相同的预共享密钥,否则将无法建立IKE隧道。通常使用带外技术来协商密钥。在IKE主模式中使用预共享密钥的缺点之一是:由于ID被加密,应答方不知道发起方的身份。在远程接入中,应答方预先并不知道发起方的源IP地址。这种情况下预共享密钥只能使用积极模式。
- 数字签名验证
使用数字签名时,使用公钥签名来验证对等体。IKE支持在发起方和应答方之间交换证书。
IPSec 处理分组
所有IPSec实现必须使用两个数据库
- 安全策略数据库(SPD)
- 安全关联数据库(SADB)
SPD存储了策略定义集,他们决定了如何处理两个IPSec对等体之间的所有IP数据流:入站和出站。SADB包含每个活动的安全关联的参数。
安全策略数据库
针对入站和出站的IP分组的安全策略存储在一个名为SPD数据库中,该数据库定义了各种选择符,以标识需要IPSec服务的分组,这些选择符如下:
- 目标IP地址\端口
- 源IP地址\端口
- 名称
- 数据敏感性等级
- 传输层协议
安全关联数据库
SADB中每个条目都定义与一个SA相关的参数。创建IPSec SA时,将使用该SA的所有参数更新SADB。对于入站IPSec分组,将使用外部IP报头中的目标地址、SPI和IPSec安全协议(ESP/HA)作为索引,在SADB中查找相应的SA条目。对于出站的IPSec分组,将使用SPD中指向SADB的指针来获得相应的SA条目。SADB包含下述9个与IPSec处理相关的参数:
- 序列号:ESP/AH报头中的32位值。
- 序列号溢出:一个标记,指出序列号是否大于2^32。如果大于,必须删除该SA,并重新协商。
- 防重放窗口:一个32位或64位计数器,用于判断入站IPSec分组是否是重放分组。
- SA寿命:使用时间和字节数指定。任何一种寿命到期后,SA将被删除并创建一个新的。
- 模式:隧道模式、传输模式
- AH验证算法:指定使用MD5还是SHA进行验证以及用于创建摘要认证的密钥
- ESP验证算法:指定使用MD5还是SHA进行验证以及用于创建摘要认证的密钥
- ESP加密算法:指定用于加密的算法——DES、3DES或AES以及用于加密的密钥和IV
- 路径MTP:任何应遵守的PMTU
被丢弃的IPSec 分组
- SADB中没有相应的SA
- 序列号在滑动窗口左边,这表明分组未能通过防重放检查
- 没有通过验证
- 长度不正确
- SA寿命过期