《计算机网络安全基础-第10章.ppt》由会员分享,可在线阅读,更多相关《计算机网络安全基础-第10章.ppt(100页珍藏版)》请在三一办公上搜索。
1、第10章 IPSec,10.1 IPSec安全体系结构10.2 IPSec安全协议AH10.3 IPSec安全协议ESP10.4 ISAKMP协议10.5 IKE协议10.6 本章小结习题,IPSec(IP Security)是一种由IETF设计的端到端的确保IP层通信安全的机制。IPSec不是一个单独的协议,而是一组协议,这一点对于我们认识IPSec是很重要的。IPSec协议的定义文件包括了12个RFC文件和几十个Internet草案,已经成为工业标准的网络安全协议。,10.1 IPSec安全体系结构 10.1.1 IPSec的概念,IPSec是随着IPv6的制定而产生的,鉴于IPv4的应用
2、仍然很广泛,所以后来在IPSec的制定中也增加了对IPv4的支持。IPSec在IPv6中是必须支持的,而在IPv4中是可选的。本章中提到IP协议时是指IPv4协议。IP协议在当初设计时并没有过多地考虑安全问题,而只是为了能够使网络方便地进行互联互通,因此IP协议从本质上就是不安全的。仅仅依靠IP头部的校验和字段无法保证IP包的安全,修改IP包并重新正确计算校验和是很容易的。如果不采取安全措施,IP通信会暴露在多种威胁之下,下面举几个简单的例子。,(1)窃听一般情况下IP通信是明文形式的,第三方可以很容易地窃听到IP数据包并提取出其中的应用层数据。“窃听”虽然不破坏数据,却造成了通信内容外泄,甚
3、至危及敏感数据的安全。(2)篡改攻击者可以在通信线路上非法窃取到IP数据包,修改其内容并重新计算校验和,数据包的接收方一般不可能察觉出来。作为网络通信用户,即使并非所有的通信数据都是高度机密的,也不想看到数据在传输过程中有任何差错。,(3)IP欺骗在一台机器上可以假冒另外一台机器向接收方发包。接收方无法判断收到的数据包是否真的来自该IP包中所声称的源IP地址。(4)重放攻击法搜集特定的IP包,进行一定的处理,然后再一一重新发送,欺骗接收方主机。,IP协议之所以如此不安全,就是因为IP协议没有采取任何安全措施,既没有对数据包的内容进行完整性验证,又没有进行加密。如今,IPSec协议可以为IP网络
4、通信提供透明的安全服务,保护TCP/IP通信免遭窃听和篡改,保证数据的完整性和机密性,有效抵御网络攻击,同时保持易用性。表10-1列出了与IPSec相关的RFC,如果想进一步了解IPSec的某些内容,请参考相关的网址。,表 101 定义IPSec协议族的各RFC,IPSec具有以下功能:(1)作为一个隧道协议实现了VPN通信IPSec作为第三层的隧道协议,可以在IP层上创建一个安全的隧道,使两个异地的私有网络连接起来,或者使公网上的计算机可以访问远程的企业私有网络。这主要是通过隧道模式实现的,有关传输模式和隧道模式参见小节。,10.1.2 IPSec的功能,(2)保证数据来源可靠在IPSec通
5、信之前双方要先用IKE认证对方身份并协商密钥,只有IKE协商成功之后才能通信。由于第三方不可能知道验证和加密的算法以及相关密钥,因此无法冒充发送方,即使冒充,也会被接收方检测出来。(3)保证数据完整性IPSec通过验证算法功能保证数据从发送方到接收方的传送过程中的任何数据篡改和丢失都可以被检测。(4)保证数据机密性IPSec通过加密算法使只有真正的接收方才能获取真正的发送内容,而他人无法获知数据的真正内容。,IPSec众多的RFC通过如图10.1所示的关系图组织在一起。,10.1.3 IPSec体系结构图,图10.1 IPSec体系结构,从图10.1中可以看出,IPSec包含了3个最重要的协议
6、:AH、ESP和IKE。(1)AH为IP数据包提供如下3种服务:无连接的数据完整性验证、数据源身份认证和防重放攻击。数据完整性验证通过哈希函数(如MD5)产生的校验来保证;数据源身份认证通过在计算验证码时加入一个共享密钥来实现;AH报头中的序列号可以防止重放攻击。,(2)ESP除了为IP数据包提供AH已有的3种服务外,还提供另外两种服务:数据包加密、数据流加密。加密是ESP的基本功能,而数据源身份认证、数据完整性验证以及防重放攻击都是可选的。数据包加密是指对一个IP包进行加密,可以是对整个IP包,也可以只加密IP包的载荷部分,一般用于客户端计算机;数据流加密一般用于支持IPSec的路由器,源端
7、路由器并不关心IP包的内容,对整个IP包进行加密后传输,目的端路由器将该包解密后将原始包继续转发。AH和ESP可以单独使用,也可以嵌套使用。通过这些组合方式,可以在两台主机、两台安全网关(防火墙和路由器),或者主机与安全网关之间使用。,(3)IKE协议负责密钥管理,定义了通信实体间进行身份认证、协商加密算法以及生成共享的会话密钥的方法。IKE将密钥协商的结果保留在安全联盟(SA)中,供AH和ESP以后通信时使用。最后,解释域(DOI)为使用IKE进行协商SA的协议统一分配标识符。共享一个DOI的协议从一个共同的命名空间中选择安全协议和变换、共享密码以及交换协议的标识符等,DOI将IPSec的这
8、些RFC文档联系到一起。,1.安全联盟(SA)理解SA这一概念对于理解IPSec是至关重要的。AH和ESP两个协议都使用SA来保护通信,而IKE的主要功能就是在通信双方协商SA。SA(Security Association,安全联盟)是两个IPSec实体(主机、安全网关)之间经过协商建立起来的一种协定,内容包括采用何种IPSec协议(AH还是ESP)、运行模式(传输模式还是隧道模式)、验证算法、加密算法、加密密钥、密钥生存期、抗重放窗口、计数器等,从而决定了保护什么、如何保护以及谁来保护。可以说SA是构成IPSec的基础。,10.1.4 安全联盟和安全联盟数据库,SA是单向的,进入(inbo
9、und)SA负责处理接收到的数据包,外出(outbound)SA负责处理要发送的数据包。因此每个通信方必须要有两种SA,一个进入SA,一个外出SA,这两个SA构成了一个SA束(SA Bundle)。SA的管理包括创建和删除,有以下两种管理方式。(1)手工管理:SA的内容由管理员手工指定、手工维护。但是,手工维护容易出错,而且手工建立的SA没有生存周期限制,一旦建立了,就不会过期,除非手工删除,因此有安全隐患。,(2)IKE自动管理:一般来说,SA的自动建立和动态维护是通过IKE进行的。利用IKE创建和删除SA,不需要管理员手工维护,而且SA有生命期。如果安全策略要求建立安全、保密的连接,但又不
10、存在与该连接相应的SA,IPSec的内核会立刻启动IKE来协商SA。每个SA由三元组SPI,源/目的IP地址,IPSec协议惟一标识,这3项含义如下:SPI(Security Parameter Index,安全参数索引)是32位的安全参数索引,标识同一个目的地的SA。源/目的IP地址:表示对方IP地址,对于外出数据包,指目的IP地址;对于进入IP包,指源IP地址。IPSec协议:采用AH或ESP。,2.安全联盟数据库(SAD)SAD(Security Association Database,安全联盟数据库)并不是通常意义上的“数据库”,而是将所有的SA以某种数据结构集中存储的一个列表。对于
11、外出的流量,如果需要使用IPSec处理,然而相应的SA不存在,则IPSec将启动IKE来协商出一个SA,并存储到SAD中。对于进入的流量,如果需要进行IPSec处理,IPSec将从IP包中得到三元组,并利用这个三元组在SAD中查找一个SA。,SAD中每一个SA除了上面的三元组之外,还包括下面这些内容。(1)本方序号计数器:32位,用于产生AH或ESP头的序号字段,仅用于外出数据包。SA刚建立时,该字段值设置为0,每次用SA保护完一个数据包时,就把序列号的值递增1,对方利用这个字段来检测重放攻击。通常在这个字段溢出之前,SA会重新进行协商。(2)对方序号溢出标志:标识序号计数器是否溢出。如果溢出
12、,则产生一个审计事件,并禁止用SA继续发送数据包。,(3)抗重放窗口:32位计数器,用于决定进入的AH或ESP数据包是否为重发的。仅用于进入数据包,如接收方不选择抗重放服务(如手工设置SA时),则不用抗重放窗口。(4)AH验证算法、密钥等。(5)ESP加密算法、密钥、IV(Initial Vector)模式、IV等。如不选择加密,该字段为空。(6)ESP验证算法、密钥等。如不选择验证,该字段为空。,(7)SA的生存期:表示SA能够存在的最长时间。生存期的衡量可以用时间也可以用传输的字节数,或将二者同时使用,优先采用先到期者。SA过期之后应建立一个新的SA或终止通信。(8)运行模式:是传输模式还
13、是隧道模式。(9)PMTU:所考察的路径的MTU及其TTL变量。,SP(Security Policy,安全策略)指示对IP数据包提供何种保护,并以何种方式实施保护。SP主要根据源IP地址、目的IP地址、入数据还是出数据等来标识。IPSec还定义了用户能以何种粒度来设定自己的安全策略,由“选择符”来控制粒度的大小,不仅可以控制到IP地址,还可以控制到传输层协议或者TCP/UDP端口等。SPD(Security Policy Database,安全策略数据库)也不是通常意义上的“数据库”,而是将所有的SP以某种数据结构集中存储的列表。,10.1.5 安全策略和安全策略数据库,当要将IP包发送出去
14、时,或者接收到IP包时,首先要查找SPD来决定如何进行处理。存在3种可能的处理方式:丢弃、不用IPSec和使用IPSec。(1)丢弃:流量不能离开主机或者发送到应用程序,也不能进行转发。(2)不用IPSec:对流量作为普通流量处理,不需要额外的IPSec保护。(3)使用IPSec:对流量应用IPSec保护,此时这条安全策略要指向一个SA。对于外出流量,如果该SA尚不存在,则启动IKE进行协商,把协商的结果连接到该安全策略上。,IPSec有两种运行模式:传输模式(Transport Mode)和隧道模式(Tunnel Mode)。AH和ESP都支持这两种模式,因此有4种可能的组合:传输模式的AH
15、、隧道模式的AH、传输模式的ESP和隧道模式的ESP。,10.1.6 IPSec运行模式,1.IPSec传输模式传输模式要保护的内容是IP包的载荷,可能是TCP/UDP等传输层协议,也可能是ICMP协议,还可能是AH或者ESP协议(在嵌套的情况下)。传输模式为上层协议提供安全保护。通常情况下,传输模式只用于两台主机之间的安全通信。正常情况下,传输层数据包在IP中被添加一个IP头部构成IP包。启用IPSec之后,IPSec会在传输层数据前面增加AH或者ESP或者二者同时增加,构成一个AH数据包或者ESP数据包,然后再添加IP头部组成新的IP包。,以TCP协议为例,应用IPSec之后包的格式有下面
16、3种可能(阴影表示新增的部分)。应用AH:IPAHTCP应用ESP:IPESPTCP应用AH和ESP:IPAHESPTCP,2.IPSec隧道模式隧道模式保护的内容是整个原始IP包,隧道模式为IP协议提供安全保护。通常情况下,只要IPSec双方有一方是安全网关或路由器,就必须使用隧道模式。如果路由器要为自己转发的数据包提供IPSec安全服务,就要使用隧道模式。路由器主要依靠检查IP头部来做出路由决定,不会也不应该修改IP头部以外的其他内容。如果路由器对要转发的包插入传送模式的AH或ESP头部,便违反了路由器的规则。,路由器将需要进行IPSec保护的原始IP包看作一个整体,将这个IP包作为要保护
17、的内容,前面添加AH或者ESP头部,然后再添加新的IP头部,组成新的IP包之后再转发出去。以ESP为例,示意如下。应用ESP:IPESPIP+TCPIPSec隧道模式的数据包有两个IP头:内部头和外部头。内部头由路由器背后的主机创建,外部头由提供IPSec的设备(可能是主机,也可能是路由器)创建。隧道模式下,通信终点由受保护的内部IP头指定,而IPSec终点则由外部IP头指定。如IPSec终点为安全网关,则该网关会还原出内部IP包,再转发到最终目的地。,AH(Authentication Header,验证头部协议)由RFC2402定义,是用于增强IP层安全的一个IPSec协议,该协议可以提供
18、无连接的数据完整性、数据来源验证和抗重放攻击服务。,10.2 IPSec安全协议AH 10.2.1 AH概述,AH协议对IP层的数据使用密码学中的验证算法,从而使得对IP包的修改可以被检测出来。具体地说,这个验证算法是密码学中的MAC(Message Authentication Codes,报文验证码)算法,MAC算法将一段给定的任意长度的报文和一个密钥作为输入,产生一个固定长度的输出报文,称为报文摘要或者指纹。MAC算法与HASH算法非常相似,区别在于MAC算法需要一个密钥(key),而HASH算法不需要。实际上,MAC算法一般是由HASH算法演变而来,也就是将输入报文和密钥结合在一起然后
19、应用HASH算法。这种MAC算法称为HMAC,例如HMACMD5、HMACSHA1、HMACRIPEMD160。,通过HMAC算法可以检测出对IP包的任何修改,不仅包括对IP包的源/目的IP地址的修改,还包括对IP包载荷的修改,从而保证了IP包内容的完整性和IP包来源的可靠性。为了使通信双方能产生相同的报文摘要,通信双方必须采用相同的HMAC算法和密钥。对同一段报文使用不同的密钥来产生相同的报文摘要是不可能的。因此,只有采用相同的HMAC算法并共享密钥的通信双方才能产生相同的验证数据。不同的IPSec系统,其可用的HMAC算法也可能不同,但是有两个算法是所有IPSec都必须实现的:HMAC-M
20、D5和HMAC-SHA1。,AH协议和TCP、UDP协议一样,是被IP协议封装的协议之一。一个IP包的载荷是否是AH协议,由IP协议头部中的协议字段判断,正如TCP协议是6,UDP协议是17一样,AH协议是51。如果一个IP包封装的是AH协议,在IP包头(包括选项字段)后面紧跟的就是AH协议头部,格式如图10.2所示。AH头部格式包括以下内容。,10.2.2 AH头部格式,图10.2 AH头部,(1)下一个头(Next Header)最开始的8位,表示紧跟在AH头部的下一个载荷的类型,也就是紧跟在AH头部后面数据的协议。在传输模式下,该字段是处于保护中的传输层协议的值,比如6(TCP)、17(
21、UDP)或者50(ESP)。在隧道模式下,AH所保护的是整个IP包,该值是4,表示IP-in-IP协议。(2)载荷长度(Payload Length)接下来的8位,其值是以32位(4字节)为单位的整个AH数据(包括头部和变长的认证数据)的长度再减2。(3)保留(reserved)16位,作为保留用,实现中应全部设置为0。,(4)SPI(Security Parameter Index,安全参数索引)SPI是一个32位整数,与源/目的IP地址、IPSec协议一起组成的三元组可以为该IP包惟一地确定一个SA。1,255保留为将来使用,0保留本地的特定实现使用。因此,可用的SPI值为256,232-
22、1。(5)序列号(Sequence Number)序列号是一个32位整数,作为一个单调递增的计数器,为每个AH包赋予一个序号。当通信双方建立SA时,计数器初始化为0。SA是单向的,每发送一个包,外出SA的计数器增1;每接收一个包,进入SA的计数器增1。该字段可以用于抵抗重放攻击。,(6)验证数据(Authentication Data)可变长部分,包含了验证数据,也就是HMAC算法的结果,称为ICV(Integrity Check Value,完整性校验值)。该字段必须为32位的整数倍,如果ICV不是32位的整数倍,必须进行填充,用于生成ICV的算法由SA指定。,AH有两种运行模式:传输模式和
23、隧道模式。1.AH运输模式在传输模式中,AH插入到IP头部(包括IP选项字段)之后,传输层协议(如TCP、UDP)或者其他IPSec协议之前。以TCP数据为例,图10.3表示了AH在传输模式中的位置。,10.2.3 AH运行模式,图10.3 AH传输模式,从图10.3可以看出,被AH验证的区域是整个IP包(可变字段除外,有关可变字段参见小节),包括IP包头部,因此源IP地址、目的IP地址是不能修改的,否则会被检测出来。然而,如果该包在传送的过程中经过NAT(Network Address Translation,网络地址转换)网关,其源/目的IP地址将被改变,将造成到达目的地址后的完整性验证失
24、败。因此,AH在传输模式下和NAT是冲突的,不能同时使用,或者可以说AH不能穿越NAT。,2.AH隧道模式在隧道模式中,AH插入到原始IP头部字段之前,然后在AH之前再增加一个新的IP头部。以TCP为例,图10.4表示了AH在隧道模式中的位置。,图10.4 AH隧道模式,隧道模式下,AH验证的范围也是整个IP包,因此上面讨论的AH和NAT的冲突在隧道模式下也存在。在隧道模式中,AH可以单独使用,也可以和ESP一起嵌套使用。,在应用AH进行处理时,相应的SA应该已经建立,因此AH所用到的HMAC算法和密钥已经确定。从上面的传输模式和隧道模式可以看出,AH协议验证的范围包括整个IP包,验证过程概括
25、如下:在发送方,整个IP包和验证密钥被作为输入,经过HMAC算法计算后得到的结果被填充到AH头部的“验证数据”字段中;在接收方,整个IP包和验证算法所用的密钥也被作为输入,经过HMAC算法计算的结果和AH头部的“验证数据”字段进行比较,如果一致,说明该IP包数据没有被篡改,内容是真实可信的。,10.2.4 数据完整性检查,在应用HMAC算法时,有一些因素需要考虑。在IP字段中,有一些是可变的,而且在传输过程中被修改也是合理的,不能说明该数据包是被非法篡改的。这些字段在计算HMAC时被临时用0填充,具本包括如下。ToS(Type of Service):8位的服务类型字段指出了延时、吞吐量和可靠
26、性方面的要求。某些路由器会修改该字段以达到特定的QoS服务质量。标志字段:这是指用于表示分片的3位标志DF(Dont Fragment)、MF(More Fragments)和0。路由器可能会修改这3个标志。,分片偏移字段:标志字段后面的13位的偏移字段。TTL:生命期,为了防止IP包的无限次路由,每经过一个路由器,该字段减1,当TTL变为0时,被路由器抛弃。头部校验和:中间路由器对IP包头部作了任何修改之后,必须重新计算头部校验和,因此该字段也是可变的。选项字段。另外,AH头部的验证数据字段在计算之前也要用0填充,计算之后再填充验证结果。,对于一个IP包,除上述可变字段外,其余部分都认为是应
27、该不变的,这些部分也正是受到AH协议保护的部分。具体来说,这些不变的部分包括如下。版本字段。头部长度字段。IP总长字段。ID字段。协议字段。源IP地址字段。目的地址字段。AH头中除“验证数据”以外的其他字段。,数据:指经过AH处理之后,在AH头部后面的数据。传输方式下,指TCP、UDP或ICMP等传输层数据;隧道模式下,指被封装的原IP包。,与AH一样,ESP(Encapsulating Security Payload,封装安全载荷)协议也是一种增强IP层安全的IPSec协议,由RFC2406定义。ESP协议除了可以提供无连接的完整性、数据来源验证和抗重放攻击服务之外,还提供数据包加密和数据
28、流加密服务。,10.3 IPSec安全协议ESP 10.3.1 ESP概述,ESP协议提供数据完整性和数据来源验证的原理和AH一样,也是通过验证算法实现。然而,与AH相比,ESP验证的数据范围要小一些。ESP协议规定了所有IPSec系统必须实现的验证算法:HMAC-MD5、HMAC-SHA1、NULL。NULL认证算法是指实际不进行认证。数据包加密服务通过对单个IP包或IP包载荷应用加密算法实现;数据流加密是通过隧道模式下对整个IP包应用加密算法实现。ESP的加密采用的是对称密钥加密算法。与公钥加密算法相比,对称加密算法可以提供更大的加密/解密吞吐量。不同的IPSec实现,其加密算法也有所不同
29、。为了保证互操作性,ESP协议规定了所有IPSec系统都必须实现的算法:DES-CBC、NULL。NULL加密算法是指实际不进行加密。,之所以有NULL算法,是因为加密和认证都是可选的,但是ESP协议规定加密和认证不能同时为NULL。换句话说,如果采用ESP,加密和认证至少必选其一,当然也可以二者都选,但是不能二者都不选。,ESP协议和TCP、UDP、AH协议一样,是被IP协议封装的协议之一。一个IP包的载荷是否是ESP协议,由IP协议头部中的协议字段判断,ESP协议字段是50。如果一个IP包封装的是ESP协议,在IP包头(包括选项字段)后面紧跟的就是ESP协议头部,格式如图10.5所示。ES
30、P头部格式包括以下内容。,10.3.2 ESP头部格式,图10.5 ESP头部格式,(1)SPISPI是一个32位整数,与源/目的IP地址、IPSec协议一起组成的三元组可以为该IP包惟一地确定一个SA。(2)序列号(Sequence Number)序列号是一个32位整数,作为一个单调递增的计数器,为每个ESP包赋予一个序号。当通信双方建立SA时,计数器初始化为0。SA是单向的,每发送一个包,外出SA的计数器增1;每接收一个包,进入SA的计数器增1。该字段可以用于抵抗重放攻击。,(3)载荷数据(Payload Data)这是变长字段,包含了实际的载荷数据。不管SA是否需要加密,该字段总是必需的
31、。如果采用了加密,该部分就是加密后的密文;如果没有加密,该部分就是明文。如果采用的加密算法需要一个IV(Initial Vector,初始向量),IV也是在本字段中传输的。该加密算法的规范必须能够指明IV的长度以及在本字段中的位置。本字段的长度必须是8位的整数倍。(4)填充(Padding)填充字段包含了填充位。(5)填充长度(Pad Length)填充长度字段是一个8位字段,以字节为单位指示了填充字段的长度,其范围为0,255。,(6)下一个头(Next Header)8位字段,指明了封装在载荷中的数据类型,例如6表示TCP数据。(7)验证数据(Authentication Data)变长字
32、段。只有选择了验证服务时才会有该字段,包含了验证的结果。,和AH一样,ESP也有两种运行模式:传输模式和隧道模式。运行模式决定了ESP插入的位置以及保护的对象。,10.3.3 ESP运行模式,1.ESP传输模式传输模式保护的是IP包的载荷,例如TCP、UDP、ICMP等,也可以是其他IPSec协议的头部。ESP插入到IP头部(含选项字段)之后,任何被IP协议所封装的协议(如传输层协议TCP、UDP、ICMP,或者IPSec协议)之前。以TCP为例,图10.6是在应用ESP传输模式前后的IP包格式。,图10.6 ESP传输模式,在图10.6中,ESP头部包含SPI和序号字段,ESP尾部包含填充、
33、填充长度和下一个头字段。被加密和被验证的区域在图中已经表示出来了。如果使用了加密,SPI和序号字段不能被加密。首先,在接收端,SPI字段用于和源IP地址、IPSec协议一起组成一个三元组来惟一确定一个SA,利用该SA进行验证、解密等后续处理。如果SPI被加密了,要解密之就必须找到SA,而查找SA又需要SPI,这样就产生了类似于“先有鸡还是先有鸡蛋”的问题。因此,SPI不能被加密。其次,序号字段用于判断包是否重复,从而可以防止重放攻击。序号字段不会泄漏明文中的任何机密,没有必要进行加密。不加密序号字段也使得一个包不经过繁琐的解密过程就可以判断包是否重复,如果重复则丢弃之,节省了时间和资源。,如果
34、使用了验证,验证数据也不会被加密,因为如果SA需要ESP的验证服务,那么接收端会在进行任何后续处理(例如检查重放、解密)之前进行验证。数据包只有经过验证证明该包没有经过任何修改,是可以信任的,才会进行后续处理。值得注意的是,和AH不同,ESP的验证不会对整个IP包进行验证,IP包头部(含选项字段)不会被验证。因此,ESP不存在像AH那样的和NAT模式冲突的问题。如果通信的任何一方具有私有地址或者在安全网关背后,双方的通信仍然可以用ESP来保护其安全,因为IP头部中的源/目的IP地址和其他字段不被验证,可以被NAT网关或者安全网关修改。,当然,ESP在验证上的这种灵活性也有缺点:除了ESP头部之
35、外,任何IP头部字段都可以修改,只要保证其校验和计算正确,接收端就不能检测出这种修改。所以,ESP传输模式的验证服务要比AH传输模式弱一些。如果需要更强的验证服务并且通信双方都是公有IP地址,应该采用AH来验证,或者将AH认证与ESP验证同时使用。,2.ESP隧道模式隧道模式保护的是整个IP包,对整个IP包进行加密。ESP插入到原IP头部(含选项字段)之前,在ESP之前再插入新的IP头部。以TCP为例,图10.7是在应用ESP传输模式前后的IP包格式。,图10.7 ESP隧道模式,在隧道模式下,有两个IP头部。里面的IP头部是原始的IP头部,含有真实的源IP地址、最终的目的IP地址;外面的IP
36、头部可以包含与里面IP头部不同的IP地址,例如,可以是NAT网关的IP地址,这样两个子网中的主机可以利用ESP进行安全通信。与传输模式一样,ESP头部含有SPI和序号字段;ESP尾部含有填充、填充头部和下一个头字段;如果选用了验证,ESP的验证数据字段中包含了验证数据。同样,ESP头部和ESP验证数据字段不被加密。,隧道模式中的加密和验证的范围如图10.7所示,内部IP头部被加密和验证,而外部IP头部既不被加密也不被验证。不被加密是因为路由器需要这些信息来为其寻找路由;不被验证是为了能适用于NAT等情况。重要的是,ESP隧道模式的验证和加密能够提供比ESP传输模式更加强大的安全功能,因为隧道模
37、式下对整个原始IP包进行验证和加密,可以提供数据流加密服务;而ESP在传输模式下不能提供流加密服务,因为源、目的IP地址不被加密。,不过,隧道模式下将占用更多的带宽,因为隧道模式要增加一个额外的IP头部。因此,如果带宽利用率是一个关键问题,则传输模式更合适。尽管ESP隧道模式的验证功能不像AH传输模式或隧道模式那么强大,但ESP隧道模式提供的安全功能已经足够了。,ISAKMP(Internet Security Association Key Management Protocol,Internet安全联盟密钥管理协议)由RFC2408定义,定义了协商、建立、修改和删除SA的过程和包格式。IS
38、AKMP只是为SA的属性和协商、修改、删除SA的方法提供了一个通用的框架,并没有定义具体的SA格式。,10.4 ISAKMP协议 10.4.1 ISAKMP概述,ISAKMP没有定义任何密钥交换协议的细节,也没有定义任何具体的加密算法、密钥生成技术或者认证机制。这个通用的框架是与密钥交换独立的,可以被不同的密钥交换协议使用。ISAKMP报文可以利用UDP或者TCP,端口都是500,一般情况下常用UDP协议。,ISAKMP双方交换的内容称为载荷(payload),ISAKMP目前定义了13种载荷,一个载荷就像积木中的一个“小方块”,这些载荷按照某种规则“叠放”在一起,然后在最前面添加上ISAKM
39、P头部,这样就组成了一个ISAKMP报文,这些报文按照一定的模式进行交换,从而完成SA的协商、修改和删除等功能。在讨论具体载荷之前,先看看ISAKMP载荷头部格式。,ISAKMP报文的头部是固定长度的,包含了维护状态、处理载荷必要的信息;头部后面的载荷数目不定。ISAKMP报文头部格式如图10.8所示。,10.4.2 ISAKMP包头部格式,图 10.8 ISAKMP报文头部,ISAKMP报文头部格式包括以下内容。(1)发起方Cookie(Initiator Cookie)发起方的Cookie,长度为64位(8字节)。Cookie可以帮助通信双方确认一个ISAKMP报文是否真的来自对方。在发起
40、方,如果收到的某报文的应答方Cookie字段和以前收到的该字段不同,则丢弃该报文;同样,在应答方,如果收到的某报文的发起方Cookie和以前收到的该字段不同,则丢弃该报文。这种机制可以防止DOS攻击。,尽管Cookie的生成方法在实现不同的ISAKMP时可能不同,但无论发起方还是响应方,Cookie必须满足两个条件:Cookie必须是用各自的机密信息生成的,该机密信息不能从Cookie中推导出来;对于一个SA,其Cookie是惟一的,也就是说对于一次SA协商过程,Cookie不能改变。常用的一个生成Cookie的方法是对下述信息进行HASH(MD5、SHA1或其他HASH算法)之后,取结果的前
41、64位:源IP地址目的IP地址UDP源端口UDP目的端口随机数当前日期当前时间,(2)应答方Cookie(Responder Cookie)应答方的Cookie,紧跟在发起方Cookie之后,长度为64位(8字节)。(3)下一个载荷(Next Payload)表示紧跟在ISAKMP头部之后的第一个载荷的类型值。目前定义了13种载荷,类型值如表10-2所示。长度为4位,表示ISAKMP协议的主版本号。,表 102 ISAKMP定义的载荷类型值,(4)主版本(Major Version)长度为4位,表示ISAKMP协议的主版本号。(5)次版本(Minor Version)长度为4位,表示ISAKM
42、P协议的次版本号。(6)交换类型(Exchange Type)长度为8位,表示该报文所属的交换类型。目前定义了5种交换类型,如表10-3所示。,表 103 ISAKMP交换类型,(7)标志(Flags)长度为8位,目前只有后3位有用,其余保留,用0填充。后3位的含义从最后一位往前依次为:加密位(encryption),0 x01。加密位如果是1,表示ISAKMP头部后面的所有载荷都被加密了;如果是0,表示载荷是明文,没有加密。提交位(commit),0 x02。纯验证位(Authentication Only),0 x04。(8)报文ID(Message ID)长度32位,包含的是由第二阶段协
43、商的发起方生成的随机值,这个惟一的报文标识可以惟一确定第二阶段的协议状态。,(9)报文长度(length)长度32位,以字节为单位表示了ISAKMP整个报文(头部+若干载荷)的总长度。,不论何种载荷,都有一个相同格式的载荷头部,图10.9表示了这个通用的载荷头部格式。载荷头部格式包括以下内容。(1)下一个载荷(Next Payload)8位字段,表示紧跟在本载荷后面的下一个载荷的类型。通过该字段,不同的载荷可以像链条一样链接起来,每个载荷的类型都在前一个载荷中指明,第一个载荷的类型在ISAKMP头部中指明,最后一个载荷的Next Payload类型为0,从而指明这是最后一个载荷。,10.4.3
44、 ISAKMP载荷头部,图10.9 载荷头部,(2)保留(reserved)保留用,8位字段,全0。(3)载荷长度(Payload Length)以字节为单位表示的载荷长度(包括载荷头部),16位字段,该字段定义了每个载荷的边界。,1.SA载荷SA载荷用于协商SA,并且指出协商发生的环境,也就是DOI。ISAKMP协议只是为协商、修改、删除SA的过程定义了一个框架,而SA的内容、SA的属性、某些载荷的特定字段等还需要应用ISAKMP的协议来具体定义和实现,这些具体的实现就构成了DOI,比如正在讨论的IPSec就是一种DOI。2.建议载荷(proposal)建议载荷包含的是在SA协商过程中用到的
45、信息。该载荷提供了一个框架,利用这个框架发起方向接收方发送自己的建议,例如期望的IPSec协议和其他安全机制。,10.4.4 ZISAKMP载荷,3.变换载荷(transform)变换载荷包括变换编号(Transform Number)和变换ID(Transform ID);前者表示本载荷在建议载荷中的编号,后者确定变换ID取值。4.密钥交换载荷(Key Exchange)密钥交换载荷用于传输密钥交换数据,这个载荷不局限于任何密钥交换协议。除了通用载荷头部外,该载荷只包含一个变长的密钥交换数据字段,该字段的组成格式及如何解释由具体的密钥交换协议具体定义,因此该载荷适用于任何通常用的密钥交换协议
46、。,5.身份载荷(identification)通信双方利用身份载荷互相交换身份信息。在SA协商的时候,发起方要通过该载荷告诉对方自己的身份,而响应方利用发起方的身份来决定应该采用何种安全策略。6.证书载荷(certificate)证书载荷允许通信双方交换各自的证书,或者与证书相关的其他内容。7.证书请求载荷(Certificate Request)通信双方可以利用证书请求载荷来请求对方发送证书。一方在收到该请求后,如果支持证书,就必须利用证书载荷来发送对方所请求的证书。如果有多个证书,请求方就必须发送多次证书请求载荷,接收方发送多次证书载荷。,8.哈希(Hash)载荷该载荷包含的是Hash验
47、证函数产生的数据,该函数是SA协商过程中双方协商出来的Hash函数。Hash数据一般用于验证包含在ISAKMP报文中的其余部分数据的完整性,或者对协商实体进行鉴别。9.签名载荷(signature)签名载荷包含由数字签名函数所产生的数据,该函数是SA协商过程中双方协商出来的。此载荷用来认证ISAKMP报文的完整性,还可用作不可否认服务。,10.Nonce载荷Nonce载荷包含在交换期间用于保证存活和防止重放攻击的随机数。如果Nonce用于特殊的密钥交换协议,Nonce载荷的使用将由该密钥交换机制来指定。Nonce可作为密钥交换载荷的交换数据的一部分,或作为一个独立的载荷发送。具体如何发送,由密
48、钥交换来定义,而不是ISAKMP。11.通知载荷(notification)通知载荷用于告知对方一些信息,例如错误状态。,12.删除载荷(delete)通信一方利用删除载荷告诉对方自己已经从SAD中删除给定IPSec协议(IAKMP、AH或者ESP)的SA。注意:删除载荷并不是命令对方删除SA,而是建议对方删除SA。如果对方选择忽略该删除载荷,则对方以后再使用该SA所发送的报文将失败。另外,对于该删除报文不需要对方应答,也就是说对方不需要返回删除是否成功的报文。13.ID厂商载荷(Vendor ID)厂商ID载荷用于传输厂商定义的常数。这个机制允许厂商在维持向后兼容性的同时,试验新的特性。,I
49、SAKMP的协商过程分为两个阶段:阶段1和阶段2。两个阶段所协商的对象不同,但协商过程的交换方式(见小节)是由ISAKMP定义的或者由密钥交换协议(例如IKE)定义的。(1)阶段1这个阶段要协商的SA可以称为ISAKMP SA(在IKE中可以称为IKE SA),该SA是为了保证阶段2的安全通信。,10.4.5 ISAKMP协商阶段,(2)阶段2这个阶段要协商的SA是密钥交换协议最终要协商的SA,当IKE为IPSec协商时可以称为IPSec SA,是保证AH或者ESP的安全通信。阶段2的安全由阶段1的协商结果来保证。阶段1所协商的一个SA可以用于协商多个阶段2的SA。,ISAKMP定义了5种交换
50、类型。交换类型定义的是在通信双方所传送的载荷的类型和顺序,比如一方先发送什么载荷,另一方应如何应答等。这些交换模式的区别在于对传输信息的保护程度不同,并且传输的载荷多少也不同。,10.4.6 交换类型,5种交换类型分别是:(1)基本交换(Base Exchange)。(2)身份保护交换(Identity Protection Exchange)。(3)纯认证交换(Authentication Only Exchange)。(4)积极交换(Aggressive Exchange)。(5)信息交换(Informational Exchange)。,IKE是一种混合型协议,由RFC2409定义,包含