蔣 華 李康康 胡榮磊
1(北京電子科技學院 北京 100070)2(西安電子科技大學 陜西 西安 710071)
?
一種基于strongSwan的IPSec VPN網關的實現
蔣 華1,2李康康2胡榮磊1
1(北京電子科技學院 北京 100070)2(西安電子科技大學 陜西 西安 710071)
IPSec VPN是一種使用IPSec協議來實現的虛擬專用網技術。針對國密算法在網絡安全產品上的應用相對較少這一問題,設計一種基于開源IPSec項目strongSwan的VPN網關。該網關使用SSX0912加密芯片中的國密算法接口替換了strongSwan的國際密碼算法接口,完成了strongSwan對國密標準的支持。將修改后的strongSwan移植到AM335x為核心的開發板中,在嵌入式硬件環境中實現了IPSec VPN的網關。通過搭建開發環境測試,該網關運行穩定,延時小,使用硬件加密模塊,安全性更高,相比于簡單的Linux系統實現,應用范圍也更加廣泛。
虛擬專用網 國密算法 strongSwan 嵌入式
隨著IPSec VPN對性能、安全性的要求越來越高,IKEv1(網絡密鑰交換)協議[1]的冗余性、缺乏一致性的缺點越來越明顯[2]。因此,在2005年10月,IETF工作組發布了IKE協議的第二版,即IKEv2[3]。IKEv2簡化了IKEv1的復雜功能,增強了安全性,具體體現在抵御中間人攻擊、拒絕服務攻擊、完美前向保護等幾個方面。IPSec協議是目前VPN技術開發中使用最廣泛的一種安全協議[4]。Linux上常用的IPSec協議實現有Frees/wan項目,Frees/wan分為Openswan和strongSwan。Openswan是Linux下的開源項目,由于軟件結構相對簡單,安全性較好,兼容效果好,已經集成于Cisco等多家廠商的VPN產品中[5]。但是Openswan也有局限性,那就是只支持IKEv1協議,而IKEv1協議的冗余性等缺點對它今后的發展前景帶來了很大的限制。IKEv2同時兼顧高效性、安全性的特點將會越來越受到人們的青睞。strongSwan同時支持IKEv1和IKEv2協議,可以廣泛應用于不同的終端,包括PC、安卓手機、IOS手機等。
VPN的數據加解密技術、隧道技術、密鑰管理技術、用戶身份認證技術已經廣泛應用于保障互聯網信息安全的方方面面。數據加解密技術中使用的密碼算法全部是來自于國外組織或機構制定的標準,常用的有DES、3DES、AES、SHA-1、ECC等。為了適應我國自身的安全需求,我國國家密碼管理局批準了一系列國密標準的密碼算法,例如SM1、SM2、SM3、SM4、祖沖之算法等。在此基礎上也制訂了基于國密算法的VPN技術規范[5]。因此,基于國密的IPSec協議標準,實現自主可控的IPSec VPN網關是國家安全和經濟發展的需要。
本文通過替換strongSwan中的加密算法,添加對國密SM3、SM4算法的支持,并且將strongSwan移植到嵌入式平臺下,搭建IPSec VPN開發環境,最后經過測試,分析了該網關的性能。
網關結構如圖1所示,包括加密模塊和AM3-35x為核心的開發板。

