Cisco IPSec VPN实战指南
上QQ阅读APP看书,第一时间看更新

3.3 互联网密钥交换协议IKE(Internet Key Exchange)

经过上文介绍,读者应该已经熟悉了IPSec框架所提供的主要服务,即IPSec VPN需要预先协商加密协议、散列函数、封装协议、封装模式和密钥有效期等内容。具体执行协商任务的协议叫做互联网密钥交换协议IKE。IKE主要完成如下3个方面的任务:

对建立IPSec 的双方进行认证(需要预先协商认证方式);

通过密钥交换,产生用于加密和HMAC 的随机密钥;

协商协议参数(加密协议、散列函数、封装协议、封装模式和密钥有效期)。

协商完成后的结果就叫做安全关联SA,也可以说IKE建立了安全关联。SA一共有两种类型,一种叫做IKE SA,另一种叫做IPSec SA。IKE SA 维护了安全防护(加密协议、散列函数、认证方式、密钥有效期等)IKE 协议的细节。IPSec SA 则维护了安全防护实际用户流量(通信点之间流量)的细节。

IKE由三个协议组成,如图3-24所示。

图3-24 IKE的3大组成协议

SKEME 决定了IKE 的密钥交换方式,IKE 主要使用DH 来实现密钥交换。

Oakley决定了IPSec 的框架设计,让IPSec 能够支持更多的协议。

ISAKMP 是IKE 的本质协议,它决定了IKE 协商包的封装格式,交换过程和模式的切换。

3.3.1 IKE 与ISAKMP

ISAKMP是IKE的核心协议,所以我们经常会把IKE与ISAKMP这两个术语互换使用。例如,IKE SA 也经常被说成ISAKMP SA。在配臵IPSec VPN 的时候,主要的配臵内容也是 ISAKMP。另外,SKEME 和 Oakley没有任何相关的配臵内容,因此很多网络技术人员常常会认为IKE和ISAKMP是相同的概念。如果一定要对IKE和ISAKMP进行区分的话,那么由于SKEME的存在,因此IKE能够决定密钥交换的方式,但是ISAKMP只能够为密钥交换来交换数据包,但却不能决定密钥交换实现的方式。

3.3.2 IKE 的2 个阶段与3 个模式

图3-25是IKE协商示意图,从该图中,我们可以看到IKE协商分为两个不同阶段:第一阶段和第二阶段。第一阶段协商分别可以使用6个包交换的主模式或者3个包交换的主动模式来完成,第一阶段协商的主要目的就是对建立IPSec的双方进行认证,以确保只有合法的对等体(peer)才能够建立 IPSec VPN。协商得到的结果就是IKESA。第二阶段总是使用3 个包交换的快速模式来完成,第二阶段的主要目的就是根据需要加密的实际流量(感兴趣流),来协商保护这些流量的策略。协商的结果就是IPSec SA。

图3-25 IKE的2个阶段与3个模式

我们对这一过程做一个简单的比喻:IKE 协商过程就像两个公司做生意的过程。两个公司在具体合作之前需要相互了解,最简单的方法可能就是核查对方公司的工商牌照、公司营业和信誉状况。也很有可能是约一个地点,坐下来面对面地进行介绍和了解。不管怎么样,目的就是相互进行认证,建立基本的信任关系。这个过程其实就是IKE第一个阶段需要完成的任务。第一阶段完成后,信任关系建立了,相应的IKESA 也就建立了。紧接着的主要任务就是基于具体的项目来签订合同。对于IPSec VPN而言,具体的项目就是安全保护通信点之间的流量,具体处理这些流量的策略(IPSec SA)就是合同。IKE第二阶段的任务就是基于需要被加密的流量(A到B)协商相应的IPSec SA。一旦双方在第一阶段建立起了信任关系,它们就没有必要重复进行认证了。接下来,双方的议题就是根据第一阶段建立的IKE SA,给两个站点之间的很多需要被加密的流量协商不同的第二阶段策略(IPSec SA)。

