IKE协议与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

IKE协议与实现
一、IKE的作用
当应用环境的规模较小时,可以用手工配置SA;当应用环境规模较大、参与的节点位置不固定时,IKE可自动地为参与通信的实体协商SA,并对安全关联库(SAD)维护,保障通信安全。

二、IKE的机制
IKE属于一种混合型协议,由Internet安全关联和密钥管理协议(ISAKMP)和两种密钥交换协议OAKLEY与SKEME组成。

IKE创建在由ISAKMP定义的框架上,沿用了OAKLEY的密钥交换模式以及SKEME的共享和密钥更新技术,还定义了它自己的两种密钥交换方式。

IKE使用了两个阶段的ISAKMP:第一阶段,协商创建一个通信信道(IKE SA),并对该信道进行验证,为双方进一步的IKE通信提供机密性、消息完整性以及消息源验证服务;第二阶段,使用已建立的IKE SA建立IPsec SA(如图1所示)。

IKE共定义了5种交换。

阶段1有两种模式的交换:对身份进行保护的“主模式”交换以及根据基本ISAKMP文档制订的“野蛮模式”交换。

阶段2 交换使用“快速模式”交换。

IKE 自己定义了两种交换:1为通信各方间协商一个新的Diffie Hellman组类型的“新组模式”交换;2在IKE通信双方间传送错误及状态消息的ISAKMP信息交换。

1.主模式交换
主模式交换提供了身份保护机制,经过三个步骤,共交换了六条消息。

三个步骤分别是策略协商交换、Diffie Hellman共享值、nonce交换以及身份验证交换(如图2所示)。

2.野蛮模式交换
野蛮模式交换也分为三个步骤,但只交换三条消息:头两条消息协商策略,交换Diffie Hellman公开值必需的辅助数据以及身份信息;第二条消息认证响应方;第三条消息认证发起方,并为发起方提供在场的证据(如图3所示)。

3.快速模式交换
快速模式交换通过三条消息建立IPsec SA:头两条消息协商IPsec SA的各项参数值,并生成IPsec 使用的密钥;第二条消息还为响应方提供在场的证据;第三条消息为发起方提供在场的证据(如图4所示)。

4.新组模式交换
通信双方通过新组模式交换协商新的DiffieHellman组。

新组模式交换属于一种请求/响应交换。

发送方发送提议的组的标识符及其特征,如果响应方能够接收提议,就用完全一样的消息应答(如图5所示)。

5.ISAKMP信息交换
参与IKE通信的双方均能向对方发送错误及状态提示消息。

这实际上并非真正意义上的交换,而只是发送单独一条消息,不需要确认(如图6所示)。

三、IKE的安全
1.机密性保护
IKE使用Diffie Hellman组中的加密算法。

IKE共定义了五个Diffie Hellman组,其中三个组使用乘幂算法(模数位数分别是768、1024、1680位),另两个组使用椭圆曲线算法(字段长度分别是155、185位)。

因此,IKE的加密算法强度高,密钥长度大。

2.完整性保护及身份验证
在阶段1、2交换中,IKE通过交换验证载荷(包含散列值或数字签名)保护交换消息的完整性,并提供对数据源的身份验证。

IKE列举了四种验证方法:1预共享密钥;2数字签名;3公钥加密;4改进的公钥加密。

3.抵抗拒绝服务攻击
对任何交换来说,第一步都是cookie交换。

每个通信实体都生成自己的cookie,cookie 提供了一定程度的抗拒绝服务攻击的能力。

如果在进行一次密钥交换,直到完成cookie交换,才进行密集型的运算,比如Diffie Hellman交换所需的乘幂运算,则可以有效地抵抗某些拒绝服务攻击,如简单使用伪造IP源地址进行的溢出攻击。

4.防止中间人攻击
中间人攻击包括窃听、插入、删除、修改消息,反射消息回到发送者,重放旧消息以及重定向消息。

ISAKMP的特征能阻止这些攻击。

5.完美向前保密
完美向前保密(PFS),指即使攻击者破解了一个密钥,也只能还原这个密钥加密的数据,而不能还原其他的加密数据。

要达到理想的PFS,一个密钥只能用于一种用途,生成一个密钥的素材也不能用来生成其他的密钥。