圖1 網關總體結構圖
1.1 硬件加密模塊設計
硬件加密模塊是VPN網關實現的基礎。傳統的軟件加密系統具有開發時間短、研發成本低等優點,但是硬件加密在抵御攻擊、密鑰的安全存儲、運算速度等方面有更大的優勢。所以加密模塊的設計往往決定著VPN的性能的好壞。
本文通過美國德州儀器推出的OMAPL137[6]雙核心芯片設計了加密模塊,芯片包含ARM和DSP兩部分。其中,ARM端負責通信機制的控制,而DSP端結合SSX0912安全加密芯片對密碼算法進行處理。ARM和DSP端通信是基于Ti公司的DSPLINK技術。加密模塊在功能上作為一個可接入多個通信終端的設備,并且加密模塊的安全服務獨立于通信系統,加密模塊開發完成以后只向外界提供一些可用的 API 接口,外界通信終端只要調用 API 接口就能實現加解密等安全服務功能。
加密模塊的設計采用了SSX0912安全加密芯片。SSX0912安全加密芯片可以實現SM2、SM3、SM4等國標密碼算法,同時也帶有UART總線接口、RS232總線接口、HSPI總線接口和USB2.0接口。用戶可以根據應用選擇不同的接口。
針對安全應用,SSX0912安全加密芯片參照了X.509V3的證書格式,自定義了證書結構,在模塊中加入了證書和CA公鑰存儲,方便密鑰協商和身份認證。
由于OMAPL137要通過USB和外界進行通信,要接收外界發過來的數據,所以軟件方面驅動的編譯是關鍵。安全模塊相比于AM335x來說是一個從設備,這就要涉及到USB gadget的驅動開發。因為直接編寫驅動程序會很困難,所以通過查閱資料,本設計決定修改Linux設備驅動程序gadget_serial.c來完成驅動程序。
通過對Linux設備驅動程序結構的分析,Linux虛擬串口設備驅動程序的程序框架和其他設備驅動的程序框架是一樣的。所不同的是在設備驅動程序里添加一些支持字符處理的接口函數,并且在 USB 虛擬串口中添加關于串口通信的驅動模塊。值得一提的是,讀寫速度有多大,串口不能控制,也就是說 USB 給出多大的速度,出口就能讀寫多大的速度。所以,虛擬串口的速度不受串口波特率的影響,只受 USB 協議讀寫速度的影響。
將修改好的程序加載到Linux內核,然后交叉編譯內核,生成g_serial.ko。接著通過制作Ramdisk根文件系統把g_serial.ko文件拷貝進去,燒寫文件系統,由超級終端重啟開發板OMAPL137,使用命令insmodg_serial.ko加載驅動。通過cat /proc/devices可以查看到已加載驅動的設備號,最后用mknod /dev/ttyusb c 127 0創建設備節點。為了防止每次啟動開發板系統都要重新加載驅動,可以在/etc/init.d/rcS程序自啟動文件中輸入以上命令,這樣每次重啟驅動就自動加載了。驅動加載完成之后就可以通過USB OTG接口和外界終端設備通信了。
1.2 AM335x驅動設計
根據圖1所示網關結構,strongSwan開源程序在經過修改后,交叉編譯到AM335x中,AM335x和加密模塊通過USB接口進行通信,此時的AM335x相對于OMAPL137來說是主設備[7]。因為嵌入式系統內核是裁剪過的,許多設備驅動并沒有,所以我們需要為主設備AM335x添加CDC-ACM驅動,CDC-ACM驅動允許任何通信設備去提供一個串口通信接口。具體步驟:
1) 在AM335x的Linux內核中找到CDC-ACM支持的選項,如圖2所示。

圖2 CDC-ACM內核選項
2) 選中module之后,使用AM335x的交叉編譯工具編譯內核,在./drivers/usb/class目錄下可以找到cdc-acm.ko。
3) 將cdc-acm.ko移到AM335x中,insmod cdc-acm.ko,在插上USB數據線時會動態產生驅動ttyACM0。
2.1 軟件平臺
VPN網關的操作系統是經過裁剪的實時Linux系統,通過對內核的裁剪和修改,去除了許多不必要的模塊,保留了一些必要的驅動支持。操作系統由通用的Linux系統變為實時的操作系統,節省了空間,提升了便利性,使系統性能得到了很大的提高[8]。
2.2 strongSwan簡介
strongSwan是一個完整的IPSec實現,支持的Linux內核為2.6、3.x和4.x。strongSwan的重點是其強大的身份認證機制,它還有很多優點,例如支持證書撤消列表和在線證書狀態協議(OCSP),完全支持IPv6 IPSec隧道和傳輸連接,支持ESP(封裝安全載荷)[9]單獨使用時的NAT穿越,完美的PFS(前向保護性)等。和Openswan僅支持IKEv1協議相比,strongSwan同時支持IKEv1和IKEv2協議。
strongSwan中的IKEv2協議的消息協商對IKEv1進行了很大的改進。IKEv1協商過程非常復雜,分為兩個階段,四種模式。而IKEv2取消了模式的概念,消息交換包含三個基本交換類型:初始交換(Initial交換)、協商子SA交換(CREATE_ CHI-LD_SA交換)、信息交換(INFORMATION Exchang-e)[2-3]。
strongSwan使用daemon(守護進程)來控制IKE過程,如圖3所示。不同的IKE版本daemon不同,IKEv1協議使用pluto,而IKEv2協議使用charon。

圖3 strongSwan IKE 守護進程
2.3 strongSwan密碼算法的替換
SSX0912加密芯片提供了SM3、SM4等國密算法的接口,外界通信終端只要調用這些接口就能實現加解密等安全服務功能。
通過分析strongSwan源碼的結構,其中有許多插件(plugin),加載密碼算法的插件在/src/libstrong-swan/目錄中,libstrongswan結構如圖4。在所加載的插件中,對稱加密算法插件有aes、des等,完整性驗證所用到的摘要算法有sha1、sha2、md4、md5等,除了這些密碼算法外,還有openssl庫、sqlite庫等。其中一些不常用的算法會使用openssl中的函數來實現,strongSwan數字簽名算法用的就是openssl函數庫中的ECDSA,即橢圓曲線數字簽名算法。

