秦培斌,肖志輝,楊大川,楊 洋,李希源
(1.西南交通大學 信息科學與技術學院,四川 成都 610031;2.邁普通信技術股份有限公司,四川 成都 610041)
隨著當今網絡的飛速發展,網絡承載業務量的激增和業務種類的多元化變遷,人們對網絡設備提出了更高的要求。以路由器設備為例,不僅要求更加高速的數據處理轉發能力,同時要提供可靠的網絡安全協議,保障網絡數據的安全。在3G、4G無線傳輸,互聯網金融,電子政務以及傳統的銀行等對數據安全要求較高的應用場景中,網絡安全就顯得更為重要。可以說,在很大程度上網絡的安全性依賴于網絡傳輸設備的安全性。因此,在路由器、交換機等網絡傳輸設備中實現數據加密,對保障我國網絡安全具有重要意義。
現有的加密方式主要有軟件加密和硬件加密兩種[1]。軟件加密的優勢在于其設計難度和成本較低,但加密速度依賴于CPU的性能,且會消耗大量系統資源,安全性和可靠性較硬件加密差[2]。硬件加密采用專用的加密卡實現,具有較高的安全性和可靠性,越來越成為加密技術的發展方向。因此,如何提高硬件驅動的效率,以獲得對加密卡性能最大程度的利用,關系到整個通信設備的性能。
該加密卡主要由 FPGA、DDR、隨機數芯片、Flash和通信接口等模塊組成。FPGA是整個加密卡的核心部分,其完成SM1加密算法,內含6個獨立的SM1加解密通道。Flash中存儲有FPGA的程序鏡像,實現FPGA程序的上電加載。加密密鑰及加密向量由隨機數芯片產生以確保數據的隨機性。DDR模塊用來存取主機端發來的加解密報文和隨機數報文。SPI接口和10G以太接口通過2MM連接器完成路由器主機端與加密卡FPGA的管理數據和業務數據的交互。這種將管理數據和業務數據分離的實現方式,使加密卡控制集中、結構簡單,在保證數據安全的同時使加密卡具有更高的靈活性和效率。圖1為加密卡硬件結構框圖。從圖1中可以看出整個加密卡的核心處理機制就是由主機端的驅動程序和加密卡上的FPGA實現私有協議之間的通信,完成對加解密數據的傳遞。

圖1 加密卡硬件結構框Fig.1 Encryption card hardware structure
目前的數據加密技術根據密鑰類型可分為私鑰加密和公鑰加密[3],而SM1加密算法是一種私鑰(對稱)加密算法。本加密系統采用IPSec協議層<——>SM1加密算法驅動層<——>SM1硬件加密芯片這種軟硬件架構。根據IPSec層的調用需求,為了獲得更強的SM1算法處理能力,SM1加密算法驅動層采用異步流水線方式實現。IPSec協議層可以將報文批量傳入驅動層,然后進行緩存和排序,驅動層通過萬兆以太通道交送硬件加密芯片進行加密處理,待報文加密完成并回送至驅動層過后,驅動層通過回調函數將報文送回IPSec協議層。
加密卡驅動程序設計是基于VxWorks操作系統編寫的,主要分為初始化模塊、私有調試模塊、數據收發模塊和工裝測試模塊,各模塊間的調用關系及數據流如圖2所示。初始化模塊主要完成對FPGA等硬件資源的初始化、軟件緩存隊列的申請以及發送接收任務的創建和注冊。私有調試模塊和工裝測試模塊主要完成對加密卡加解密報文的正確性測試和性能測試。數據收發模塊是整個加密卡驅動的核心,需要維護驅動緩存隊列,完成對數據的收發,同時要考慮多核下操作虛擬BD環的任務互斥問題。
常用的加密模式分為ECB模式和CBC模式[4],本加密系統采用CBC模式。加密卡共有6個獨立的CBC加解密通道,每個加解密通道的DDR緩存大小為3 MB,因此,每個加解密通道對應的虛擬BD環長度設為2048,即每個加解密通道同時收到的加解密報文最多為2048個。處理器中含有7個數據轉發核,每個轉發核綁定1個發送任務(Tx Job),用于發送加解密報文到以太通道。同時,由于加密卡中含有6個獨立的加解密通道,因此設計6個發送隊列(SendNode),分別對應6個虛擬BD環和加解密通道,發送隊列頭定義為SendNode Header。除此之外,每個轉發核綁定1個預先分配好的FreeNode隊列,供本轉發核上的6個SendNode隊列從中取出緩存空間,緩存排序報文并入Send-Node隊列,FreeNode隊列頭為FreeNode Header,其隊列最大長度為4096。
加密卡的數據處理流程都是送數據到加密卡,然后等待返回處理結果的過程[5]。同步和異步方式都可以實現對數據的加解密,然而同步方式處理速度較慢,無法滿足高性能設備的效率要求。根據需求,選擇異步方式實現驅動程序。
待加解密數據通過路由器主機端的IPSec層調用驅動程序發送接口,將待加解密的數據發送到驅動層,驅動層接收到IPSec發來的數據后按照圖3的異步加解密流程進行緩存處理,并將待加解密數據報文記錄至虛擬BD環,通過10G以太通道發送至加密卡進行加解密。從圖3中可以看出,整個異步處理流程可分為5個步驟,下面依據圖中標號進行詳細論述。

