基于国密算法的IPSec VPN 设计与实现

2020-06-22 10:29刘笑凯
网络安全与数据管理 2020年6期
关键词:加密算法内核密钥

张 尧,刘笑凯

(华北计算机系统工程研究所,北京100083)

0 引言

IPSec VPN 是一种常见的VPN 技术,具有速度快、安全可信等特点。 由于IPSec 国际协议中的标准算法可能存在算法安全性和协议安全性等问题,因此国家密码管理局制定了国家密码算法标准以及VPN 技术规范。 基于国家技术标准的指导,采用国密算法实现改进的IPSec 协议, 能够提高IPSec VPN 的安全性,满足安全产品自主安全的需要。

1 IPSec 技术介绍

IPSec 是一种用于保护网络通信过程IP 数据包安全的安全协议技术,可在由主机、网关作为端点构成的点到点的网络层链路上构建安全隧道,提供基于网络层的通信安全保护功能。 在采用IPSec 技术实现VPN 时,通过在双方网关之间建立IPSec 加密隧道,来实现由双方物理子网构建的虚拟局域网。

IPSec 主要由四部分组成: 因特网密钥交换(Internet Key Exchange,IKE)协议、认证头(Authentication Header,AH) 协 议、 安 全 载 荷(Encapsulating Security Payload,ESP)协议以及上述模块中所需的加密算法和认证算法。 其安全体系结构如图1 所示[1-2]。

图1 IPSec 安全体系

1.1 AH 协 议 与ESP 协 议

AH 协议能够为数据包提供完整性保护、数据源认证和防重放等安全功能,一般用于只需确保数据完整性、检验发送方身份,无需数据保密的场景下。 其通过在原始数据包头部之后增加AH 头部段的方式实现。

ESP 协议除了可实现AH 协议所提供的各项安全功能外,还对数据包整体进行加密,实现数据的保密性。 根据ESP 协议对数据的封装模式不同,分为隧道模式和传输模式, 前者仅对IP 负载进行保护,后者则将原始IP 层头部连同负载一起进行加密保护[3]。

1.2 IKE 协议

为了实现AH 和ESP 协议,通信双方需要首先采用密钥管理协议来建立安全联盟(Security Association,SA),以同步密钥和身份信息。

IKE 协议包括ISAKMP、Oakley 和SKEME 三个协议。 其 中ISAKMP 主 要 定 义 在IKE 伙 伴(IKE Peer)之间的IKE 联盟(IKE SA)建立过程;而Oakley 和SKEME协议主要通过迪菲-赫尔曼(Diffie-Hellman,DH)密钥交换算法实现双方身份验证和密钥安全分发。 目前,由RFC 文档所规定的IKE 协议共有IKEv1 和IKEv2 两个版本。

IKEv1 的协商过程分为两个阶段。 其中第一阶段主要用于协商建立IKE SA,又分为主模式、野蛮模式两种交互策略。 主模式是使用最频繁的协商策略,协商双方通过交换3 对消息,确定对等体双方IKEv1 安全策略、协商密钥信息、验证身份,最终建立SA; 野蛮模式双方仅交换3 条消息即建立SA,通过牺牲一定的安全性来提高协商效率。 第二阶段在第一阶段的IKE SA 保护下进行,用于协商IPSec SA所需的密钥和参数、封装方式、认证方式等,双方交换1 对信息。

1.3 IPSec 中的密码算法

IPSec 通过密码算法来保证数据机密性、完整性,采用非对称密钥的特性来实现密钥安全协商。 在IPSec 中使用了对称加密算法、公钥算法、摘要算法和DH 密钥交换算法。 在国际标准中,对称算法包括AES、3DES 等,摘要算法包括MD5、SHA 等,非对称算法包括RSA、ECC 等[4]。

2 国密算法介绍

国密算法是一套由我国密码安全机构自主研发的密码算法,可用于国家信息安全相关各个领域中,其中由我国《IPSec 技术规范》中所规定在IPSec 协商过程中要使用到的算法包括SM2 椭圆曲线算法、SM1 或SM4 分组密码算法、SM3 密码杂凑算法[5]。

2.1 SM2 算法

SM2 椭圆曲线公钥算法是国密标准中的非对称算法,属于对椭圆曲线密码学(Elliptic Curve Cryptography,ECC)算法的一种拓展,其数学基础建立在椭圆曲线离散对数问题上。 SM2 算法所规定公钥长度为512 位,私钥长度256 位[6]。

与RSA 算法相比,采用基于ECC 的SM2 算法能够在密钥长度相当的情况下,提供更高的安全性保护。 192 位SM2 密码的强度能够超过2 048 位的RSA 密码。

2.2 SM3 算法

SM3 算法是国密标准中的杂凑算法,其功能包括数字签名与验证、消息认证码生成和伪随机数的生成等,可用于多种密码应用。 SM3 算法的安全性及效率与SHA-256 相当[5]。

2.3 SM4 算法

SM4 算法是国密标准中的分组对称密钥算法,明文、密钥、密文长度均为128 位,加密和解密所用密钥相同,可用于流式数据的快速解密。 SM4 算法的实现流程如图2 所示。

图2 SM4 算法实现流程

