秦培斌,肖志輝,楊大川,楊 洋,李希源
(1.西南交通大學 信息科學與技術(shù)學院,四川 成都 610031;2.邁普通信技術(shù)股份有限公司,四川 成都 610041)
隨著當今網(wǎng)絡(luò)的飛速發(fā)展,網(wǎng)絡(luò)承載業(yè)務(wù)量的激增和業(yè)務(wù)種類的多元化變遷,人們對網(wǎng)絡(luò)設(shè)備提出了更高的要求。以路由器設(shè)備為例,不僅要求更加高速的數(shù)據(jù)處理轉(zhuǎn)發(fā)能力,同時要提供可靠的網(wǎng)絡(luò)安全協(xié)議,保障網(wǎng)絡(luò)數(shù)據(jù)的安全。在3G、4G無線傳輸,互聯(lián)網(wǎng)金融,電子政務(wù)以及傳統(tǒng)的銀行等對數(shù)據(jù)安全要求較高的應(yīng)用場景中,網(wǎng)絡(luò)安全就顯得更為重要??梢哉f,在很大程度上網(wǎng)絡(luò)的安全性依賴于網(wǎng)絡(luò)傳輸設(shè)備的安全性。因此,在路由器、交換機等網(wǎng)絡(luò)傳輸設(shè)備中實現(xiàn)數(shù)據(jù)加密,對保障我國網(wǎng)絡(luò)安全具有重要意義。
現(xiàn)有的加密方式主要有軟件加密和硬件加密兩種[1]。軟件加密的優(yōu)勢在于其設(shè)計難度和成本較低,但加密速度依賴于CPU的性能,且會消耗大量系統(tǒng)資源,安全性和可靠性較硬件加密差[2]。硬件加密采用專用的加密卡實現(xiàn),具有較高的安全性和可靠性,越來越成為加密技術(shù)的發(fā)展方向。因此,如何提高硬件驅(qū)動的效率,以獲得對加密卡性能最大程度的利用,關(guān)系到整個通信設(shè)備的性能。
該加密卡主要由 FPGA、DDR、隨機數(shù)芯片、Flash和通信接口等模塊組成。FPGA是整個加密卡的核心部分,其完成SM1加密算法,內(nèi)含6個獨立的SM1加解密通道。Flash中存儲有FPGA的程序鏡像,實現(xiàn)FPGA程序的上電加載。加密密鑰及加密向量由隨機數(shù)芯片產(chǎn)生以確保數(shù)據(jù)的隨機性。DDR模塊用來存取主機端發(fā)來的加解密報文和隨機數(shù)報文。SPI接口和10G以太接口通過2MM連接器完成路由器主機端與加密卡FPGA的管理數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)的交互。這種將管理數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)分離的實現(xiàn)方式,使加密卡控制集中、結(jié)構(gòu)簡單,在保證數(shù)據(jù)安全的同時使加密卡具有更高的靈活性和效率。圖1為加密卡硬件結(jié)構(gòu)框圖。從圖1中可以看出整個加密卡的核心處理機制就是由主機端的驅(qū)動程序和加密卡上的FPGA實現(xiàn)私有協(xié)議之間的通信,完成對加解密數(shù)據(jù)的傳遞。
圖1 加密卡硬件結(jié)構(gòu)框Fig.1 Encryption card hardware structure
目前的數(shù)據(jù)加密技術(shù)根據(jù)密鑰類型可分為私鑰加密和公鑰加密[3],而SM1加密算法是一種私鑰(對稱)加密算法。本加密系統(tǒng)采用IPSec協(xié)議層<——>SM1加密算法驅(qū)動層<——>SM1硬件加密芯片這種軟硬件架構(gòu)。根據(jù)IPSec層的調(diào)用需求,為了獲得更強的SM1算法處理能力,SM1加密算法驅(qū)動層采用異步流水線方式實現(xiàn)。IPSec協(xié)議層可以將報文批量傳入驅(qū)動層,然后進行緩存和排序,驅(qū)動層通過萬兆以太通道交送硬件加密芯片進行加密處理,待報文加密完成并回送至驅(qū)動層過后,驅(qū)動層通過回調(diào)函數(shù)將報文送回IPSec協(xié)議層。
加密卡驅(qū)動程序設(shè)計是基于VxWorks操作系統(tǒng)編寫的,主要分為初始化模塊、私有調(diào)試模塊、數(shù)據(jù)收發(fā)模塊和工裝測試模塊,各模塊間的調(diào)用關(guān)系及數(shù)據(jù)流如圖2所示。初始化模塊主要完成對FPGA等硬件資源的初始化、軟件緩存隊列的申請以及發(fā)送接收任務(wù)的創(chuàng)建和注冊。私有調(diào)試模塊和工裝測試模塊主要完成對加密卡加解密報文的正確性測試和性能測試。數(shù)據(jù)收發(fā)模塊是整個加密卡驅(qū)動的核心,需要維護驅(qū)動緩存隊列,完成對數(shù)據(jù)的收發(fā),同時要考慮多核下操作虛擬BD環(huán)的任務(wù)互斥問題。
常用的加密模式分為ECB模式和CBC模式[4],本加密系統(tǒng)采用CBC模式。加密卡共有6個獨立的CBC加解密通道,每個加解密通道的DDR緩存大小為3 MB,因此,每個加解密通道對應(yīng)的虛擬BD環(huán)長度設(shè)為2048,即每個加解密通道同時收到的加解密報文最多為2048個。處理器中含有7個數(shù)據(jù)轉(zhuǎn)發(fā)核,每個轉(zhuǎn)發(fā)核綁定1個發(fā)送任務(wù)(Tx Job),用于發(fā)送加解密報文到以太通道。同時,由于加密卡中含有6個獨立的加解密通道,因此設(shè)計6個發(fā)送隊列(SendNode),分別對應(yīng)6個虛擬BD環(huán)和加解密通道,發(fā)送隊列頭定義為SendNode Header。除此之外,每個轉(zhuǎn)發(fā)核綁定1個預(yù)先分配好的FreeNode隊列,供本轉(zhuǎn)發(fā)核上的6個SendNode隊列從中取出緩存空間,緩存排序報文并入Send-Node隊列,F(xiàn)reeNode隊列頭為FreeNode Header,其隊列最大長度為4096。
加密卡的數(shù)據(jù)處理流程都是送數(shù)據(jù)到加密卡,然后等待返回處理結(jié)果的過程[5]。同步和異步方式都可以實現(xiàn)對數(shù)據(jù)的加解密,然而同步方式處理速度較慢,無法滿足高性能設(shè)備的效率要求。根據(jù)需求,選擇異步方式實現(xiàn)驅(qū)動程序。
待加解密數(shù)據(jù)通過路由器主機端的IPSec層調(diào)用驅(qū)動程序發(fā)送接口,將待加解密的數(shù)據(jù)發(fā)送到驅(qū)動層,驅(qū)動層接收到IPSec發(fā)來的數(shù)據(jù)后按照圖3的異步加解密流程進行緩存處理,并將待加解密數(shù)據(jù)報文記錄至虛擬BD環(huán),通過10G以太通道發(fā)送至加密卡進行加解密。從圖3中可以看出,整個異步處理流程可分為5個步驟,下面依據(jù)圖中標號進行詳細論述。
圖3 異步加解密流程Fig.3 Asynchronous encryption flow chart
1)為IPSec層傳入的需要加解密的報文申請Node緩存節(jié)點緩存該報文,對應(yīng)的Node節(jié)點從FreeNode Header隊列中出隊,然后完成報文的處理和封裝并將信息緩存至Node節(jié)點。
2)將Node緩存節(jié)點掛接至對應(yīng)的SendNode Header隊列,對應(yīng)掛接至哪一個隊列根據(jù)上層IPSec傳入的加解密通道號決定,該通道號在配置隧道時已經(jīng)預(yù)設(shè)好了。
3)7個發(fā)送核core1—core7通過Tx Job同時對各自的6個發(fā)送隊列SendNode Header進行出隊,從而可以更加高效的利用硬件加解密通道。同時為考慮每個發(fā)送核中6發(fā)送個隊列的負載均衡,避免從1個固定的隊列一次性全部出隊過后再進行下一隊列的操作,每個隊列發(fā)送8個報文后即轉(zhuǎn)向下一隊列進行發(fā)送操作。最后,將出隊的Node信息同步至虛擬BD環(huán),此時需要考慮不同Core對虛擬BD環(huán)的同時操作,需要互斥鎖進行保護,如圖4所示。
圖4 發(fā)送任務(wù)過程Fig.4 Transmit job process diagram
4)此時Node緩存節(jié)點的使命已經(jīng)完成,被釋放回原有的FreeNode Header隊列中等待后續(xù)報文的處理。
5)將報文信息記錄至虛擬BD環(huán)上,調(diào)用對應(yīng)的以太通道發(fā)送函數(shù)將報文通過10G以太通道發(fā)送至加密卡FPGA進行加解密。
至此,待加解密數(shù)據(jù)已由路由器主機端發(fā)送至加密卡,接下來將由硬件加密卡完成對數(shù)據(jù)的加解密處理。當數(shù)據(jù)由加密卡加解密完成后,加密卡通過10 G以太通道將加密后的報文發(fā)送回路由器主機端。驅(qū)動層的數(shù)據(jù)接收任務(wù)通過不斷輪詢,當發(fā)現(xiàn)有加解密完成的數(shù)據(jù)收回時,調(diào)用相應(yīng)的接收處理函數(shù)解鎖對應(yīng)虛擬BD環(huán),完成報文解析并將數(shù)據(jù)部分送回IPSec層,由IPSec層完成后續(xù)處理,從而完成整個報文的一個處理流程。
目前國內(nèi)加密卡實現(xiàn)的加密速度一般不超過2 Gb/s[6]。為測試驅(qū)動程序的穩(wěn)定性和性能,在VxWorks操作系統(tǒng)下設(shè)計完成驅(qū)動程序后,進行了單包加解密測試,裸跑速率測試,IPSec流量測試。單包加解密測試中,由驅(qū)動程序自己構(gòu)造加解密報文,發(fā)送給加密卡進行加解密,然后將單包加解密結(jié)果與理論結(jié)果比較,驗證了加密驅(qū)動工作正確。為測試加密驅(qū)動的板卡級速率,驅(qū)動程序為每個轉(zhuǎn)發(fā)核構(gòu)造了2000個長度為1400 B的報文,共14000個報文(7個轉(zhuǎn)發(fā)核)發(fā)送到加密卡進行加解密,待加密報文全部加密完成返回驅(qū)動層時,計算所有報文加解密所用時間(精確到微秒),由此可計算出驅(qū)動層數(shù)據(jù)收發(fā)速率。計算公式為:PPS=2000×7/加密所用時間,bps=2000×7×1400×8/加密所用時間。最后,由IPSec層調(diào)用驅(qū)動收發(fā)數(shù)據(jù)進行流量測試,將整個加密系統(tǒng)進行了長時間的完整測試,未出現(xiàn)異常。測試結(jié)果如表1所示。
表1 加解密測試結(jié)果Table 1 Encryption test result
本文基于多核處理器設(shè)計了一種加密卡異步并行驅(qū)動,并對其軟硬件架構(gòu)及緩存和數(shù)據(jù)收發(fā)流程做了詳細介紹。通過性能測試可以看出,驅(qū)動程序運行穩(wěn)定且具較高的數(shù)據(jù)收發(fā)速率,達到了預(yù)期目的[7]。本加密卡所設(shè)計的異步驅(qū)動程序,基于的處理器有7個轉(zhuǎn)發(fā)核,加密卡中存在6個加解密通道,若在實際設(shè)計中轉(zhuǎn)發(fā)核數(shù)目和加密通道數(shù)目發(fā)生變化,只需將相應(yīng)的緩存隊列數(shù)目改變即可,數(shù)據(jù)收發(fā)流程依然相同??梢姳掘?qū)動程序具有良好的可擴展性和兼容性,在信息安全領(lǐng)域具有良好的應(yīng)用前景。
[1]郭蘭.加密卡的研制與加密算法的FPGA實現(xiàn)[D].成都:電子科技大學,2004.GUO Lan.Encryption Card Research and Implement of Encryption Algorithm in FPGA[D].Chengdu:University of Electronic Science and Technology of China,2004.
[2]彭陽,孟李林,李年,等.基于FPGA的高速加密卡設(shè)計與實現(xiàn)[J].電子科技,2013,26(06):42-45.PENG Yang,MENG Li-lin,LI Nian,et al.High Speed Encryption Card Design and Implement Based on FPGA[J].Electronics Technology:2013,26(6):42-45.
[3]朱作付,徐超,葛紅美.基于DES和RSA算法的數(shù)據(jù)加密傳輸系統(tǒng)設(shè)計[J].通信技術(shù),2010,43(04):90-92.ZHU Zuo-fu,XU Chao,GE Hong-mei.Design of DES and RSA-Based Data Encryption Transmission System Design[J].Communication Technology:2010,43(04):90-92.
[4]帕爾·佩爾茨兒.深入淺出密碼學—常用加密技術(shù)原理與應(yīng)用[M].馬小婷譯.北京:清華大學出版社,2012:118-122.MA Xiao-ting(translator).Understanding Cryptograph-a Text Book for Students and Practitioners[M].Beijing:Tsinghua University Press,2012.
[5]陳亞東,林為民,張濤,等.基于x86的高速加密卡異步并行驅(qū)動設(shè)計[J].電力系統(tǒng)自動化,2010,34(10):93-96.CHEN Ya-dong,LIN Wei-min,ZHANG Tao,et al.High Speed Asynchronous Parallel Driver Design Based on x86[J].Automation of Electric Power Systems:2010,34(10):93-96.
[6]孔潔.基于DSP的加密網(wǎng)卡的設(shè)計與實現(xiàn)[D].北京:北京工業(yè)大學,2005.KONG Jie.Encryption Network Card Design and Implementation Based on DSP[D].Beijing:Beijing University of Technology,2005.
[7]姜明華,丁益祥.Linux下加密卡驅(qū)動程序的設(shè)計與實現(xiàn)[J].武漢科技學院學報,2004,17(05):51-55.JIANG Ming-h(huán)ua,DING Yi-xiang.Encryption Card Driver Design and Implement Based on Linux[J].Wuhan Textile University Jouranl:2004,17(5):51-55.