圖4 基于plugin的libstrongswan模塊結構
SM3、SM4算法的替換只是在原有算法的基礎上更改了函數的接口,并且修改了算法的命名機制,將原有的“aes-128”和“sha-256”分別替換為“SM4”和“SM3”。算法替換完成后需要證明是否替換正確。
2.3.1 SM4算法的替換
strongSwan啟動時默認加載的是aes-128算法,即密鑰長度和數據長度均為16字節,這和SM4算法相對應,所以只需修改aes_crypter.c程序即可。通過研讀aes_crypter.c,主要函數有:encrypt()和decrypt()。Encypt()函數是加密函數,decrypt()是解密函數,它們都包含encrypt_block()函數,就是用來加密一塊數據的函數。SM4程序中對應的函數為sm4_crypt_ecb()和sm4_crypt_cbc(),這兩個函數均為SSX0912中的算法接口,可以使用ioctl的方式調用這兩個接口。因為SM4算法解密是加密的逆過程,所以只需將加密標志SM4_ENRYPT換為解密標志SM4_DECRYPT即可,具體代碼不再贅述。
2.3.2 SM3算法的替換
strongSwan默認加載的雜湊算法為sha-1,sha-1輸出的摘要值長度為96位或者160位,而SM3算法輸出摘要值為256位。又因為sha-256算法的輸出摘要值長度為256位,這樣就能夠和SM3算法相對應起來了。由于strongSwan結構的特殊性,提供sha-256函數源碼的插件有兩個:一個是plugin文件夾中的sha2插件,這里面包含sha-256、sha-384、sha-512三個雜湊函數;另一個是openssl插件,它是調用openssl庫中的開源函數來實現雜湊函數的。但是在IKE和ESP過程中,默認加載的并不是sha2插件中的sha-256函數,而是openssl函數庫中的sha-256函數。通過屏蔽openssl中調用sha-256函數的代碼,strongSwan就開始調用sha2插件中的sha-256函數了,這時候只要修改sha2插件中的sha2_hasher.c程序即可。
在sha2_hasher.c程序中,有兩個函數:get_hash- 256()、allocate_hash256(),主要功能分別是獲取摘要值和分配哈希函數空間。它們都包含兩個主要的接口:sha256_write()和sha256_final(),將它們替換成SM3算法的接口,即sm3_update()、sm3_finish(),它們均為SSX0912加密芯片的接口。同理,al-locate_hash256()函數替換方法與之相同。
2.4 移植strongSwan
在一種計算機環境中運行的編譯程序,能編譯出在另外一種環境下運行的代碼,我們就稱這種編譯器支持交叉編譯。簡單地說,就是在一個平臺上生成另一個平臺上的可執行代碼,而這種工具就是交叉編譯器。
strongSwan要想在AM335x上成功運行,這就需要進行交叉編譯。移植之前,已經在Ubuntu Linux中安裝好了AM335x的交叉編譯工具。
2.4.1 strongSwan驅動編譯
strongSwan運行時需要許多必要的驅動,這些驅動在AM335x的內核中并沒有被加載,需要手動添加內核選項并且重新編譯內核,根據strongSwan官網提供的內核編譯選項進行添加,如圖5所示。

圖5 strongSwan需要的內核驅動選項
按照圖5提供的內核選項,可以看出strongSwan需要加載AH傳輸、ESP傳輸、IPSec傳輸和隧道模式等必要的驅動。將這些驅動直接加載進內核中,交叉編譯AM335x開發板內核,在./arm/boot文件夾中生成了新的內核zImage,根據開發板提供的燒寫方法,重新燒寫內核即可。
2.4.2 交叉編譯strongSwan
通過閱讀strongSwan在Ubuntu Linux上成功運行的日志,可以看到strongSwan需要加載一些插件。而有些插件例如openssl庫、gmp庫、sqilte庫在嵌入式環境下是沒有的,這時候就需要將這些必要的庫移植進開發板。
交叉編譯過程中需要注意的幾點:
1) 從源碼安裝開始,也就是使用命令./configure,后面需要許多選項,包括不同的插件,交叉編譯工具的路徑,生成文件的路徑,必須要鏈接的一些庫。
2) 使用make命令編譯安裝:make&&make install。
3) 編譯生成的strongSwan文件夾如果直接通過tftp協議傳到開發板中,這樣會比較麻煩,重新制作AM335x的文件系統再進行燒寫會比較簡單。
3.1 測試環境的搭建
在將strongSwan移植進AM335x開發板之后,搭建如圖6所示站點到站點的VPN。

