蒋汶芮,罗俊,胡晓勤,龚勋
(1.四川大学网络空间安全学院,成都610065;2.卫士通信息产业股份有限公司,成都610041)
2020年,随着市场的发展,以及“新基建”政策的利好,我国云计算相关技术和市场规模都在快速地发展[1]。由于公有云廉价、便利、易扩展等特性,越来越多的企业在数字化转型中都将业务迁移到公有云上。但是出于安全性的考虑,许多企业只迁移业务,重要数据依然要存储在本地数据中心。在这种应用场景下,如何保障公有云上业务系统与本地数据中心的数据安全传输成为关注重点。对此,常用的解决方案是使用IPSec VPN技术来搭建数据安全传输通道。在公有云平台上,目前有两种IPSec VPN网关可供选择,一种是公有云平台提供的虚拟IPSec VPN网关,另一种是传统VPN厂商提供的IPSec VPN网关镜像。
由于IPSec VPN技术关乎国家的网络安全,国家密码局提出了一套国密标准的IPSec安全体系,并颁发了国密IPSec VPN网关标准。传统的国密IPSec VPN网关是软硬件一体,公有云上的两种虚拟IPSec VPN网关由于缺乏国密密码设备不能满足国密IPSec VPN网关标准。但是近年来随着云密码机在公有云上的广泛应用,这个问题出现了破局的希望。基于对公有云平台、国密IPSec VPN网关和云密码机的研究,本文提出了一种面向公有云并满足国密要求的IPSec VPNaaS系统(后文简称VPNaaS系统)。
IPSec(Internet Protocol Security)即互联网安全协议,它是IETF于1998年11月提供Internet网络安全通信的规范,是提供私有信息通过公网传输的一种安全保障[2]。
IPSec VPN指采用IPSec来实现远程接入的一种VPN技术,是由IETF(Internet Engineering Task Force)定义的安全标准框架,在公网上为两个私有网络提供加密的安全通信通道。IPSec VPN使用IKE协议验证IPSec通信双方身份、建立安全关联SA(Security Association),以及生成安全密钥[3]。
国家密码管理局对于国密IPSec VPN网关设备要求详见于《GMT 0023-2014 IPSec VPN 网关产品规范》,本文主要讨论密钥管理要求,即IPSec VPN网关产品应采用经过国家密码管理主管部门审批的加密芯片或加密卡作为主要加密部件[4]。
云密码机是使用经国家密码管理局检测认证的硬件密码机作为服务底层,通过虚拟化技术生成的虚拟密码机[5]。其通过VXLAN等安全隔离技术,确保各个密码机之间密钥的安全。
它的主要功能有:生成、存储、导入、导出、管理加密密钥,包括对称密钥和非对称密钥对;使用对称和非对称算法来加密和解密数据;使用加密哈希函数来计算消息摘要和基于哈希的消息身份验证代码;对数据进行加密签名并验证签名。
云连接是公有云厂商为用户提供一种能够快速构建跨区域VPC(Virtual Private Cloud)之间的高速、优质、稳定的网络能力[6]。通过创建云连接,将用户所需要实现互通的不同区域的网络实例加载到创建的云连接实例中,这里的网络实例可以是用户自己创建的VPC实例或其他用户授予权限允许加载的VPC实例,最后通过配置需要互通的网络实例之间的域间带宽,就可以快速的提供VPC之间的网络互通服务。
如图1所示,有三个角色,分别是公有云厂商、VPN服务商、租户。公有云厂商提供公有云基础设施租用服务。VPN服务商把VPNaaS系统部署在公有云上,并在自己的镜像仓库上传三种网关设备镜像(公网代理机、私网代理机、处理机)。租户拥有云上业务系统和本地数据中心,现在需要搭建在这两者之间搭建IPSec VPN通道。
图1 面向公有云的国密IPSec VPNaaS 系统网络拓扑图
公网代理机、私网代理机、处理机、云密码机四者将协同工作来完成传统国密IPSec VPN网关的任务。其中,公网代理机负责与本地数据中心的VPN网关进行IKE协商并在协商完成后将来自公网的数据包分发给处理机集群处理;私网代理机的任务是把来自私网的数据包分发给处理机集群处理;处理机需要把来自私网代理机的明文数据包封装进安全载荷并转发给公网代理机,或者把来自公网代理机的密文数据包解封装并转发给私网代理机;云密码机存储关键的密钥并进行相关密码运算。
具体工作流程如下:
(1)租户通过VPNaaS 系统租用IPSec VPN服务。
(2)VPNaaS 系统根据租户需求创建VPC_1并自动租用ECS加载三种镜像创建公网代理机、私网代理机、处理机集群和云密码机集群。
(3)VPNaaS系统通过云连接网的方式连通VPC_1与租户VPC。
(4)租户通过互联网访问公网代理机,安全管理员负责设备参数配置、策略配置、设备密钥的生成(在云密码机的加密卡内生成并存储)、导入/备份和恢复等操作;系统管理员负责对管理员的管理和权限分配,以及对系统的备份和恢复;审计管理员负责对系统中的日志进行安全审计。
(5)公网代理机与本地数据中心的VPN网关进行IKE协商,生成会话密钥,然后将SP(Security Policy)和SA发送给所有处理机,并保持SA与SP的信息在处理机池中同步。由于处理机都是选用一样的虚拟机,所以负载均衡算法采用数据包粒度的轮转(Round Robin)算法。公网代理机把来自公网的数据包依次轮转调度到每台处理机上,私网代理机把来自私网的数据包依次轮转调度到每台处理机上,即所有处理机均摊数据包的处理工作。
(6)IPSec VPN加密通道建立完毕,租户本地数据中心与公有云上业务系统能够进行安全通信。云上业务系统的明文数据包先流向私网代理机,然后私网代理机按照负载均衡算法分发给处理机,处理机完成调用云密码机加密后将密文数据包经由转发至公网代理机,最后公网代理机通过互联网把数据包转发到租户本地VPN网关。租户本地数据中心发出的密文数据包经由互联网之后首先到达公网代理机,公网代理机接着分发给处理机,处理机利用云密码机解密后,将明文数据包转发私网代理机,私网代理机再发至云上业务系统。值得注意的是,VPN服务商仅仅拥有VPN网关集群的设备基本管理权(创建、休眠、处理机的增减等),只有租户能登录公网代理机的系统进行具体的配置操作。
按照国密标准,IPSec VPN网关设备主要关注三种密钥。
(1)设备密钥:非对称算法使用的公私钥对,包括签名密钥对和加密密钥对,用于实体验证、数字签名和数字信封等。(设备密钥中的私钥必须存储在符合国密规定的加密设备中,VPNaaS系统将其存放在云密码机的加密卡内。)
(2)工作密钥:在密钥交换第一阶段得到的密钥,用于会话密钥交换过程的保护。
(3)会话密钥:在密钥交换第二阶段得到的密钥,用于数据报文及报文MAC的加密。
设备密钥的生成和存储流程如图2所示。
图2 设备密钥生成和存储流程图
具体工作流程如下:
(1)设备密钥中的签名密钥对由安全管理员登录公网代理机进行生成,公网代理机通过调用云密码机的接口在云密码机内部生成签名密钥对并存储,然后导出签名公钥。
(2)安全管理员使用签名公钥向CA(Certificate Authority)申请签名证书。
(3)安全管理员将签名证书导入公网代理机,公网代理机在本地存储签名证书,为密钥交换做准备。
(4)安全管理员通过加密通道导入加密证书和私钥到公网代理机,公网代理机在本地存储加密证书,并把加密私钥导入云密码机存储。
工作密钥和会话密钥在IKE阶段生成,存储在云密码机上且定时协商更新,具体协商流程于下节内容展示。
本文所采用的符号中,HDR 表示一个ISAKMP(Internet Security Association Key Management Protocol)头;HDR*表示ISAKMP头后面的载荷是加密的;p表示需要保护的信息集合;Ø表示空集合;+表示串接;pub_i是租户本地VPN网关公钥;pub_r是公网代理机公钥;prv_i是租户本地VPN网关私钥;prv_r是公网代理机私钥;key_w表示公网代理机的工作密钥;key_s表示公网代理机的会话密钥;key_g表示公网代理机与云密码机通信的加密密钥;IDi是租户本地VPN网关的标识载荷;IDr是公网代理机的标识载荷;HASHi是租户本地VPN网关的杂凑载荷;HASHr是公网代理机的杂凑载荷;SIGi是租户本地VPN网关的签名载荷;SIGr是公网代理机的签名载荷;CERT_sig_r是签名证书载荷;CERT_enc_r是加密证书载荷;Ni是租户本地VPN网关的nonce载荷;Nr是公网代理机的nonce载荷;SM1_Encrypt(msg,key)表示把key作为密钥对数据msg进行SM1加密运算后的结果;SM2_Encrypt(msg,key)表示把key作为密钥对数据msg进行SM2加密运算的结果;SM2_Sign(msg,key)表示把key作为密钥对数据msg进行SM2签名运算后的结果。
图3 改进后的IKE第一阶段流程图
消息1、2、3、8、10、15和传统国密IKE过程一样,不再赘述,本文只说明新增的消息4、5、6、7、9、11、12、13、14。
消息4:m=SM1_ Encrypt(XCHi+SIGi,key_g)。公网代理机向云密码机发送需要解密的数据XCHi。云密码机先使用加密私钥解密获得密钥Ski,再用Ski解密获得Ni和IDi,最后用CERT_sig_i对SIGi验签。
消息5:m=SM1_ Encrypt(Ni+IDi,key_g)。云密码机向公网代理机发送Ni和IDi。
消息6:m=SM1_ Encrypt(Skr+Nr+IDr+CERT_enc_r,key_g)。公网代理机向云密码机发送需要签名的数据,云密码机用签名私钥进行签名运算得到SIGr。SIGr=SM2_Sign(Skr+Nr+Idr+CERT_enc_b,priv_r)。
消息7:m=SM1_ Encrypt(SIGr,key_g)。云密码机向公网代理机发送SIGr。
消息9:m=SM1_ Encrypt(SKEYID,key_g)。公网代理机向云密码机发送基本密钥参数SKEYID,云密码机用SKEYID生成并存储工作密钥。
消息11:m=SM1_ Encrypt(SM1_ Encrypt(HASHi,key_w),key_g)。公网代理机向云密码机发送被工作密钥加密过的HASHi,云密码机用工作密钥进行解密运算得到HASHi。
消息12:m=SM1_ Encrypt(HASHi,key_g)。云密码机向公网代理机发送HASHi。
消息13:m=SM1_ Encrypt(HASHr,key_g)。公网代理机向云密码机发送需要加密的数据HASHr,云密码机用工作密钥加密得到SM1_ Encrypt(HASHr,key_w)。
消息14:m=SM1_ Encrypt(SM1_ Encrypt(HASHr,key_w),key_g)。云密码机向公网代理机发送SM1_ Encrypt(HASHr,key_w)。
IKE第一阶段完成后双方都生成ISAKMP SA。在工作密钥的保护下,进行IKE第二阶段,生成IPSec SA。参照图4,消息1、6、7和传统国密IKE过程一样,亦不再说明,只说明新增的消息2、3、4、5、8、9、10。
图4 改进后的IKE第二阶段流程图
消息2:m=SM1_ Encrypt(SM1_ Encrypt(HASH(1)+SA+Ni,key_w),key_g)。公网代理机向云密码机发送需要解密的数据。云密码机使用工作密钥解密获得HASH(1)、SA 和 Ni。
消息3:m=SM1_ Encrypt(HASH(1)+SA+Ni,key_g)。云密码机向公网代理机发送解密之后的{ HASH(1)+SA+Ni }。
消息4:m=SM1_ Encrypt(HASH(2)+SA+Nr,key_g)。公网代理机向云密码机发送需要加密的数据,云密码机用工作密钥进行加密运算得到SM1_ Encrypt(HASH(2)+SA+Nr,key_w)。
消息5:m=SM1_ Encrypt(SM1_ Encrypt(HASH(2)+SA+Nr,key_w),key_g)。云密码机向公网代理机发送SM1_ Encrypt(HASH(2)+SA+Nr,key_w)。
消息8:m=SM1_ Encrypt(SM1_ Encrypt(HASH(3),key_w))。公网代理机向云密码机发送需要解密的数据,云密码机用工作密钥进行解密运算得到HASH(3)。
消息9:m=SM1_ Encrypt(HASH(3),key_g)。云密码机向公网代理机发送HASH(3)。
消息10:m=SM1_ Encrypt(KEYMAT,key_g)。公网代理机向云密码机发送会话密钥素材KEYMAT,云密码机生成并存储会话密钥ker_s。
对改进后的IKE的新增消息进行安全性分析,设p为需要保护的信息集合;compare(m,p)表示把m和p进行对比运算,若m中有p运算结果为1,否则为0。
改进后的IKE第一阶段中,
消息4:p={Ski,Ni,IDi},m=SM1_ Encrypt(XCHi+SIGi,key_g),XCHi=SM2_Encrypt(Ski,pub_r)+SM1_ Encrypt(Ni,Ski)+SM1_ Encrypt(IDi,Ski)+CERT_sig_i+CERT_enc_i,SIGi=SM2_Sign(Ski+Ni+IDi+CERT_enc_i,priv_i),compare(m,p)=0。
消息5:p={Ni,IDi},m=SM1_ Encrypt(p,key_g),compare(m,p)=0。
消息6:p={Skr,Nr,IDr},m=SM1_ Encrypt(p+CERT_enc_r,key_g),compare(m,p)=0。
消息7:p=Ø,无需保护。
消息9:p={SKEYID},m=SM1_ Encrypt(p,key_g),compare(m,p)=0。
消息11:p={HASHi},m=SM1_ Encrypt(SM1_ Encrypt(p,key_w),key_g),compare(m,p)=0。
消息12:p={HASHi},m=SM1_ Encrypt(p,key_g),compare(m,p)=0。
消息13:p={HASHr},m=SM1_ Encrypt(p,key_g),compare(m,p)=0。
消息14:p={HASHr},m=SM1_ Encrypt(SM1_ Encrypt(p,key_w),key_g),compare(m,p)=0。
改进后的IKE第二阶段中,
消息2:p={HASH(1),SA,N},m=SM1_ Encrypt(SM1_ Encrypt(p,key_w),key_g),compare(m,p)=0。
消息3:p={HASH(1),SA,Ni},m=SM1_ Encrypt(p,key_g),compare(m,p)=0。
消息4:p={HASH(2),SA,Nr},m=SM1_ Encrypt(p,key_g),compare(m,p)=0。
消息5:p={HASH(2),SA,Nr},m=SM1_ Encrypt(SM1_ Encrypt(p,key_w),key_g),compare(m,p)=0。
消息8:p={HASH(3)},m=SM1_ Encrypt(SM1_Encrypt(p,key_w),key_g),compare(m,p)=0。
消息9:p={HASH(3)},m=SM1_ Encrypt(p,key_g),compare(m,p)=0。
消息10:p={KEYMAT},m=SM1_ Encrypt(p,key_g),compare(m,p)=0。
可见,改进后的IKE流程中p均受到加密保护,攻击者无法从数据包中直接获取p,即改进后的IKE流程是安全可靠的。
实验目的是验证VPNaaS系统的可行性,实验设备清单见表1。
表1 实验设备清单表
依照图5部署相关设备,在租户VPN网关和公网代理机建立IPSec VPN通道,然后在租户应用服务器用iperf3测试与租户数据库服务器是否能够通信。
图5 VPNaaS 系统功能测试网络拓扑图
由图6知,位于两个私网的租户应用服务器和租户数据库服务器已经能够进行通信,还需要进行ESP测试验证通信内容被加密保护。在租户应用服务器上使用Wireshark抓包,可以成功抓到ESP数据包,如图7所示。
图6 iperf3测试结果图
图7 ESP测试结果图
经过两次实验,证明了VPNaaS系统成功的在租户应用服务器和租户数据库服务器之前成功搭建了IPSec 通道,所以VPNaaS系统具备可行性。
文中提出的面向公有云的国密IPSec VPNaaS系统,为公有云上的国密IPSec VPN需求提供了解决方案。它的特点有:VPN网关的设备密钥由云密码机的加密卡存储,满足国密标准的密钥安全要求;支持三员管理,满足国密标准的管理模式要求;VPN网关集群的VPC都是针对租户独立创建的,具备良好的隔离性;VPN网关设备的初始化部署与维护由VPN服务商来负责,租户可以直接使用。
由于虚拟VPN网关设备在性能上和传统硬件VPN网关设备存在一定的差距,未来的工作的重点是如何降低虚拟VPN网关的性能损耗。