蔣汶芮,羅俊,胡曉勤,龔勛
(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網關的性能損耗。