圖6 測試環境
VPN網關是網關型安全設備,它可以訪問公網,而不改變原配置局域網和路由器之間的網絡結構[10]。AM335x開發板有兩個網口,同時支持4G和WiFi,測試環境就選在WiFi中實現。如圖6所示,終端PC A和PC B分別連接AM335x的eth1網口,兩個eth0網口分別通過一個Router連接公網Internet。
Router1 WAN口IP地址:192.168.227.121,Router2 WAN口IP地址:192.168.227.122,PC C的IP地址:192.168.227.123。設置其他網卡的IP地址,其中PC A的IP地址:192.168.30.101,PC B的IP地址:192.168.31.101,與A連接的eth1網口IP地址:192.168.30.121,eth0網口IP地址:192.168.1.2,與B連接的eth1網口IP地址:192.168.31.121,eth0網口IP地址:192.168.2.2。
3.2 IKE協商過程測試
strongSwan成功移植進AM335x開發板后,使用IPSec pki命令生成證書來驗證發起方和響應方的身份,經過對IPSec.conf、IPSec.secrets文件的配置,緊接著使用命令IPSec start-nofork分別啟動兩端的strongSwan,成功地產生了隧道“192.168. 30.121/24===192.168.31.121/24”,此時網關后面的主機A和B可以互相訪問。
通過wireshark在PC C使用混雜模式進行抓包,可以捕捉到IKE三種消息交換的數據包。
IKEv2的初始交換分為了兩對消息[2],其中第一對消息的IKE_SA_INIT過程協商了加密與雜湊算法,交換了nonce值,完成了Diffie-Hellman密鑰協商。最后計算出了后面階段需要的各種密鑰值。在輸出日志上可以看到協商出的加密算法為SM4,雜湊算法為SM3,這就是之前替換過的算法。
3.3 ESP過程測試
根據圖6搭建的測試環境,在PC A上cmd命令行ping 192.168.31.101,也就是PC B的IP地址,再通過wireshark在PC C上抓包,使用混雜模式,就可以捕捉到了ESP包。
因為wireshark上抓到的ESP包是加密后的包,無法進行解密,通過設置strongSwan的日志等級為4級。查看一些敏感信息,就可以獲得加密和HMAC所需的密鑰,然后就可以進行SM4和SM3算法的驗證了。
通過閱讀日志得到的數據包和加密密鑰,使用國密SM4算法軟件進行加密,和wireshark抓到的加密包進行比較,結果完全相同,證明算法已經替換為了SM4國密算法。SM3算法經過驗證,也是正確的。
經過對結果分析,SM3和SM4算法替換成功,已經成功在strongSwan中添加了國密標準。
3.4 網關性能分析
首先測試和比較了在開發環境下,有VPN隧道和沒有VPN隧道時TCP和UDP傳輸的性能。首要的性能指數是Round-Trip Time(往返時延)[11],單位是ms。TCP一個特殊的性能指數是TCP吞吐量。UDP三個特殊的性能指標有UDP吞吐量、網絡抖動時間、丟包率[11]。吞吐量單位是Mbit/s,抖動時間單位是ms。使用命令ping來測試往返時延,發送100次,結果表明,沒有VPN隧道和有VPN隧道時平均往返時間分別為1和2 ms。
在VPN網關上使用命令iperf測試30M帶寬下,TCP在有VPN隧道和沒有VPN隧道時的吞吐量。分別設置發送數據大小為8、128、256、512 KB。結果如表1所示。

表1 不同數據下TCP吞吐量 Mbit·S-1
由表1可知,我們可知在沒有VPN隧道的情況下,使用命令iperf讀取256 KB數據時,TCP吞吐量最大,接近為28 Mbit/s,有VPN隧道時,TCP吞吐量為19.4 Mbit/s,減少了接近31%。
分別設置測試環境中帶寬為1、10、30、50 M,使用命令iperf來測試UDP傳輸的性能。其中UDP吞吐量如表2所示。

