您好,欢迎访问三七文档
IKE协议与实现一、IKE的作用当应用环境的规模较小时,可以用手工配置SA;当应用环境规模较大、参与的节点位置不固定时,IKE可自动地为参与通信的实体协商SA,并对安全关联库(SAD)维护,保障通信安全。二、IKE的机制IKE属于一种混合型协议,由Internet安全关联和密钥管理协议(ISAKMP)和两种密钥交换协议OAKLEY与SKEME组成。IKE创建在由ISAKMP定义的框架上,沿用了OAKLEY的密钥交换模式以及SKEME的共享和密钥更新技术,还定义了它自己的两种密钥交换方式。IKE使用了两个阶段的ISAKMP:第一阶段,协商创建一个通信信道(IKESA),并对该信道进行验证,为双方进一步的IKE通信提供机密性、消息完整性以及消息源验证服务;第二阶段,使用已建立的IKESA建立IPsecSA(如图1所示)。IKE共定义了5种交换。阶段1有两种模式的交换:对身份进行保护的“主模式”交换以及根据基本ISAKMP文档制订的“野蛮模式”交换。阶段2交换使用“快速模式”交换。IKE自己定义了两种交换:1为通信各方间协商一个新的DiffieHellman组类型的“新组模式”交换;2在IKE通信双方间传送错误及状态消息的ISAKMP信息交换。1.主模式交换主模式交换提供了身份保护机制,经过三个步骤,共交换了六条消息。三个步骤分别是策略协商交换、DiffieHellman共享值、nonce交换以及身份验证交换(如图2所示)。2.野蛮模式交换野蛮模式交换也分为三个步骤,但只交换三条消息:头两条消息协商策略,交换DiffieHellman公开值必需的辅助数据以及身份信息;第二条消息认证响应方;第三条消息认证发起方,并为发起方提供在场的证据(如图3所示)。3.快速模式交换快速模式交换通过三条消息建立IPsecSA:头两条消息协商IPsecSA的各项参数值,并生成IPsec使用的密钥;第二条消息还为响应方提供在场的证据;第三条消息为发起方提供在场的证据(如图4所示)。4.新组模式交换通信双方通过新组模式交换协商新的DiffieHellman组。新组模式交换属于一种请求/响应交换。发送方发送提议的组的标识符及其特征,如果响应方能够接收提议,就用完全一样的消息应答(如图5所示)。5.ISAKMP信息交换参与IKE通信的双方均能向对方发送错误及状态提示消息。这实际上并非真正意义上的交换,而只是发送单独一条消息,不需要确认(如图6所示)。三、IKE的安全1.机密性保护IKE使用DiffieHellman组中的加密算法。IKE共定义了五个DiffieHellman组,其中三个组使用乘幂算法(模数位数分别是768、1024、1680位),另两个组使用椭圆曲线算法(字段长度分别是155、185位)。因此,IKE的加密算法强度高,密钥长度大。2.完整性保护及身份验证在阶段1、2交换中,IKE通过交换验证载荷(包含散列值或数字签名)保护交换消息的完整性,并提供对数据源的身份验证。IKE列举了四种验证方法:1预共享密钥;2数字签名;3公钥加密;4改进的公钥加密。3.抵抗拒绝服务攻击对任何交换来说,第一步都是cookie交换。每个通信实体都生成自己的cookie,cookie提供了一定程度的抗拒绝服务攻击的能力。如果在进行一次密钥交换,直到完成cookie交换,才进行密集型的运算,比如DiffieHellman交换所需的乘幂运算,则可以有效地抵抗某些拒绝服务攻击,如简单使用伪造IP源地址进行的溢出攻击。4.防止中间人攻击中间人攻击包括窃听、插入、删除、修改消息,反射消息回到发送者,重放旧消息以及重定向消息。ISAKMP的特征能阻止这些攻击。5.完美向前保密完美向前保密(PFS),指即使攻击者破解了一个密钥,也只能还原这个密钥加密的数据,而不能还原其他的加密数据。要达到理想的PFS,一个密钥只能用于一种用途,生成一个密钥的素材也不能用来生成其他的密钥。我们把采用短暂的一次性密钥的系统称为“PFS”。如果要求对身份的保护也是PFS,则一个IKESA只能创建一个IPsecSA。四、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对等实体通信,协商建立IPsecSA。如果已经创建了IKESA,就可以直接通过阶段2交换,创建新的IPsecSA;如果还没有创建IKESA,就要通过阶段1、2交换创建新的IKESA及IPsecSA。一、总体设计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(PathMaximumTransferUnit)查找。以下分主机实施和路由器实施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的互操作性和配置上的灵活性与可伸缩性,同时有利于软件的复用性。
本文标题:IKE协议与实现
链接地址:https://www.777doc.com/doc-2877254 .html