IPSec

IPSec

IPSec简介

定义

IPSec(Internet Protocol Security)是IETF(Internet Engineering Task Force)制定的一组开放的网络安全协议。它并不是一个单独的协议,而是一系列为IP网络提供安全性的协议和服务的集合,如图1所示。

图1 IPSec协议体系
IPSec
IPSec通过验证头AH(Authentication Header)和封装安全载荷ESP(Encapsulating Security Payload)两个安全协议实现IP报文的安全保护:

AH是报文头验证协议,主要提供数据源验证、数据完整性验证和防报文重放功能,不提供加密功能。
ESP是封装安全载荷协议,主要提供加密、数据源验证、数据完整性验证和防报文重放功能。

AH和ESP协议提供的安全功能依赖于协议采用的验证、加密算法:

AH和ESP都能够提供数据源验证和数据完整性验证,使用的验证算法为MD5(Message Digest 5)、SHA1(Secure Hash Algorithm 1)、SHA2-256、SHA2-384和SHA2-512,以及SM3(Senior Middle 3)算法。

ESP还能够对IP报文内容进行加密,使用的加密算法为对称加密算法,包括DES(Data Encryption Standard)、3DES(Triple Data Encryption Standard)、AES(Advanced Encryption Standard)、SM4。

说明:
MD5和SHA1验证算法存在安全隐患,建议优先使用SHA2或SM3算法。
DES和3DES加密算法存在安全隐患,建议优先使用AES或SM4算法。

IPSec加密和验证算法所使用的**可以手工配置,也可以通过因特网**交换IKE(Internet Key Exchange)协议动态协商。IKE协议建立在Internet安全联盟和**管理协议ISAKMP(Internet Security Association and Key Management Protocol)框架之上,采用DH(Diffie-Hellman)算法在不安全的网络上安全地分发**、验证身份,以保证数据传输的安全性。IKE协议可提升**的安全性,并降低IPSec管理复杂度。

目的

在Internet的传输中,绝大部分数据的内容都是明文传输的,这样就会存在很多潜在的危险,比如:密码、银行帐户的信息被窃取、篡改,用户的身份被冒充,遭受网络恶意攻击等。网络中部署IPSec后,可对传输的数据进行保护处理,降低信息泄露的风险。

受益

IPSec通过加密与验证等方式,从以下几个方面保障了用户业务数据在Internet中的安全传输:

数据来源验证:接收方验证发送方身份是否合法。
数据加密:发送方对数据进行加密,以密文的形式在Internet上传送,接收方对接收的加密数据进行解密后处理或直接转发。
数据完整性:接收方对接收的数据进行验证,以判定报文是否被篡改。
抗重放:接收方拒绝旧的或重复的数据包,防止恶意用户通过重复发送捕获到的数据包所进行的攻击。

IPSec基本概念

IPSec安全传输数据的前提是在IPSec对等体(即运行IPSec协议的两个端点)之间成功建立安全联盟SA(Security Association)。SA是通信的IPSec对等体间对某些要素的约定,例如:对等体间使用何种安全协议、需要保护的数据流特征、对等体间传输的数据的封装模式、协议采用的加密算法、验证算法,对等体间使用何种**交换和IKE协议,以及SA的生存周期等。

安全联盟

SA由一个三元组来唯一标识,这个三元组包括安全参数索引SPI(Security Parameter Index)、目的IP地址和使用的安全协议号(AH或ESP)。其中,SPI是为唯一标识SA而生成的一个32位比特的数值,它在AH和ESP头中传输。在手工配置SA时,需要手工指定SPI的取值。使用IKE协商产生SA时,SPI将随机生成。
SA是单向的逻辑连接,因此两个IPSec对等体之间的双向通信,最少需要建立两个SA来分别对两个方向的数据流进行安全保护。如图1所示,为了在对等体A和对等体B之间建立IPSec隧道,需要建立两个安全联盟,其中,SA1规定了从对等体A发送到对等体B的数据采取的保护方式,SA2规定了从对等体B发送到对等体A的数据采取的保护方式。

图1 IPSec安全联盟
IPSec
另外,SA的个数还与安全协议相关。如果只使用AH或ESP来保护两个对等体之间的流量,则对等体之间就有两个SA,每个方向上一个。如果对等体同时使用了AH和ESP,那么对等体之间就需要四个SA,每个方向上两个,分别对应AH和ESP。

