「IPSEC」 – IKEv1 | IKE version 1 | Internet Key Exchange version 1

认识

当用 IPSec 保护 IP Packet 之前,必须先建立一个 SA(安全联盟)。IPSec SA 可以通过手工配置的方式建立。但是,当网络中节点较多时,手工配置将非常困难,而且难以保证安全性。

这时就可以使用 IKE(Internet Key Exchange,Internet 密钥交换)自动进行安全联盟建立与密钥交换的过程。IKE 就用于动态建立 SA(其供 IKE 自己使用),然后再代表 IPSec 对 SA 进行协商。(在 IPSec VPN 中,连接的建立分为两个阶段,后面会展开说明);

组成

根据 RFC2409 描述,协议 ISAKMP、Oakley、SKEME 构成 IKE 的基础,所以我们说 IKE 是种“混合型”协议。它建立在由 Internet SA 和 ISAKMP 定义的一个框架上,详情可见 RFC2408 文件。同时,IKE 还实现 Oakley 和 SKEME 两种密钥管理协议的一部分。它沿用 ISAKMP 的基础Oakley 的模式SKEME 的共享和密钥更新技术,从而定义出自己独一无二的验证加密材料生成技术,以及协商共享策略。在 IKE 规范中,三种技术发挥的作用可在后文对 IKE 本身的讨论中略见一二,其中 ISAKMP 发挥的作用最为巨大;

此外,IKE 还定义了它自己的两种密钥交换方式(野蛮模式,主模式);

Oakley 是由亚利桑那大学的安全专家 Hilarie Orman 开发的一种基于 DH(Diffie-Hellman)算法的协议。它是一种自由形态的协议,允许各研究机构根据自身的水平改进协议状态。IKE 在其基础上定义正规的密钥交换方法。尽管降低 Oakley 模型的灵活性,但仍然提供了多种交换模式供用户选择,所以最终还是成为一个非常适宜的密钥交换技术;

SKEME 则是另外一种密钥交换协议,由加密专家 Hugo Krawczyk 设计。SKEME 定义如何验证密钥交换。其中,通信各方利用公共密钥加密实现相互间的验证,同时“共享”交换的组件。每一方都要用对方的公共密钥来加密一个随机数字,两个随机数(解密后)都会对最终的密钥产生影响。IKE 在它的一种验证方法(公共密钥加密验证)中,直接借用 SKEME 的这种技术;

IKE 利用 ISAKMP 语言来定义密钥交换,是对安全服务进行协商的手段。

IKE 交换的最终结果是:一个通过验证的密钥以及建立在双方同意基础上的安全服务(即所谓的 IPSec 安全联盟,IPSec SA);

性质

IKE 具有一套自保护机制,在不安全的网络上,其可以安全地分发密钥、验证身份、建立 IPSec SA 信息。

DH 交换及密钥分发:Diffie-Hellman 算法是一种公共密钥算法。通信双方在不传送密钥的情况下通过交换一些数据,计算出共享的密钥。加密的前提是交换加密数据的双方必须要有共享的密钥。IKE 的精髓就在于它永远不在不安全的网络上直接传送密钥,而是通过一系列数据的交换,最终计算出双方共享的密钥。即使第三者(如黑客)截获了双方用于计算密钥的所有交换数据,也不足以计算出真正的密钥;

完善的前向安全性(Perfect Forward Secrecy):PFS 是一种安全特性,指一个密钥被破解,并不影响其他密钥的安全性,因为这些密钥间没有派生关系。PFS 是由 DH 算法保障的。此特性是通过在 IKE Phase 2 的协商中增加密钥交换来实现的;

身份验证:身份验证确认通信双方的身份。对于 pre-shared key 验证方法,验证字用来作为一个输入产生密钥,验证字不同是不可能在双方产生相同的密钥的。验证字是验证双方身份的关键;

身份保护:身份数据在密钥产生之后加密传送,实现了对身份数据的保护;

IKE 协议提供密钥协商,密码由 IKE 协商创建,无需人工设置,并且会周期性自动更新;

在 IPSec 中,IKE 具有如下作用:
降低手工配置的复杂度;
密钥定时更新;
SA 定时更新。IKE 的 DH 交换过程,每次的计算和产生结果都是毫无关系的。为保证每个 SA 所使用的密钥互不相关,必须每次安全联盟的建立都运行 DH 交换过程;
允许 IPSec 提供反重放服务:IPSec 使用 IP Header 中 32-bit 的序列号实现防重放,但此数溢出后,为实现防重放,SA 需要重新建立,这个过程与要 IKE 的配合;
允许在端与端之间动态认证。对安全通信的各方身份的的验证和管理,将影响到 IPSec 的部署。IPSec 的大规模使用,需要 CA 或其他集中管理身份数据的机构的参与;

只要其他协议需要,例如 RIPv2 或 OSPF,也可以使用 IKE 来提供安全服务;

应用

WIP

流程概述

IKE 的工作流程如下:
1)当一个报文从某接口外出时,如果对此接口应用 IPSec 策略,会进行安全策略的匹配;
2)如果找到匹配的安全策略,会查找相应的 SA。如果 SA 还没有建立,则触发 IKE 进行协商。IKE 首先建立 Phase 1 SA,即 IKE SA;
3)在 IKE SA 的保护下,协商第二阶段的 SA,即 IPSec SA;
4)使用 IPSec SA 保护通讯数据;

IKEv2 通过一次协商便能产生 IPSec 使用的密钥;

协商阶段

IKE 使用两个阶段的 ISAKMP 为 IPSec 进行密钥协商并建立安全联盟:第一阶段、建立 IKE SA,第二阶段、利用该既定的安全联盟,为 IPSec 协商具体的安全联盟;