圖3 異步加解密流程Fig.3 Asynchronous encryption flow chart
1)為IPSec層傳入的需要加解密的報文申請Node緩存節點緩存該報文,對應的Node節點從FreeNode Header隊列中出隊,然后完成報文的處理和封裝并將信息緩存至Node節點。
2)將Node緩存節點掛接至對應的SendNode Header隊列,對應掛接至哪一個隊列根據上層IPSec傳入的加解密通道號決定,該通道號在配置隧道時已經預設好了。
3)7個發送核core1—core7通過Tx Job同時對各自的6個發送隊列SendNode Header進行出隊,從而可以更加高效的利用硬件加解密通道。同時為考慮每個發送核中6發送個隊列的負載均衡,避免從1個固定的隊列一次性全部出隊過后再進行下一隊列的操作,每個隊列發送8個報文后即轉向下一隊列進行發送操作。最后,將出隊的Node信息同步至虛擬BD環,此時需要考慮不同Core對虛擬BD環的同時操作,需要互斥鎖進行保護,如圖4所示。

圖4 發送任務過程Fig.4 Transmit job process diagram
4)此時Node緩存節點的使命已經完成,被釋放回原有的FreeNode Header隊列中等待后續報文的處理。
5)將報文信息記錄至虛擬BD環上,調用對應的以太通道發送函數將報文通過10G以太通道發送至加密卡FPGA進行加解密。
至此,待加解密數據已由路由器主機端發送至加密卡,接下來將由硬件加密卡完成對數據的加解密處理。當數據由加密卡加解密完成后,加密卡通過10 G以太通道將加密后的報文發送回路由器主機端。驅動層的數據接收任務通過不斷輪詢,當發現有加解密完成的數據收回時,調用相應的接收處理函數解鎖對應虛擬BD環,完成報文解析并將數據部分送回IPSec層,由IPSec層完成后續處理,從而完成整個報文的一個處理流程。
目前國內加密卡實現的加密速度一般不超過2 Gb/s[6]。為測試驅動程序的穩定性和性能,在VxWorks操作系統下設計完成驅動程序后,進行了單包加解密測試,裸跑速率測試,IPSec流量測試。單包加解密測試中,由驅動程序自己構造加解密報文,發送給加密卡進行加解密,然后將單包加解密結果與理論結果比較,驗證了加密驅動工作正確。為測試加密驅動的板卡級速率,驅動程序為每個轉發核構造了2000個長度為1400 B的報文,共14000個報文(7個轉發核)發送到加密卡進行加解密,待加密報文全部加密完成返回驅動層時,計算所有報文加解密所用時間(精確到微秒),由此可計算出驅動層數據收發速率。計算公式為:PPS=2000×7/加密所用時間,bps=2000×7×1400×8/加密所用時間。最后,由IPSec層調用驅動收發數據進行流量測試,將整個加密系統進行了長時間的完整測試,未出現異常。測試結果如表1所示。

表1 加解密測試結果Table 1 Encryption test result
本文基于多核處理器設計了一種加密卡異步并行驅動,并對其軟硬件架構及緩存和數據收發流程做了詳細介紹。通過性能測試可以看出,驅動程序運行穩定且具較高的數據收發速率,達到了預期目的[7]。本加密卡所設計的異步驅動程序,基于的處理器有7個轉發核,加密卡中存在6個加解密通道,若在實際設計中轉發核數目和加密通道數目發生變化,只需將相應的緩存隊列數目改變即可,數據收發流程依然相同。可見本驅動程序具有良好的可擴展性和兼容性,在信息安全領域具有良好的應用前景。
[1]郭蘭.加密卡的研制與加密算法的FPGA實現[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的高速加密卡設計與實現[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算法的數據加密傳輸系統設計[J].通信技術,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]帕爾·佩爾茨兒.深入淺出密碼學—常用加密技術原理與應用[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的高速加密卡異步并行驅動設計[J].電力系統自動化,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的加密網卡的設計與實現[D].北京:北京工業大學,2005.KONG Jie.Encryption Network Card Design and Implementation Based on DSP[D].Beijing:Beijing University of Technology,2005.
[7]姜明華,丁益祥.Linux下加密卡驅動程序的設計與實現[J].武漢科技學院學報,2004,17(05):51-55.JIANG Ming-hua,DING Yi-xiang.Encryption Card Driver Design and Implement Based on Linux[J].Wuhan Textile University Jouranl:2004,17(5):51-55.