我们把采用短暂的一次性密钥的系统称为“PFS”。

如果要求对身份的保护也是PFS,则一个IKE SA只能创建一个IPsec SA。

四、IKE的实现
IKE是一个用户级的进程。

启动后,作为后台守护进程运行。

在需要使用IKE服务前,
它一直处于不活动状态。

可以通过两种方式请求IKE服务:1当内核的安全策略模块要求建立SA时,内核触发IKE。

2当远程IKE实体需要协商SA时,可触发IKE。

1.IKE与内核的接口
内核为了进行安全通信,需要通过IKE建立或更新SA。

IKE同内核间的接口有:
1、同SPD通信的双向接口。

当IKE得到SPD的策略信息后,把它提交给远程IKE对等实体;当IKE收到远程IKE对等实体的提议后,为进行本地策略校验,必须把它交给SPD。

2、同SAD通信的双向接口。

IKE负责动态填充SAD,要向SAD发送消息(SPI请求和SA实例),也要接收从SAD返回的消息(SPI应答)。

2.IKE 对等实体间接口
IKE为请求创建SA的远程IKE对等实体提供了一个接口。

当节点需要安全通信时,IKE 与另一个IKE对等实体通信,协商建立IPsec SA。

如果已经创建了IKE SA,就可以直接通过阶段2交换,创建新的IPsec SA;如果还没有创建IKE SA,就要通过阶段1、2交换创建新的IKE SA及IPsec SA。

一、总体设计
IPsec规定的组件包括安全协议验证头(AH)和封装安全载荷(ESP)、安全策略数据库(SPD)和安全关联数据库(SAD)、IKE密钥交换及加密和验证算法。

1.总体结构
如图1所示,IPsec实现的总体结构分为IPsec协议引擎、策略管理、IKE密钥交换及密码变换4个模块。

其中IPsec安全协议的处理是数据流程的核心,策略管理模块为其直接提供所需参数,IKE密钥交换用于自动管理SAD,而密码算法是达到安全的基本工具。

2.功能分配
策略管理:位于内核中,管理SPD和SAD,对数据包(要进行IPsec处理的数据报或数据包的统称)的安全保障起决定作用。

功能包括SPD和SAD的管理(记录的增加、删除、修改、刷新和查询)、同IPsec协议引擎的接口和同IKE的接口。

IPsec协议引擎:位于内核中,实现安全协议AH和ESP。

功能包括外出数据包的处理、进入数据包的处理、同IP层和TCP层的接口。

IKE密钥交换:一个用户级进程,用于动态管理SAD。

功能包括IKE间的交互、同SAD 和SPD的接口。

密码算法:至少应实现AES、DES、3DES、HMAC-MD5、HMAC-SHA1。

二、实现策略管理模块和协议引擎
1.策略管理模块
(1)SPD和SAD在内存中的组织和管理
IPsec系统所使用的策略库一般保存在一个策略服务器中。

该服务器为域中的所有节点(主机和路由器)维护策略库。

各节点可将策略库拷贝到本地,也可使用轻型目录访问协议(LDAP)动态获取。

从名义上说,一个IPsec系统中SPD分为进入SPD和外出SPD,均处于内核中。

系统初始化时,将策略库中的每一条记录分别装入进入SPD和外出SPD中。

为了确保SPD的有效性和安全性,应定期进行更新和刷新。

SAD的每一条记录对应一个SA。

SA经IKE协商得到,并以有序散列链表的形式组织。

从名义上说,SAD也分为进入SAD和外出SAD,分别与进入散列链表和外出散列链表相对应。

进入散列链表用SA中的IPsec源地址计算散列值,外出散列链表用SA中的IPsec目的
地址计算散列值。

SA的维护视SA的建立方式而定。

如采用自动方式协商SA,则根据SA生存期的状态和序号计数器的溢出标志来决定SA的有效性。

生存期分为软生存期和硬生存期。

软生存期状态决定发送方是否可用SA发送数据包,硬生存期状态决定接收方是否可用SA来处理收到的数据包。

当一个SA的软生存期期满时,发送方不能继续用其来发送数据包,此时,可以启动或触发IKE再协商一个。