第一阶段交换

通信各方彼此间建立了一个已通过身份验证和安全保护的通道,此阶段的交换建立了一个 ISAKMP 安全联盟,即 ISAKMP SA(也可称为 IKE SA);

IKEv1 Phase 1 的目的是建立 IKE SA。当 IKE SA 建立后,对等体间的所有 ISAKMP 消息都将通过加密和验证,这条安全通道可以保证 IKEv1 Phase 2 的协商能够安全进行。IKE SA 是一个双向的逻辑连接,两个 IPSec 对等体间只建立一个 IKE SA;

协商模式包括:主模式、野蛮模式。在 RFC2409 中,规定 IKE 第一阶段的协商可以采用两种模式:主模式(Main Mode)和野蛮模式(Aggressive Mode)。这两种模式各自做着相同的事情:建立一个加密和验证无误的通信信道(IKE SA),以及生成验证过的密钥,为双方的 IKE 通信提供机密性、消息完整性以及消息源验证服务。IKE 中定义的其他所有交换都要求一个验证过的 IKE SA 作为首要条件。所以无论主模式还是野蛮模式,第一阶段都必须在其他任何交换之前完成;

对比主模式、野蛮模式:
1)交换的消息:主模式为 6 个;野蛮模式为 3 个;
2)身份保护:主模式的最后两条消息有加密,可以提供身份保护功能;而野蛮模式消息集成度过高,因此无身份保护功能;
3)对等体标识:对于预共享密钥方式,主模式只能采用 IP-ADDR 标识对等体;而野蛮模式可以采用 IP-ADDR 或 Name 方式标识对等体;

认证方式包括预共享客钥、数字符名方式、公钥加密;

第二阶段交换

用已在 Phase 1 中建立的 IKE SA 为 IPSec 协商安全服务,即为 IPSec 协商具体的安全联盟,建立 IPSec SA 以用于最终的 IP Packet 安全传送;

IKEv1 Phase 2 的目的就是建立用来安全传输数据的 IPSec SA,并为数据传输衍生出密钥。该阶段使用 IKEv1 Phase 1 中生成的密钥对 ISAKMP 消息的完整性和身份进行验证,并对 ISAKMP 消息进行加密,故保证了交换的安全性;

协商模式为 Quick Mode(快速模式)。

最终结果

IKE 协商成功意味着双向的 IPSec 隧道已经建立,可以通过 ACL 方式或者安全框架方式定义 IPSec“感兴趣流”,符合感兴趣流流量特征的数据都将被送入 IPSec 隧道进行处理;

IKE SA vs. IPSec SA

IKE SA,从协商的内容上来看,其并不参与 IPSec SA 参数协商,其主要作用是构建一条安全的通道,用于交互 IPsec SA;

IPSec SA,其为要建立 IPSec Tunnel 的通信双方对隧道参数的约定,包括隧道两端的 IP-ADDR,隧道采用的验证方式、验证算法、验证密钥、加密算法、加密密钥、共享密钥以及生存周期等一系列参数。因此 IPSec SA 的主要协商内容为 AH 或 ESP 协议所使用的认证算法和加密算法,以及 IPSec 所使用的认证方法;

密钥保护

密钥生存周期

密钥具有一定生存期,当生存期到达时,用新的密钥替代原有密钥

密钥生命周期设置决定何时把旧密钥替换成新密钥。密钥生命周期决定了在一定的时间段内,新旧密钥交替的周期。例如,在某业务通信中需要 1000 秒,而我们设定密钥生命周期为 100 秒,那么整个数据报文传输期间将会产生 10 个密钥。由于在此业务通信周期内使用了 10 个密钥,即使攻击者破解了某个密钥对数据报文进行解密处理,也无法实现对所有数据报文的解密;

完美向前保密(PFS)

定义两个密钥之间无任何关系

完美向前保密,即每一密钥均是“独一无二”的,这样一个密钥被破解,并不影响其他密钥的安全性,因为这些密钥间没有派生关系。所以若有攻击者破解了一个密钥后,只能访问受这个密钥保护的所有数据报文,而受其它密钥保护的数据报文还是无法破解。PFS 是由 DH 算法保障的。此特性是通过在 IKE 阶段 2 的协商中增加密钥交换来实现的;

DH Group

公共密钥加密系统,可在一个公共的、不受安全保护通讯信道(Internet)交换共享密钥生成过程信息;

DH 算法是一种公共密钥算法。通信双方在不传送密钥的情况下通过交换一些数据,计算出共享的密钥。加密的前提是交换加密数据的双方必须要有共享的密钥。IKE 的精髓在于它永远不在不安全的网络上直接传送密钥,而是通过一系列数据的交换,最终计算出双方共享的密钥。即使第三方(如黑客)截获了双方用于计算密钥的所有交换数据,也不足以计算出真正的密钥。IKE 共定义了 5 个 DH 组,组 1 定义的密钥长度为 768 位;组 2 长度为 1024 位。密钥长度越长,所生成的密钥安全度也就越高,越难被破译。DH 组的选择很重要,因为 DH 组只在第一阶段的 SA 协商中确定,第二阶段的协商不再重新选择 DH 组,两个阶段使用的是同一个 DH 组,因此该 DH 组的选择将影响所有“会话密钥”的生成。在协商过程中,对等的实体间应选择同一个 DH 组,即密钥长度应该相等。若 DH 组不匹配,将视为协商失败;

参考文献

A Comprehensive Guide to PPTP, L2TP, and Other VPN Protocols