表2 不同帶寬下UDP吞吐量 Mbit·S-1
結果表示,當帶寬設置為50 M,沒有VPN隧道產生時,UDP吞吐量為29.8 Mbit/s,有VPN隧道時,UDP吞吐量為20.4 Mbit/s,減少量超過31%,而在小于30 M帶寬時,UDP吞吐量變化相對較小。
影響VPN隧道產生時TCP和UDP吞吐量的主要因素可能有以下幾點:
1) 加密模塊加密程序是基于多線程設計的,每次使用都需要打開和關閉加密模塊一次,這個步驟會使實際速度不能達到理論的峰值。
2) 根據表2結果分析,吞吐量的變化量和帶寬有關系,當帶寬為30 M時,吞吐量變化最小。
3) strongSwan程序在運行時也會消耗一定的時間,這樣也會影響速率。
此外,用命令iperf測出的UDP抖動時間和UDP丟包率分別如表3、表4所示。

表3 不同帶寬下UDP抖動時間 ms

表4 不同帶寬下UDP丟包率 %
分析表3、表4結果可知,在VPN隧道產生的情況下,UDP抖動時間在減少,雖然丟包率相比無VPN隧道時有了增加,總體來說,網關運行很穩定。
本文在嵌入式平臺下實現VPN網關,對系統內核進行了裁剪,去除了許多不必要的模塊,實時性相比于簡單的Linux上實現有較大的提高。使用開源軟件strongSwan實現IPSec VPN,替換了密碼算法,支持了國密標準,可以滿足國家安全與經濟發展的需求。srongSwan精簡了Openswan中IKE協商SA的過程,增強了安全性,提高了使用的便利性。采用硬件加密模塊,網關數據加解密、完整性驗證過程都由加密模塊來完成,實現了端到端的加密,相比于通信鏈路加密,進一步增強了安全性。根據文獻[11]給出的方法測試,網關運行穩定,延時小,基本符合應用需求。在strongSwan算法庫和Linux內核中注冊國密算法[12]而不是替換國密算法成為下一步工作的重點。
[1] Harkins D,Carrel D.RFC2409:The Internet Key Exch-ange (IKE) [S].1998.
[2] 劉驥宇.IKEv2協議在Linux環境下的實現[D].河南大學,2007.
[3] Kaufman C.RFC4306:Internet Key Exchange (IKEv2) Protocol [S]. 2005.
[4] 王鳳領.基于IPSec的VPN技術的應用研究[J].計算機技術與發展,2012,22(9):250-253.
[5] 鄭藝斌.基于國密標準的IPSec VPN服務器設計與實現[D].西安電子科技大學,2014.
[6] TI.OMAP-L137 C6000 DSP+ARM Processor Technical Reference Manual[Z]. TI:2013.
[7] 李成龍.基于 USB通信的嵌入式主從機系統設計與應用[D].中南大學,2013.
[8] 楊黎斌,慕德俊.基于硬件加密的嵌入式VPN網關實現[J].計算機工程與應用,2007,43(4):122-124.
[9] KentS.RFC4303:IP Encapsulating Security Payload(ESP) [S].IETF.2005.
[10] Fei C, Wu K, Wei C, et al. The Research and Implementation of the VPN Gateway Based on SSL[C]// Fifth International Conference on Computational and Information Sciences. IEEE, 2013:1376-1379.
[11] Du Meng.Implementation of a Host-to-Host VPN based on UDP tunnel and Open VPN Tap Interface in Java and its performance Analysis[C].International Conference on Computer Science & Education.2013:940-943.
[12] 鄧旻昊,汪海航.為IPSec添加新對稱加密算法[J].計算機安全,2008,28(1):25-27.
AN IMPLEMENTATION OF IPSEC VPN GATEWAY BASED ON STRONGSWAN
Jiang Hua1,2Li Kangkang2Hu Ronglei1
1(BeijingElectronicsScienceandTechnologyInstitute,Beijing100070,China)2(XidianUniversity,Xi’an710071,Shaanxi,China)
IPSec VPN is a technology using IPSec protocol to implement virtual private network. Aiming at the problem that the application of secret algorithm in network security product is relatively small, a VPN gateway based on the open source IPSec project strongSwan is designed. The gateway replaces strongSwan’s encryption algorithm interface with the SSX0912 encryption chip, which implements the strongSwan support for the state security standard. The modified strongSwan is transplanted to AM335x as the core of the development board in the embedded hardware environment to achieve the IPSec VPN gateway. By setting up the development environment, it is found that the gateway runs stably and has little delay. Compared with the simple Linux system, the hardware encryption module is more secure and the application range is more extensive.
Virtual private network State secret algorithm StrongSwan Embedded
2016-07-20。中央高?;究蒲袠I務費項目(328201502)。蔣華,教授,主研領域:通信與信息安全。李康康,碩士生。胡榮磊,副研究員。
TP393.08
A
10.3969/j.issn.1000-386x.2017.07.016