现在我们回头说说第一阶段的两种模式。既然第一阶段既可以使用主模式,也可以使用主动模式来完成,那么什么情况应该使用主模式,什么情况应该使用主动模式呢?以Cisco 的IPSec VPN 为例,只有在一种情况下,第一阶段才会使用3 数据个包交换的主动模式来完成,这就是通过预共享密钥认证的远程访问 VPN(Cisco 的技术名叫做EzVPN),换言之,使用证书认证的EzVPN也是通过6个数据包交换的主模式来完成的。主动模式的交换细节将会在后面 EzVPN 部分进行详细介绍。现在我们需要重点介绍一下主模式6个数据包和快速模式3个数据包,这9个数据包的交换细节。

1.主模式IKE 1-2 包交换

图3-26 所示为主模式IKE1-2 包交换过程。

图3-26 主模式数据包1-2的交换

主模式一共要交换6个ISAKMP数据包,这个过程可以分为1-2、3-4和5-6这3次数据包交换。图3-15为主模式数据包1-2交换的示意图。主模式数据包1-2交换主要负责完成2个任务:第一是通过核对收到ISAKMP数据包的源IP地址,来确认收到的ISAKMP数据包是否源自于合法的对等体(peer);第二个任务就是协商IKE策略。

我们先来讨论一下第一个任务的操作过程,假设站点一(互联网 IP 地址202.100.1.1)和站点二(互联网IP 地址61.128.1.1)之间需要建立IPSec VPN,站点一配臵对等体(Peer)为61.128.1.1,站点二配臵对等体(Peer)为202.100.1.1。于是,当站点二收到第一个ISAKMP的数据包,它就会查看这个ISAKMP数据包的源IP地址,如果这个源IP地址是202.100.1.1,它就接受这个包,反之则终止整个协商进程,因为站点二并不希望和这个对等体建立IPSec VPN。

由于这个IP地址出现在IP头部,并不是ISAKMP数据的内容,所以在图3-25中并没有被体现出来。顺便再说明一个问题,ISAKMP数据包是使用UDP进行传输的,源端口号和目的端口号都是500。

在IKE1-2 个包交换的过程中,IKE 策略协商才是它主要的任务,策略包含如下5项内容:

加密策略;

散列函数;

DH 组;

认证方式;

密钥有效期。

既然叫IKE策略,表示它是对IKE数据包进行处理的策略。以加密策略为例,它决定了加密主模式(MM)的5-6个数据包和快速模式(QM)的1-3个数据包的策略。但是这个策略绝对不是用于加密实际通信点之间流量(Cisco 也将通信点之间的流量称为感兴趣流)的策略。通信的双方会在第二阶段的快速模式中协商另外一个加密策略,而这个在快速模式中协商的策略才会用于处理感兴趣流。在第一个数据包内,发起方会把本地配臵的所有策略一起发送给接收方,由接收方从中挑出一个可以接收的策略。并且通过第二个IKE包回送给发送方,向发送方指明它所选择的那个策略。

图 3-27 详细地介绍了接收方选择策略的顺序,接收方首先用本地优先的策略(Policy 10)来检查对方所发送过来的全部策略。如果不匹配就由下一个优先的策略来检查,直到找到一个匹配的策略为止。很明显,图3-26 所示的IKE 1-2 包交换,协商得到了如下的IKE策略:

加密策略为DES;

散列函数为MD5;

DH组为1;

认证方式为预共享密钥;

密钥有效期为一天。

图3-27 接收方选择IKE策略示意图

有了这些结果,在交换后续IKE3-4 和5-6 包时,就可以使用这套策略来处理了。

2.主模式IKE 3-4 包交换

图3-28 所示为主模式IKE3-4 包交换过程。

图3-28 主模式IKE 3-4包交换

IKE 1-2 包交换已经协商出了IKE 策略,但是指望使用这些加密策略和散列函数来保护 IKE 数据还缺少一个重要的内容——密钥。加密和 HMAC 都需要密钥,这个密钥从何而来?它会从图3-28所示的DH交换中产生。我们现在就来介绍这个神奇的算法Diffie-Hellman。

图3-29所示为Diffie-Hellman算法的计算过程。

图3-29 Diffie-Hellman算法

