1.1IPSec体系结构IP安全(IPSecurity)体系结构,简称IPSec,是IETFIPSec工作组于1998年制定的一组基于密码学的安全的开放网络安全协议。IPSec工作在IP层,为IP层及其上层协议提供保护。IPSec提供访问控制、无连接的完整性、数据来源验证、防重放保护、保密性、自动密钥管理等安全服务。IPSec独立于算法,并允许用户(或系统管理员)控制所提供的安全服务粒度。比如可以在两台安全网关之间创建一条承载所有流量的加密隧道,也可以在穿越这些安全网关的每对主机之间的每条TCP连接间建立独立的加密隧道。IPSec在传输层之下,对应用程序和终端用户来说是透明的。当在路由器或防火墙上安装IPSec时,无需更改用户或服务器系统中的软件设置。即使在终端系统中执行IPSec,应用程序之类的上层软件也不会受到影响。1.1.1IPSec的组成IPSec是因特网工程任务组(IETF)定义的一种协议套件,由一系列协议组成,验证头(AH)、封装安全载荷(ESP)、Internet安全关联和密钥管理协议ISAKMP的InternetIP安全解释域(DOI)、ISAKMP、Internet密钥交换(IKE)、IP安全文档指南、OAKLEY密钥确定协议等,它们分别发布在RFC2401~RFC2412的相关文档中。图2.3显示了IPSec的体系结构、组件及各组件间的相互关系。IPSec体系封装安全载荷验证头(AH)加密算法加密算法解释域(DOI)密钥管理策略图2.3IPSec的体系结构AH(认证头)和ESP(封装安全载荷):是IPSec体系中的主体,其中定义了协议的载荷头格式以及它们所能提供的服务,另外还定义了数据报的处理规则,正是这两个安全协议为数据报提供了网络层的安全服务。两个协议在处理数据报文时都需要根据确定的数据变换算法来对数据进行转换,以确保数据的安全,其中包括算法、密钥大小、算法程序以及算法专用的任何信息。IKE(Internet密钥交换):IKE利用ISAKMP语言来定义密钥交换,是对安全服务进行协商的手段。IKE交换的最终结果是一个通过验证的密钥以及建立在通信双方同意基础上的安全服务——亦即所谓的“IPSec安全关联”。SA(安全关联):一套专门将安全服务/密钥和需要保护的通信数据联系起来的方案。它保证了IPSec数据报封装及提取的正确性,同时将远程通信实体和要求交换密钥的IPSec数据传输联系起来。即SA解决的是如何保护通信数据、保护什么样的通信数据以及由谁来实行保护的问题。策略:策略是一个非常重要的但又尚未成为标准的组件,它决定两个实体之间是否能够通信;如果允许通信,又采用什么样的数据处理算法。如果策略定义不当,可能导致双方不能正常通信。与策略有关的问题分别是表示与实施。“表示”负责策略的定义、存储和获取,“实施”强调的则是策略在实际通信中的应用。1.1.2IPSec的工作原理设计IPSec是为了给IPv4和IPv6数据提供高质量的、可互操作的、基于密码学的安全性。IPSec通过使用两种通信安全协议来达到这些目标:认证头(AH)和封装安全载荷(ESP),以及像Internet密钥交换(IKE)协议这样的密钥管理过程和协议来达到这些目标。IPAH协议提供数据源认证,无连接的完整性,以及一个可选的抗重放服务。ESP协议提供数据保密性,有限的数据流保密性,数据源认证,无连接的完整性以及抗重放服务。对于AH和ESP都有两种操作模式:传输模式和隧道模式。IKE协议用于协商AH和ESP所使用的密码算法,并将算法所需要的密钥放在合适的位置。IPSec所使用的协议被设计成与算法无关的。算法的选择在安全策略数据库(SPD)中指定。IPSec允许系统或网络的用户和管理员控制安全服务提供的粒度。通过使用安全关联(SA),IPSec能够区分对不同数据流提供的安全服务。IPSec本身是一个开放的体系,随着网络技术的进步和新的加密、验证算法的出现,通过不断加入新的安全服务和特性,IPSec就可以满足未来对于信息安全的需要。随着互联网络技术的不断进步,IPSec作为网络层安全协议,也是在不断地改进和增加新的功能。其实在IPSec的框架设计时就考虑过系统扩展问题。例如在ESP和AH的文档中定义有协议、报头的格式以及它们提供的服务,还定义有数据报的处理规则,但是没有指定用来实现这些能力的具体数据处理算法。AH默认的、强制实施的加密MAC是HMAC-MD5和HMAC-SHA,在实施方案中其它的加密算法DES-CBC、CAST-CBC以及3DES-CBC等都可以作为加密器使用。1.1.3IPSec的模式IPSec协议(包括AH和ESP)既可以用来保护一个完整的IP载荷,也可以用来保护某个IP载荷的上层协议。这两个方面的保护分别由IPSec两种不同的“模式”来提供:传输模式和隧道模式。传输模式:在传输模式中,IP头与上层协议头之间需插入一个特殊的IPSec头。传输模式保护的是IP包的有效载荷或者说保护的是上层协议(如TCP、UDP和ICMP),如图2.4所示。在通常情况下,传输模式只用于两台主机之间的安全通信。受保护的内容IP头IPSec头TCP头数据新增的保护头(AH\ESP)图2.4IPSec传输模式的IP数据报格式隧道模式:隧道模式为整个IP包提供保护。如图2.5所示,要保护的整个IP包都需封装到另一个IP数据报中,同时在外部与内部IP头之间插入一个IPSec头。所有原始的或内部包通过这个隧道从IP网的一端传递到另一端,沿途的路由器只检查最外面的IP报头,不检查内部原来的IP报头。由于增加了一个新的IP报头,因此,新IP报文的目的地址可能与原来的不一致。图2.5IPSec隧道模式的IP数据报格式在千兆网络加密工程实现上,我们需要的是根据IPSec协议,实现一个安全网关设备,为了保证数据的机密性,考虑采用隧道模式的ESP封装。由于IKE协议是通过软件实现的,而本文着重讨论IPSec的硬件实现部分,故本文不再介绍IKE协议。1.1.4IPSec的实现方式IPSECAH和ESP四种包封装格式受保护的内容新IP头IPSec头IP头数据新增的保护头TCP头IPSec可以在主机、路由器或防火墙(创建一个安全网关)中同时实施和部署。用户可以根据对安全服务的需要决定究竟在什么地方实施,IPSec的实现方式可分为集成方式、BITS方式、BITW方式三种。集成方式:把IPSec集成到IP协议的原始实现中,这需要处理IP源代码,适用于在主机和安全网关中实现。“堆栈中的块(BITS)”方式:把IPSec作为一个“锲子”插在原来的IP协议栈和链路层之间。这不需要处理IP源代码,适用于对原有系统的升级改造。这种方法通常用在主机方式中。“线缆中的块(BITW)”方式:这是本文采用实现IPSec的方式,它将IPSec的实现在一个设备中进行,该设备直接接入路由器或主机设备。当用于支持一台主机时,与BITS实现非常相似,但在支持路由器或防火墙时,它必须起到一台安全网关的作用。1.1.5IPSec协议的处理IPSec处理分两类:外出处理和进入处理。1.1.5.1外出处理在外出处理的过程中,数据包从传输层流进IP层。IP层首先取出IP头的有关参数,检索SPDB数据库,判断应为这个包提供那些安全服务。输入SPDB的是传送报头中的源地址和目的地址的“选择符”。SPDB输出的是根据“选择符”查询的策略结果,有可能出现以下几种情况:丢弃这个包。此时包不会得以处理,只是简单地丢掉。绕过安全服务。在这种情况下,这个IP包不作任何处理,按照一个普通的IP包发送出去。应用安全服务。在这种情况下,需要继续进行下面的处理。如果SPDB的策略输出中指明该数据包需要安全保护,那么接着就是查询SADB来验证与该连接相关联的SA是否已经建立,查询的结果可能是下面的两种情况之一:如果相应的SA已存在,对SADB的查询就会返回指向该SA的指针;如果查询不到相应的SA,说明该数据包所属的安全通信连接尚未建立,就会调用IKE进行协商,将所需要的SA建立起来。如果所需要的SA已经存在,那么SPDB结构中包含指向SA或SA集束的一个指针(具体由策略决定)。如果SPDB的查询输出规定必须将IPSec应用于数据包,那么在SA成功创建完成之前,数据包是不被允许传送出去的。对于从SADB中查询得到的SA还必须进行处理,处理过程如下:1.如果SA的软生存期已满,就调用IKE建立一个新的SA。2.如果SA的硬生存期已满,就将这个SA删除。3.如果序列号溢出,就调用IKE来协商一个新的SA。SA处理完成后,IPSec的下一步处理是添加适当的AH或ESP报头,开始对数据包进行处理。其中涉及到对负载数据的加密、计算校验等在下面的内容中会给予详细的介绍。SA中包含所有必要的信息,并已排好顺序,使IPSec报头能够按正确的顺序加以构建。在完成IPSec的报头构建后,将生成的数据报传送给原始IP层进行处理,然后进行数据报的发送。1.1.5.2进入处理进入处理中,在收到IP包后,假如包内根本没有包含IPSec报头,那么IPSec就会查阅SPDB,并根据为之提供的安全服务判断该如何对这个包进行处理。因为如果特定通信要求IPSec安全保护,任何不能与IPSec保护的那个通信的SPDB定义相匹配的进入包就应该被丢弃。它会用“选择符”字段来检索SPDB数据库。策略的输出可能是以下三种情况:丢弃、绕过或应用。如果策略的输出是丢弃,那么数据包就会被放弃;如果是应用,但相应的SA没有建立,包同样会被丢弃;否则就将包传递给下一层作进一步的处理。如果IP包中包含了IPSec报头,就会由IPSec层对这个包进行处理。IPSec从数据包中提取出SPI、源地址和目的地址组织成SPI,目的地址,协议三元组对SADB数据库进行检索(另外还可以加上源地址,具体由实施方案决定)。协议值要么是AH,要么是ESP。根据这个协议值,这个包的处理要么由AH协议来处理,要么由ESP来处理。在协议处理前,先对重放攻击和SA的生存期进行检查,把重放的报文或SA生存期已到的包简单丢弃而不作任何处理。协议载荷处理完成之后,需要查询SPDB对载荷进行校验,“选择符”用来作为获取策略的依据。验证过程包括:检查SA中的源和目的地址是否与策略相对应,以及SA保护的传输层协议是否和要求的相符合。IPSec完成了对策略的校验后,会将IPSec报头剥离下来,并将包传递到下一层。下一层要么是一个传输层,要么是网络层。假如说数据包是IP【ESP【TCP】】,下一层就是传输层;假如这个包是IP【AH【ESP【TCP】】】,下一层仍然是IPSec层。1.1.6认证头(AH)协议1.1.6.1AH的目标IP协议中,用来提供IP数据包完整性的认证机制是非常简单的。IP头通过头部的校验和域来保证IP数据包的完整性。而校验和只是对IP头的每16位计算累加和的反码。这样并没有提供多少安全性,因为IP头很容易修改,可以对修改过的IP头重新计算校验和并用它代替以前的校验和。这样接受端的主机就无法知道数据包己经被修改。设计认证头(AH)协议的目的是用于增加IP数据包的安全性。AH协议提供无连接的完整性(connectionlessintegrity)、数据源认证(dataoriginauthentication)和反重播(anti-replay)攻击服务。然而,AH不提供任何保密性服务,也就是说它不加密所保护的数据包。AH的作用是为IP数据流提供高强度的密码认证,以确保被修改过的数据包可以被检查出来。AH使用消息认证码(MACMessageAuthenticationCode)对IP进行认证。MAC不同于杂凑函数,因为它需要密钥来产生消息摘要,而杂凑函数不需要密钥。常用的MAC是HMAC(基于带密钥的HASH函数的消息认证码),它与任何迭代密码杂凑函数(如MD5,SHA-l,Tiger等)结合使用,而不用对杂凑函数进行修改。由于生成IP数据包的消息摘要需要密钥,所以IPSec的通信双方需要共享一个同样的认证