程鳳偉
(太原學(xué)院,山西 太原 030032)
計(jì)算機(jī)的飛速發(fā)展對社會(huì)產(chǎn)生了深遠(yuǎn)影響,并將長期持續(xù)下去,網(wǎng)絡(luò)技術(shù)的發(fā)展也隨之亦步亦趨。隨之凸顯的就是網(wǎng)絡(luò)安全,其中安全隱患是制約公共網(wǎng)絡(luò)發(fā)展的一個(gè)重要因素。在日常生活中,人們對網(wǎng)絡(luò)的依賴性越來越強(qiáng),但是網(wǎng)絡(luò)遭到的惡意攻擊也呈現(xiàn)出越來越頻繁的態(tài)勢,這種情況需要安全設(shè)備來保護(hù)網(wǎng)絡(luò)內(nèi)部的用戶不被破壞,并能夠及時(shí)發(fā)現(xiàn)主動(dòng)抵御其攻擊,為用戶的正常網(wǎng)絡(luò)訪問提供一個(gè)安全隧道。近些年,VPN 技術(shù)在網(wǎng)絡(luò)安全基礎(chǔ)設(shè)施當(dāng)中,起到了重要的作用。
考慮到算法的容錯(cuò)性,本文所提出的算法不僅要符合國際通信標(biāo)準(zhǔn),實(shí)現(xiàn)國家密碼局[5,6]發(fā)布的國家標(biāo)準(zhǔn)安全算法,更要實(shí)現(xiàn)安全I(xiàn)PSecVPN 的國產(chǎn)化。安全通信領(lǐng)域的常見安全算法有以下幾種,根據(jù)其安全功能的不同可以分為對稱算法、非對稱的公鑰算法、摘要算法、簽名算法(公鑰算法也能夠作為簽名算法使用),這幾種都屬于最基本的算法,在特殊的使用情形下,可能會(huì)衍生出新的算法。近幾年,這些算法得到了廣泛的應(yīng)用,能夠非常成熟地應(yīng)用到各個(gè)領(lǐng)域。
IPSecVPN 系統(tǒng)的結(jié)構(gòu)根據(jù)安全功能分為幾個(gè)大塊:AH 通信、ESP 加密、IKE 密鑰管理協(xié)商[6]以及應(yīng)用客戶端幾個(gè)部分。其中除了應(yīng)用客戶端是部署在客戶機(jī)上以外,其他的幾個(gè)部分,都是部署在Struts 架構(gòu)的JSP 服務(wù)器上,通過調(diào)用系統(tǒng)集成模塊,為實(shí)際應(yīng)用的提供服務(wù)。系統(tǒng)結(jié)構(gòu)圖如圖1 IPSecVPN 系統(tǒng)結(jié)構(gòu)所示:
圖1 IPSecVPN 系統(tǒng)結(jié)構(gòu)
IPSecVPN 加密算法的主要步驟總結(jié)如下:
Step1:IPSecVPN 通信模塊在4043 端口監(jiān)聽訪問請求。
Step2:用戶通過客戶端JApplet 發(fā)起IPSecVPN對應(yīng)所在地址的服務(wù)請求之后,用戶通過JSP 服務(wù)器用戶名、密碼認(rèn)證,通過AH 建立和IPSecVPN 服務(wù)器的連接。
Step3:通過IKE 部分進(jìn)行密鑰協(xié)商,建立會(huì)話密鑰。
Step4:建立IPSec 隧道,同時(shí)建立和制定IP 對應(yīng)的服務(wù)器以上述同樣的方式建立IPSec 隧道,實(shí)現(xiàn)雙方的IPSec 隧道互聯(lián)。
基于國密算法IPSevVPN 技術(shù)的安全設(shè)計(jì)包括以下幾個(gè)方面:簽名設(shè)計(jì)、國密密匙交換設(shè)計(jì)和安全隧道設(shè)計(jì)。
簽名設(shè)計(jì)是通過前面k 倍點(diǎn)的運(yùn)算得知公鑰加密算法的基本原理,G 點(diǎn)是生成元,dA 是用戶持有的私鑰,PA 是dA 倍點(diǎn)下計(jì)算得出的公鑰。將ZA 的公共信息以及公鑰等其他標(biāo)識(shí)一起構(gòu)成M0`,通過散列計(jì)算得出e,在通過生產(chǎn)的k 隨機(jī)數(shù)計(jì)算k 倍點(diǎn)(x1,y1)。通過e 和x1 的相加操作得出r,以及(1+dA)的逆和k-r*dA 的乘積,作為s 部分。兩個(gè)作為最終輸出校驗(yàn)發(fā)送給用戶B,當(dāng)然M 也發(fā)送給用戶B。用戶同樣通過公共信息ZA 和M`構(gòu)成M1`。在同樣的方式計(jì)算e`,而x1`,和y1` 通過s` 倍點(diǎn)和t 倍的PA 公鑰計(jì)算得出。同樣的方式計(jì)算得出R,然后和傳送的r 進(jìn)行比對,完成驗(yàn)證簽名工作。下面的過程中,r 為:BCDCC3FB2,B976F821,012ABDC0,6B6 D4D60,87E9B71B,7E2D9A60,DD3F6463,39E2522C。國密簽名運(yùn)算方式如下表1 國密簽名所示:
表1 國密簽名
國密密匙交換設(shè)計(jì)是通過兩個(gè)用戶之間建立會(huì)話以后協(xié)商會(huì)話密鑰的具體取值,它們通過一方發(fā)起,另外一方被動(dòng)響應(yīng),最終一致決定采取密鑰Key。這里假設(shè)A 發(fā)起、B 響應(yīng)。變量w 為n 的以2為底的對數(shù)取值折半求頂部函數(shù)減一。n 為隨機(jī)數(shù)的值域上限也是G 生成元的階,rA 的整體取值是[1,n-1]。用戶A:完成如下事件,產(chǎn)生隨機(jī)數(shù)rA,計(jì)算橢圓曲線的rA 倍點(diǎn)RA,并求得x,y 坐標(biāo);將橢圓曲線隨機(jī)數(shù)RA 發(fā)送給對方用戶B。用戶B:并行完成如下事件,同樣的方式產(chǎn)生隨機(jī)數(shù)rB,RB。并將x2 坐標(biāo)對應(yīng)bit 位進(jìn)行取反操作,即0 變1,1 變0。得出x2`。結(jié)合用戶私鑰導(dǎo)出隨機(jī)運(yùn)算后的tB。然后驗(yàn)證RA 的橢圓曲線域合法性,同樣方式計(jì)算法x1`,以及橢圓曲線點(diǎn)V,驗(yàn)證V 的橢圓曲線域合法性。通過密鑰派生函數(shù)KDF 將V 以及A、B 的標(biāo)識(shí)特征、還有密鑰長度作為參數(shù)生成派生密鑰KB。將這些信心進(jìn)行連接以及摘要生成記作SB,把RB,SB發(fā)送給用戶A。用戶A:計(jì)算x1`,計(jì)算tA,驗(yàn)證RB,計(jì)算x2`。(注:這里的計(jì)算方式同用戶B 的過程完全相同)計(jì)算對應(yīng)的橢圓點(diǎn)U,將U 作為參數(shù)同樣生產(chǎn)派生密鑰KA,并計(jì)算S1,并和用戶B 傳送過來的SB 比較,不同則失敗。同樣計(jì)算SA,并發(fā)送給用戶B。B:計(jì)算摘要結(jié)果S2,并檢驗(yàn)S2 和SA 的相同性,不同則失敗。詳情見表2 密鑰交換協(xié)議數(shù)據(jù)實(shí)例所示:
表2 密鑰交換協(xié)議數(shù)據(jù)實(shí)例
密鑰交換協(xié)議通過用戶A,B 的相互協(xié)商,共同產(chǎn)生了會(huì)話密鑰:D417B800,6C48CE08,F(xiàn)EB57500,74FC56E8,4FBB20F4,A90B2A34,DCFCF150,1A48 7D1F,292BA942,0E30F3C3,BB78AEE3,5A14534D。
安全隧道設(shè)計(jì)包括應(yīng)用層設(shè)計(jì)和內(nèi)核設(shè)計(jì),本系統(tǒng)在Linux 平臺(tái)下集成實(shí)現(xiàn)IPSecVPN 技術(shù)的VPN 服務(wù)器,最終使得服務(wù)器能夠進(jìn)行IKE 密鑰協(xié)商交換,運(yùn)用已實(shí)現(xiàn)的加密模塊實(shí)現(xiàn)VPN 連接后的數(shù)據(jù)報(bào)加密解密功能。通過在Linux 系統(tǒng)下結(jié)合已有的OpenSwan 軟件系統(tǒng)完成系統(tǒng)調(diào)用級別的設(shè)計(jì);在應(yīng)用層次使用pluto 進(jìn)程,實(shí)現(xiàn)服務(wù)的提供和模塊嵌入;系統(tǒng)內(nèi)核層的IPSec 實(shí)現(xiàn),采用NETKEY。在該內(nèi)核部分,將國密算法的實(shí)現(xiàn)作為模塊加入,使系統(tǒng)能夠載入該模塊,并能夠在合適的時(shí)機(jī)和其他應(yīng)用請求程序交互,完成VPN 服務(wù)。其應(yīng)用層和內(nèi)核部分各自完成自身的任務(wù),其中應(yīng)用層包括基本的系統(tǒng)配置、IKE 協(xié)商功能以及身份的驗(yàn)證等應(yīng)用功能。內(nèi)核層面完成IP 數(shù)據(jù)包VPN 封裝以及拆封功能、數(shù)據(jù)的安全功能。內(nèi)核設(shè)計(jì)又包括策略配置和IP 數(shù)據(jù)包封裝和接封裝。策略配置:NETKEY 在數(shù)據(jù)包發(fā)送和接收的時(shí)候,都要對其包進(jìn)行檢查和判別。在這個(gè)過程當(dāng)中,通過SP 和SA數(shù)據(jù)庫檢索實(shí)現(xiàn)隧道通信轉(zhuǎn)發(fā)。對于數(shù)據(jù)庫的配置策略以及資源分配,需要在conf.xml 文件當(dāng)中對應(yīng)實(shí)現(xiàn)配置,結(jié)合實(shí)際部署運(yùn)行需求配置最佳的分配策略使得服務(wù)器性能能夠得到最大化的發(fā)揮,取得良好的VPN 服務(wù)效果。IP 數(shù)據(jù)包封裝以及解封裝:在該部分,通過對PF_KEY 密鑰管理套接字接口的實(shí)現(xiàn)來完成具體的國密加密和通信解密。IP 頭后面的數(shù)據(jù)在轉(zhuǎn)發(fā)的時(shí)候完成對應(yīng)數(shù)據(jù)報(bào)部分的加密,在接受數(shù)據(jù)的時(shí)候,按照會(huì)話密鑰協(xié)定信息,完成對應(yīng)數(shù)據(jù)信息的解密。在數(shù)據(jù)的完整性保證方面,還要附加一段簽名信息,在簽名信息實(shí)現(xiàn)的過程當(dāng)中也需要用到摘要和公鑰,數(shù)據(jù)完整性保證在前面的算法協(xié)議中已經(jīng)做了充分的敘述,這里不再具體展開說明。
IPSec 數(shù)據(jù)包可以通過SA 數(shù)據(jù)庫進(jìn)行查找自動(dòng)獲取管理信息,找到對應(yīng)的加密算法,從而把協(xié)商密鑰提取出來。對該數(shù)據(jù)進(jìn)行加解密操作,通過SP數(shù)據(jù)庫的相關(guān)鏈接信息判斷該數(shù)據(jù)包該采取何種算法加密解密,引導(dǎo)系統(tǒng)采取正群的算法庫進(jìn)行加解密操作。內(nèi)核的密碼算法庫需要在其根目錄crypto下面提供新加入國密算法的注冊信息,這樣才能讓系統(tǒng)在調(diào)用系統(tǒng)加密模塊階段正確找到模塊位置執(zhí)行代碼調(diào)入操作。
Linux 內(nèi)核提供加解密核心調(diào)用框架,該部分既包括了算法模塊的注冊機(jī)制,也提供數(shù)據(jù)分組加密機(jī)制的提供,常見的直接支持的有CBC 與CCM,但是我們這里采用了CTR 高效并發(fā)運(yùn)作的機(jī)制,因此也需要在這個(gè)部分添加這種分組機(jī)制,提供加解密效率。
算法的注冊機(jī)制通過內(nèi)核全局鏈表來反應(yīng)這種注冊情況,通過定義該加解密數(shù)據(jù)結(jié)構(gòu)并將調(diào)用注冊函數(shù)實(shí)現(xiàn)算法的注冊和注銷。注冊算法名稱為Crypto_register_alg(),注銷算法名稱為Crypto_unregi ster_alg()。要想進(jìn)一步了解加解密算法的具體結(jié)構(gòu)細(xì)節(jié),要到include/crypto 下面看其頭文件。
分組模式和加解密函數(shù)的聯(lián)合調(diào)用是系統(tǒng)內(nèi)部可以自動(dòng)完成的工作,只需要在配置文件完成配置即可,因此在函數(shù)實(shí)現(xiàn)的部分,采用了直接的一個(gè)分組下的數(shù)據(jù)數(shù)組進(jìn)行加解密操作,作為加解密引擎模塊嵌入系統(tǒng)。例如SM2 的256 位實(shí)現(xiàn),只需要完成256 位數(shù)組的加密引擎算法即可。
在算法配置部分,對通信分組模式進(jìn)行設(shè)定,OTR 通信模式設(shè)計(jì),將消息按照OTR 方式分組傳送OTR 模式運(yùn)行方式如圖2 所示:
圖2 通信OTR 分組數(shù)據(jù)加密
在ESP 協(xié)議對其數(shù)據(jù)進(jìn)行加密處理之后,數(shù)據(jù)包尾部加入簽名信息,確保數(shù)據(jù)信息的完整性,能夠抵御敵手在篡改密文的情況下不被發(fā)現(xiàn)。這對應(yīng)予接受端用戶首先要根據(jù)IPSecSA 頭部信息規(guī)定的協(xié)議要求進(jìn)行完整性驗(yàn)證,即把簽名先提取出來,然后進(jìn)行完整性匹配,只有通過該驗(yàn)證的才執(zhí)行下面的操作,否則丟棄數(shù)據(jù)包并要求對方重新發(fā)送。驗(yàn)證算法同樣和加密算法在crypto 根目錄下面添加注冊信息,將國密驗(yàn)證簽名算法加載到算法模塊當(dāng)中,使得在數(shù)據(jù)插入簽名段和驗(yàn)證完整性簽名之前能夠正確找到該算法。
用同樣的方式部署兩臺(tái)Linux 服務(wù)器,并能夠互相之間建立網(wǎng)絡(luò)連接,它們下面都有自己的子網(wǎng),Linux 上面部署了IPSec 工具箱,部署編譯好的國密算法模塊,并添加系統(tǒng)加密庫注冊,以及安裝Tcpdump 檢測工具,能夠?qū)崟r(shí)抓包,發(fā)現(xiàn)其報(bào)文數(shù)據(jù)內(nèi)容的變化。簽發(fā)證書通過創(chuàng)建證書界面完成證書的創(chuàng)建工作。
創(chuàng)建證書之后,在命令行完成簽署證書的工作,然后配置系統(tǒng)的網(wǎng)關(guān)、子網(wǎng)配置、證書路徑、證書的名稱、IKE 配置、信息通信模式、加密算法、簽名算法、摘要算法、DH 隨機(jī)算法、以及ESP 協(xié)議配置、AH 配置等。完成IPSec 基本連接和加解密參數(shù)的相關(guān)配置,實(shí)現(xiàn)可連接。
子網(wǎng)設(shè)備通過通信聊天工具和對方的通信聊天工具進(jìn)行數(shù)據(jù)通信,通過Tcpdump 進(jìn)行抓包,分析其數(shù)據(jù)的格式,查看器VPN 工作狀態(tài)。
本文主要對基于國密算法的IPSecVPN 進(jìn)行了設(shè)計(jì),從國密算法以及安全隧道應(yīng)用層以及內(nèi)核層進(jìn)行了研究和設(shè)計(jì),該方案對于IPSecVPN 的國產(chǎn)化提供了一個(gè)安全解決方案,對安全產(chǎn)品生產(chǎn)企業(yè)[7]有重要的應(yīng)用價(jià)值。