DH 是一种非对称密钥算法,这个算法基于一个知名的单向函数,离散对数函数A=g a modp,这个公式中mod 就是求余数。这个函数有这么一个特点,在g 和p 都很大的情况下,已知a求A会很快得到结果(当然是计算机进行计算),但是已知A求a 几乎无法完成,这就是所有单向函数的特点,一个方向运算很快很容易,另一个方向几乎不能完成。

了解了这个特点以后我们来看看DH是如何工作的,发起方(Alice)首先随机产生g、p、a。g和p的大小由1-2包交换的DH组大小来决定,DH组1表示为768位长度,DH组2表示为1024位长度,组越大表示DH交换的强度越大。然后发起方使用离散对数函数计算得出A。并且在第3个IKE包中把g、p、A发送给接收方(Bob)。接收方(Bob)收到后,随机产生小b,并且使用从第3个IKE包中接收到的g和p,通过离散对数函数计算得到B,然后通过第4个IKE包把B回送给发起方(Alice)。

现在DH 算法的神奇之处就要体现了,接收方(Bob)通过A b mod p 得到的结果,等于发起方(Alice)通过B a mod p 计算得到的结果,也等于g ab mod p。这样收发双方就通过DH 算法得到了一个共享秘密g ab mod p。这个值中间人是无法计算得出的,因为要计算这个值需要至少一方的私有信息(a或者b),但是中间人只是能够截获(g、p、A、B),并且不能通过A和B计算得出a和b(离散对数特点)。有了这个共享秘密g ab mod p 后,我们可以通过一系列的密钥衍生算法,得到加密和HMAC 处理IKE信息的密钥。加密感兴趣流的密钥也是从这个共享秘密衍生而来,可以说它是所有密钥的始祖。

3.主模式数据包5-6的交换

图3-30所示为主模式数据包5-6的交换过程。

图3-30 主模式数据包5-6的交换

IKE 第一阶段的主要任务就是认证,IKE 5-6 包交换就是在安全的环境下进行认证(从IKE 主模式的第5-6 包开始往后,都使用IKE 1-2 包交换所协商的加密与HMAC算法进行安全保护),图3-30 所示为IKE 5-6 包交换的示意图。前面我们学习的IKE 1-2和3-4 包交换,只是在为IKE5-6 包交换的认证做铺垫。IKE 1-2 包交换为认证准备好策略(例如,认证策略、加密策略和散列函数等),IKE 3-4 包交换为保护IKE 5-6 包的安全算法提供密钥资源。

IPSecVPN 的认证方式有3 个,分别是预共享密钥认证、证书认证和RSA 加密随机数认证。本章只重点介绍预共享密钥认证。预共享密钥认证顾名思义就是需要在收发双方预先配臵一个相同的共享秘密(sharesecret),认证的时候相互交换由这个共享秘密所制造的散列值来实现认证,这个思路和OSPF对路由更新的认证基本一致的。

图3-31所示为预共享密钥认证的示意图。

我们现在通过图3-31来介绍IKE主模式的第5个数据包,即接收方如何使用预共享密钥这种认证方式来认证发起方。

步骤1:发起方根据接收方IP地址查询本地IPSec配臵,找到与其对应的预共享秘密。

步骤2:发起方把预共享秘密(cisco)和IKE策略内容、DH计算的密钥资源、还有其他一些接收双方都知道的内容一起进行散列计算,得到的结果就是“认证散列值”。

图3-31 预共享密钥认证图示

步骤3:发起方把“认证散列值”和本地加密点IP地址放入第5个IKE数据包中,加密后发送给接收方。

步骤4:接收方首先对收到的第5个IKE数据包进行解密,提取出发起方的IP地址,并且基于发起方的IP地址查询本地IPSec配臵,找出对应的预共享秘密。

步骤 5:接收方把查询到的共享秘密,和其他双方已知内容一起计算散列值,得到“认证散列值’”。

步骤6:接收方把从第5个IKE数据包中提取出来的“认证散列值”和步骤5计算得到的“认证散列值”进行比较,如果相等,接收方就成功认证了发起方。当然接收方还要通过相同的办法来发送第6个IKE数据包,让发起方认证接收方。

4.第一阶段小结