使用软、硬生存机制可保证通信的持续性。

如采用手工方式建立SA,则不存在生存期,仅根据序号计数器的溢出标志来决定SA 的有效性。

如SPD或SAD过于庞大,则可将一部分置于用户空间。

(2)SPD和SAD间的关系
对数据包进行IPsec处理时,要查询SPD和SAD。

为了提高速度,SPD的每一条记录都应有指向SAD中相应记录的指针,反之亦然。

对于外出处理,先查询SPD,获得指向SA 的指针,再在SAD查询进行处理所需参数。

如SA未建立,则应使用IKE协商,并建立SPD 和SAD间的指针。

对于进入处理,先查询SAD,对IPsec包进行还原,取出指向SPD的指针,然后验证该包应用的策略与SPD中规定的是否相符。

2.IPsec协议引擎
(1)外出处理
对于外出数据包,不论是本机产生的还是转发的,IPsec协议引擎要先调用策略管理模块,查询SPD,确定为数据包应使用的安全策略。

根据策略管理模块的指示,协议引擎对该数据包作出3种可能的处理(如图2所示):
丢弃——丢弃数据包,并记录出错信息。

绕过——给数据包添加IP头,然后发送。

应用Ipsec——调用策略管理模块,查询SAD,确定是否存在有效的SA。

1存在有效的SA,则取出相应的参数,将数据包封装(包括加密、验证,添加IPsec头和IP头等),然后发送。

2尚未建立SA,策略管理模块启动或触发IKE协商,协商成功后按1中的步骤处理,不成功则应将数据包丢弃,并记录出错信息。

3存在SA但无效,策略管理模块将此信息向IKE通告,请求协商新的SA,协商成功后按1中的步骤处理,不成功则应将数据包丢弃,并记录出错信息。

(2)进入处理
对于进入数据包,IPsec协议引擎先调用策略管理模块,查询SAD。

如得到有效的SA,则对数据包进行解封(还原),再查询SPD,验证为该数据包提供的安全保护是否与策略配置的相符。

如相符,则将还原后的数据包交给TCP层或转发。

如不相符,或要求应用IPsec 但未建立SA,或SA无效,则将数据包丢弃,并记录出错信息。

三、分片和ICMP问题
1.解决分片和PMTU问题的建议
外出的IP包长度如果超过网络接口的最大传输单元(MTU),则要进行分片处理。

由于实施IPsec时,要增加一个或多个IPsec头,因此不能直接使用Linux中的PMTU(Path Maximum Transfer Unit)查找。

以下分主机实施和路由器实施2种情况来讨论分片和PMTU 问题。

主机实施IPsec时,可在传输层或IP层查找PMTU。

由于主机不维护源路由,因此应在传输层维护端到端的PMTU信息。

计算和确定IP包的长度时,要考虑IPsec的模式及AH 头和ESP头的长度。

对于路由器转发的数据包,如不允许分片,且长度超过了转发该数据包接口的MTU,路由器就应向始发主机发送一条控制消息协议(ICMP)不可到达消息。

为有效利用网络带
宽,应允许路由器决定是否可对数据包进行分片。

2.解决ICMP问题的建议
ICMP用于Internet差错处理和报文控制。

ICMP消息分为错误消息和查询消息。

以端到端的方式使用IPsec时,不会影响ICMP,而以隧道模式来使用IPsec,则会影响ICMP错误消息的处理。

这是因为ICMP错误消息只能发送数据包的外部IP头及其后的64比特数据,内部IP头的源地址不会在ICMP错误消息中出现,路由器不能正确地转发该消息。

因此,应对路由器生成的ICMP错误消息进行特殊处理,特别是当路由器通过隧道传输其他路由器生成的ICMP错误消息时,可以为隧道两端的路由器建立一个隧道模式SA,用于发送ICMP错误消息。

同时,路由器应不对ICMP错误消息的源地址进行检查。

四、结束语
将IPsec集成到Linux内核中,涉及修改TCP层和IP层的部分源代码,比作为线缆中的块实施要复杂得多。

但这样做有利于保证IPsec的互操作性和配置上的灵活性与可伸缩性,同时有利于软件的复用性。

相关文档
最新文档