SM4 算法的加密与密钥扩展算法均通过32 轮非线性迭代过程实现。 轮函数中使用轮密钥对128位数据进行处理,在解密所使用的轮密钥是加密轮密钥的逆序。 在加密过程中,首先将128 位密钥按照每32 位一组分为4 组,然后进行密钥扩展,生成32 组32 位轮密钥,再将输入明文按照32 位一组分成4 组,进行循环运算,得到128 位密文。

3 国密算法替换

基于Linux 2.x 操作系统内核协议栈,FreeS/WAN提供了开源的IPSec 协议的内核态实现。 而Openswan项目继承该项目进行了后续开发[7-8]。 通过对比国际IPSec 标准与我国国密IPSec 标准,找出所需更改的部分对Openswan 的相关代码模块进行替换,能够实现基于国密算法的IPSec VPN。

Openswan 项目的架构如图3 所示。

图3 Openswan 项目架构示意图

Openswan 实现分为应用态和内核态的两部分,其中Pluto 模块、Whack 模块位于Linux 用户态。Whack 模块负责建立连接前的参数配置、管理VPN连接状态、系统日志等;Pluto 模块负责进行IKE 协商、建立SA;Klips 模块在Linux 内核态下运行,接收来自Linux 内核协议栈的网络数据包,根据已经配置的SA,对数据包进行AH 协议、ESP 协议的封装或解封处理。

3.1 协商流程的替换

在Openswan 项目中,由Pluto 模块在用户态实现IKE 协商。IKE 的协商过程中,采用交换数字证书的形式,由通信双方各自进行身份认证,确认对方已得到授权。 根据国密要求,在IKE 协商过程中需要使用基于X.509 格式的国密SM2 数字证书进行身份认证,在IKE 认证过程中,首先要采用国密SM2算法进行数字证书签名、验签。

根据IKEv1 标准,认证第一阶段的主模式协商过程在Pluto 模块中的实现如图4 所示。

认证第二阶段的快速模式协商过程在Pluto 模块中的实现如图5 所示。

在国密标准中,IKE 主模式协商的流程与图中所示一致,但其中SA 载荷部分需要替换成国密SM3、SM4 相关参数。 具体实现如表1 所示。

图4 Pluto 模块中IKE 主模式协商实现

图5 Pluto 模块中IKE 快速模式协商实现过程

表1 国密标准SA 载荷参数

根据Pluto 模块相关函数的处理流程,证书相关数据应在主模式第二包中CERT 相关字段中进行处理。 因此,在Openswan 源码中,向main_inI1_outR1相关流程里添加国密证书导出操作。 向main_inR1_outI2 相关流程里添加响应方国密证书导入操作,从而实现协商流程的国密算法替换。

3.2 业务算法替换

在IPSec VPN 通道成功建立,SA 成功生成后,双方在业务通信阶段使用ESP 协议的隧道模式来加密保护数据报文。 根据国密要求,在ESP 协议包的传输过程中,需要采用SM1 或SM4 对称加密算法进行数据机密性的保护,并且选用SM3 或SHA-1算法来进行数据内容的完整性保护。

由于Openswan 项目代码中用户态和内核态两部分各自使用独立的算法模块,因此需要在内核态中 再 次 实 现SM1 或SM4、SM3 或SHA-1 算 法。 内 核态的加密算法调用流程如图6 所示。

图6 内核态的加密算法调用流程

在Openswan 源码实现中,内核协议栈收到的网络业务数据由Linux 在内核态直接执行加密算法,以便减少操作系统状态切换过程中产生的不必要的性能损失。 这一过程中,Linux 采用XFRM 框架进行算法查找和调用。 在使用国密算法进行替换时,需要在内核进行国密算法的注册。 其过程如下:

(1)根据Linux 内核源码中的算法标识结构定义,构建国密算法的加密算法标识结构。

在Linux 内核中,XFRM 框架对加密算法标识的定义包括位于源码目录下的xfrm.h 头文件里,其数据结构包括xfrm_algo_desc 和sadb_alg_desc。 在Linux内核源码include/linux./pfkeyv2.h 中添加XFRM 在SPDB 中 查 找SM1、SM3、SM4 国 密 算 法 所 用 到 的 算法标识,并在net/xfrm/xfrm_alog.c 中加入这些国密算法所需的算法描述结构。 这样就完成构建国密算法的加密算法标识结构的过程。

(2)在Linux 内核的算法库中对国密算法进行注册。 在Linux 内核中的NETLINK 模块里,提供算法注册的方式,其中crypto_alg 结构用于描述对称加密算法,shash_alg 结构用于描述杂凑算法。 由驱动程序调用XFRM 框架的crypto_register_alg 函数,完成向操作系统内核注册国密加密算法的过程。

4 结论

基于国密SM2、SM3、SM4 等算法,在Openswan 开源项目和在Linux 操作系统的基础上进行代码修改和算法的替换,从而设计并实现了基于国密算法的IPSec VPN 系统。 经实验,替换后的IPSec VPN 能够达到与预期相当的吞吐量,在保证了性能的同时,提高了VPN 的自主可控水平。

猜你喜欢
加密算法内核密钥
多内核操作系统综述①
加密文档排序中保序加密算法的最优化选取
幻中邂逅之金色密钥
幻中邂逅之金色密钥
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
密码系统中密钥的状态与保护*
DES加密算法的实现
微软发布新Edge浏览器预览版下载换装Chrome内核
基于整数矩阵乘法的图像加密算法