有两种方式建立IPSec安全联盟:手工方式和IKE自动协商方式。二者的主要区别为:

**生成方式不同
手工方式下,建立SA所需的全部参数,包括加密、验证**,都需要用户手工配置,也只能手工刷新,在中大型网络中,这种方式的**管理成本很高;IKE方式下,建立SA需要的加密、验证**是通过DH算法生成的,可以动态刷新,因而**管理成本低,且安全性较高。

生存周期不同
手工方式建立的SA,一经建立永久存在;IKE方式建立的SA,其生存周期由双方配置的生存周期参数控制。

因此,手工方式适用于对等体设备数量较少时,或是在小型网络中。对于中大型网络,推荐使用IKE自动协商建立SA。

安全协议

IPSec使用认证头AH(Authentication Header)和封装安全载荷ESP(Encapsulating Security Payload)两种安全协议来传输和封装数据,提供认证或加密等安全服务。

AH协议

AH是一种基于IP的传输层协议,协议号为51。其工作原理是在每一个数据包的标准IP报头后面添加一个AH报文头,如封装模式所示。AH对数据包和认证**进行Hash计算,接收方收到带有计算结果的数据包后,执行同样的Hash计算并与原计算结果比较,传输过程中对数据的任何更改将使计算结果无效,这样就提供了数据来源认证和数据完整性校验。AH协议的完整性验证范围为整个IP报文。
AH报文头结构如图1所示。

图1 AH报文头结构
IPSec
AH报文头字段含义如表1所述。

表1 AH报文头字段含义

字段 长度 含义
下一头部 8比特 标识AH报文头后面的负载类型。传输模式下,是被保护的上层协议(TCP或UDP)或ESP协议的编号;隧道模式下,是IP协议或ESP协议的编号。 说明: 当AH与ESP协议同时使用时,AH报文头的下一头部为ESP报文头。
负载长度 8比特 表示以32比特为单位的AH报文头长度减2,缺省为4。
保留字段 16比特 保留将来使用,缺省为0。
SPI 32比特 IPSec安全参数索引,用于唯一标识IPSec安全联盟。
*** 32比特 是一个从1开始的单项递增的计数器,唯一地标识每一个数据包,用于防止重放攻击。
认证数据 一个变长字段,长度为32比特的整数倍,通常为96比特。 该字段包含数据完整性校验值 ICV(Integrity Check Value),用于接收方进行完整性校验。可选择的认证算法有MD5、SHA1、SHA2、SM3。 说明: MD5和SHA1验证算法存在安全隐患,建议优先使用SHA2或SM3算法。

ESP协议

ESP是一种基于IP的传输层协议,协议号为50。其工作原理是在每一个数据包的标准IP报头后面添加一个ESP报文头,并在数据包后面追加一个ESP尾(ESP Tail和ESP Auth data),如封装模式所示。与AH不同的是,ESP将数据中的有效载荷进行加密后再封装到数据包中,以保证数据的机密性,但ESP没有对IP头的内容进行保护。ESP报文头结构如图2所示。

图2 ESP报文头结构
IPSec
ESP报文头字段含义如表2所述。

表2 ESP报文头字段含义

字段 长度 含义
SPI 32比特 IPSec安全参数索引,用于唯一标识IPSec安全联盟。
*** 32比特 是一个从1开始的单项递增的计数器,唯一地标识每一个数据包,用于防止重放攻击。
负载数据 包含由下一头部字段给出的变长数据。
填充字段 用于增加ESP报文头的位数。填充字段的长度与负载数据的长度和算法有关。当待加密报文的明文长度不是加密算法所要求的块长度时,需要进行填充补齐。
填充长度 8比特 给出前面填充字段的长度,置0时表示没有填充。
下一头部 8比特 标识ESP报文头后面的下一个负载类型。传输模式下,是被保护的上层协议(TCP或UDP)的编号;隧道模式下,是IP协议的编号。
认证数据 一个变长字段,长度为32比特的整数倍,通常为96比特。 该字段包含数据完整性校验值ICV,用于接收方进行完整性校验。可选择的认证算法与AH的相同。

ESP的验证功能是可选的,如果启动了数据包验证,会在加密数据的尾部添加一个ICV数值。

AH协议和ESP协议比较

AH和ESP协议的简单比较如表3所示。

表3 AH协议与ESP协议比较