第一阶段的主要任务就是相互认证。第一阶段完成,不仅表示收发双方认证通过,并且还会建立一个双向的 ISAKMP/IKE 安全关联( SA ),这个 SA 维护了处理ISAKMP/IKE流量的相关策略(注意:这些策略不会处理实际感兴趣流),而对等体双方还会继续使用这个SA,来安全保护后续的IKE 快速模式1-3 包交换。

5.快速模式 数据包1-3的交换

图3-32 快速模式数据报1-3的交换

图3-32所示为IKE快速模式1-3包交换示意图。在快速模式中,1-3包交换的主要目的就是在安全的环境下,基于感兴趣流协商处理这个感兴趣流的IPSec策略,这些策略包含如下6项内容:

感兴趣流;

加密策略;

散列函数;

封装协议;

封装模式;

密钥有效期。

图3-32为IKE快速模式1-2包交换,接收方策略选择过程示意图。

从图3-33我们可以看到,在IKE快速模式第一个数据包中,发起方会把感兴趣流相关的IPSec策略一起发送给接收方,并由接收方来选择适当策略。这个过程与在IKE主模式1-2包交换时,由接收方来选择策略的工作方式相同。

图3-33的协商结果是感兴趣流为A到B,使用ESP进行隧道封装,使用AES进行加密,使用SHA对数据进行HMAC验证,密钥有效期为一小时。

策略协商完毕以后就会产生相应的IPSec SA,我们发现在IKE 快速模式第2 个和第3个数据包中都出现了安全参数索引(SPI)这个字段,这个字段的作用我们在3.2.3节中曾经进行过介绍。简单地说,SPI 是一个字串,用于唯一标识一个IPSec SA。还要注意的一点是,第一阶段协商的 IKE SA 是一个双向的 SA,但是第二阶段协商的IPSec SA 则是一个单向的SA,也就是存在一个IPSec SA 用于保护发起方到接收方的流量,标识这个IPSec SA 的SPI出现在快速模式的第二个数据包中。

图3-33 在快速模式数据包1-2交换过程中,接收方策略选择过程示意图

还存在另外一个 IPSec SA 用来保护接收方到发起方的流量,而标识这个 IPSec SA的SPI出现在快速模式的最后一个数据包中。其实我们还可以这样来看这个问题,那就是目的设备决定了SPI 值。因为发起方到接收方IPSec SA 的SPI是由接收方产生,并通过第二个包发送给发起方的,因此目的设备决定了 SPI 的说法就很容易理解了。

说完了SPI字段我们再来看看IKE快速模式1-2包交换中的PFS字段,PFS这个技术,我们也曾在3.2.5 节中介绍过。Cisco 的IPSecVPN 默认并没有启用PFS 这个技术,也就是说加密感兴趣流的密钥,是由主模式IKE 3-4 包的DH 交换所产生的共享密钥通过衍生得到的。虽然每一个小时都要更新一次密钥,但下一个小时的密钥是由当前这个小时的密钥衍生得来的。因为密钥之间存在衍生关系,所以他们不是PFS的密钥。Cisco 的IPSec VPN 可以通过配臵来启用PFS 特性,一旦启用,在IKE 快速模式1-2包交换就会再进行一次DH交换,相互发送DH计算所需要的公共值和随机数。处理感兴趣的密钥就在这次DH交换中产生。每一个小时都会进行一次全新DH交换,以产生下一个小时所使用的密钥。

6.第二阶段小结

第二阶段的主要任务就基于具体的感兴趣流来协商相应的IPSec SA,IKE 快速模式交换的三个数据包都得到了安全保护(加密、完整性校验和源认证)。另外两个值得注意的内容就是SPI 和PFS。SPI用于唯一标识一个单向的IPSec SA,SPI的值是由目的设备决定的。Cisco 的IPSec VPN 在默认情况下没有启用PFS 技术,设备管理员可以通过配臵来启用这项技术,让每一次密钥更新之前都进行一次全新的DH交换,产生全新的密钥。

到此为止,对于IPSec VPN 理论的介绍就要告一段落了。从下一章起,我们将会开始对Cisco IPSec VPN 的配臵方法进行介绍。