安全特性 AH ESP
协议号 51 50
数据完整性校验 支持(验证整个IP报文) 支持(不验证IP头)
数据源验证 支持 支持
数据加密 不支持 支持
防报文重放攻击 支持 支持
IPSec NAT-T(NAT穿越) 不支持 支持

从表中可以看出两个协议各有优缺点,AH协议不提供数据加密功能,ESP的验证范围不包括IP头,故在安全性要求较高的场景中可以考虑联合使用AH协议和ESP协议。

封装模式

封装模式是指将AH或ESP相关的字段插入到原始IP报文中,以实现对报文的认证和加密,封装模式有传输模式和隧道模式两种。

传输模式

在传输模式中,AH头或ESP头被插入到IP头与传输层协议头之间,保护TCP/UDP/ICMP负载。传输模式不改变报文头,故隧道的源和目的地址必须与IP报文头中的源和目的地址一致,所以只适合两台主机或一台主机和一台v*n网关之间通信。
以TCP报文为例,原始报文经过传输模式封装后,报文格式如图1所示。

图1 传输模式下报文封装
IPSec
传输模式下,AH协议的完整性验证范围为整个IP报文。ESP协议验证报文的完整性检查部分包括ESP头、传输层协议头、数据和ESP报尾,但不包括IP头,因此ESP协议无法保证IP头的安全。ESP的加密部分包括传输层协议头、数据和ESP报尾。

隧道模式

在隧道模式下,AH头或ESP头被插到原始IP头之前,另外生成一个新的报文头放到AH头或ESP头之前,保护IP头和负载。隧道模式主要应用于两台v*n网关之间或一台主机与一台v*n网关之间的通信。
以TCP报文为例,原始报文经隧道模式封装后的报文结构如图2所示。

图2 隧道模式下报文封装
IPSec
隧道模式下,AH协议的完整性验证范围为包括新增IP头在内的整个IP报文。ESP协议验证报文的完整性检查部分包括ESP头、原IP头、传输层协议头、数据和ESP报尾,但不包括新IP头,因此ESP协议无法保证新IP头的安全。ESP的加密部分包括原IP头、传输层协议头、数据和ESP报尾。

传输模式和隧道模式比较

传输模式和隧道模式的区别在于:

从安全性来讲,隧道模式优于传输模式。它可以完全地对原始IP数据报进行验证和加密。隧道模式下可以隐藏内部IP地址,协议类型和端口。

从性能来讲,隧道模式因为有一个额外的IP头,所以它将比传输模式占用更多带宽。当安全协议同时采用AH和ESP时,AH和ESP协议必须采用相同的封装模式。

加密

加密是一种将数据按照某种算法从明文转换成密文的过程,接收方只有在拥有正确的**的情况下才能对密文进行解密,从而保证数据的机密性,防止数据在传输过程中被窃听。IPSec工作过程中涉及数据加密和协议消息加密两种加密情况。

数据加密

IPSec采用对称加密算法对数据进行加密和解密。对称加密算法是指数据发送方和接收方使用相同的**进行加密、解密。
采用对称加密算法进行数据加密和解密的过程如图1所示。

图1 加密和解密的过程
IPSec
用于加密和解密的对称**可以手工配置,也可以通过IKE协议自动协商生成。常用的对称加密算法包括:

数据加密标准DES(Data Encryption Standard)
DES是由美国国家标准与技术研究院(NIST)开发的。它使用56位的**对一个64位的明文块进行加密。

3DES(Triple Data Encryption Standard)
3DES是一种增强型的DES标准,它在需要保护的数据上使用3次DES,即使用三个不同的56位的DES**(共168位**)对明文进行加密。
3DES与DES相比,3DES具有更高的安全性,但其加密数据的速度要比DES慢得多。

先进加密标准AES(Advanced Encryption Standard)
AES被设计用来替代3DES,提供更快和更安全的加密功能。AES可以采用三种**:AES-128、AES-192和AES-256,其**长度分为128位、192位、256位。随着**长度的提升,加密算法的保密及安全性要求越高,但计算速度也越慢。一般情况下128bit就可以充分满足安全需求。

国密算法(SM4)
国密算法是由国家密码管理局编制的一种商用密码分组标准对称算法,国密算法的分组长度和**长度都为128bit。
在安全级别要求较高的情况下,使用SM4国密算法可以充分满足加密需求。

协议消息加密

协议消息加密用于IKE协商阶段。协议消息加密所用的算法也是DES、3DES、AES和SM4等对称加密算法。用于加密的对称**通过IKE协议自动协商生成。