,,,
(南京南瑞集團(tuán)公司,南京 211100)
在兩個(gè)不同安全防護(hù)等級網(wǎng)絡(luò)之間交換數(shù)據(jù)最常用的方法是使用網(wǎng)絡(luò)隔離裝置對數(shù)據(jù)以非網(wǎng)絡(luò)傳輸?shù)姆绞竭M(jìn)行數(shù)據(jù)傳輸。傳統(tǒng)網(wǎng)絡(luò)隔離裝置的基本結(jié)構(gòu)是兩個(gè)完全獨(dú)立的主機(jī)系統(tǒng)加一個(gè)數(shù)據(jù)擺渡模塊。為了進(jìn)一步增加數(shù)據(jù)擺渡的安全性,目前新興的網(wǎng)絡(luò)隔離裝置的基本結(jié)構(gòu)在傳統(tǒng)網(wǎng)絡(luò)隔離裝置的基礎(chǔ)上增強(qiáng)了加解密功能,首先對數(shù)據(jù)進(jìn)行加解密處理,再對數(shù)據(jù)進(jìn)行擺渡。網(wǎng)絡(luò)隔離裝置中數(shù)據(jù)加解密的性能和數(shù)據(jù)擺渡的性能直接決定了整個(gè)系統(tǒng)的性能。
現(xiàn)有的數(shù)據(jù)擺渡模塊一般有電子開關(guān)、單向FIFO、光纖和使用協(xié)處理器(FPGA等)擺渡數(shù)據(jù)4種方式,目前應(yīng)用最廣泛的是使用協(xié)處理器的方式。對數(shù)據(jù)的加密功能則主要有在主機(jī)系統(tǒng)上通過軟件實(shí)現(xiàn)數(shù)據(jù)加密、分離的加解密模塊這兩種方式。
軟件實(shí)現(xiàn)的加密方式在安全性方面有隱患,且加解密性能對主機(jī)系統(tǒng)的性能有很大的依賴性。分離的加解密模塊一般做成一塊獨(dú)立的加密卡,加密卡上的核心器件主要包括協(xié)處理器和密碼芯片等,一般通過PCI/PCIe接口和主機(jī)進(jìn)行數(shù)據(jù)交換,通過密碼芯片對數(shù)據(jù)進(jìn)行加解密處理。
分離的加密模塊提高了系統(tǒng)的安全性,但與傳統(tǒng)的網(wǎng)絡(luò)隔離裝置相比,增加了分離加密模塊的隔離裝置,在數(shù)據(jù)擺渡之前首先要將數(shù)據(jù)通過PCI/PCIe接口寫入到加解密模塊進(jìn)行加解密處理,加解密完成后的數(shù)據(jù)返回到主機(jī)系統(tǒng),主機(jī)系統(tǒng)再將加解密完成后的數(shù)據(jù)寫入到擺渡模塊進(jìn)行數(shù)據(jù)擺渡,在性能上打了折扣,同時(shí)還要額外占用主機(jī)系統(tǒng)的一個(gè)PCI/PCIe接口和CPU資源,增加了硬件成本。
本文以XILINX公司的XC7A100T系列 FPGA為硬件平臺,利用FPGA的并行性[1]特點(diǎn),設(shè)計(jì)了一款帶有加解密功能的高速數(shù)據(jù)擺渡模塊,在保證系統(tǒng)安全性的基礎(chǔ)上,提高了數(shù)據(jù)加解密和傳輸?shù)男阅?,同時(shí)降低了整個(gè)系統(tǒng)的硬件成本。
如圖1所示,本設(shè)計(jì)選用了兩片XILINX公司的XC7A100T FPGA芯片作為數(shù)據(jù)處理核心,數(shù)據(jù)擺渡模塊與主板之間采用PCIe接口通信。XC7A100T FPGA芯片該最多支持一個(gè)PCIe x4 Lane核,每個(gè)Lane線速為5 Gbps。
為了提高數(shù)據(jù)傳輸速率,降低擺渡模塊PCB硬件設(shè)計(jì)的難度,擺渡模塊的兩塊FPGA之間通過FPGA I/O口自帶的SERDES資源實(shí)現(xiàn)的高速串行接口進(jìn)行數(shù)據(jù)通信,與傳統(tǒng)的并行接口相比,利用FPGA內(nèi)部SERDES資源實(shí)現(xiàn)的高速串行接口具有速度快、傳輸距離遠(yuǎn)、占用芯片引腳少的優(yōu)點(diǎn)。此外還利用FPGA的并行性特點(diǎn),采用流水線的方式處理數(shù)據(jù)包,進(jìn)一步提高了數(shù)據(jù)處理的速度。
圖2 擺渡模塊FPGA邏輯架構(gòu)框圖
為了滿足網(wǎng)絡(luò)隔離裝置對數(shù)據(jù)加解密性能的要求,本文設(shè)計(jì)的數(shù)據(jù)擺渡模塊選用了北京宏思電子技術(shù)有限責(zé)任公司公司的SSX30-D密碼芯片以及北京華大信安科技有限公司的IS32U320A密碼芯片作為數(shù)據(jù)加解密處理及身份認(rèn)證、密鑰協(xié)商的核心模塊。
SSX30-D為高性能分組密碼算法芯片,實(shí)現(xiàn)了SM1(原名SCB2)密碼算法,性能最高為1.4 Gbps,在擺渡模塊中主要用作數(shù)據(jù)的加解密處理, IS32U320A芯片提供多種硬件協(xié)處理器及其配套安全算法庫,支持 RSA、SM2、SM3、SM4等密碼算法,在數(shù)據(jù)擺渡模塊中主要用作密鑰協(xié)商和身份認(rèn)證。數(shù)據(jù)擺渡模塊硬件系統(tǒng)示意圖如圖1所示。
圖1 數(shù)據(jù)擺渡模塊硬件系統(tǒng)示意圖
在硬件電路設(shè)計(jì)上,F(xiàn)PGA芯片XC7A100T具有BGA484封裝,扇出的信號較多,此外還需要1 V、1.2 V、1.8 V、3.3 V等多種電平標(biāo)準(zhǔn),PCIe接口的差分對走線對PCIe信號的完整性要求較高?;谝陨弦蛩?,本文設(shè)計(jì)的數(shù)據(jù)擺渡模塊采用了8層PCB板設(shè)計(jì)方案,從頂層到底層依次為信號層1、地平面1、信號層2、地平面2、信號層3、電源層1、電源層2、信號層4;同時(shí)對PCIE的差分對信號以及SSX30-D的數(shù)據(jù)總線做了等長處理。
本設(shè)計(jì)使用XILINX公司的Vivado軟件開發(fā)擺渡模塊FPGA器件的邏輯程序,F(xiàn)PGA內(nèi)邏輯程序設(shè)計(jì)主要包括:PCIe IP核的定制設(shè)計(jì)、DMA控制器的設(shè)計(jì)、數(shù)據(jù)解析模塊的設(shè)計(jì)、SSX30-D密碼芯片控制模塊的設(shè)計(jì)、IS32U320A密碼芯片控制模塊的設(shè)計(jì)、數(shù)據(jù)接收模塊的設(shè)計(jì)、中斷控制模塊的設(shè)計(jì)等,F(xiàn)PGA內(nèi)邏輯架構(gòu)框圖如圖2所示。
在PCIe數(shù)據(jù)通信中,有兩種數(shù)據(jù)傳輸方式: DMA(Direct Memory Access)和PIO(Programmed Input-Output)[3]。在DMA模式下,數(shù)據(jù)傳送不是由CPU負(fù)責(zé)處理,而是由一個(gè)特殊的處理器DMA控制器來完成,因此占用極少的CPU資源。在PIO模式下,數(shù)據(jù)傳送由CPU執(zhí)行I/O端口指令來按照字節(jié)或更大的數(shù)據(jù)單位來處理,占用大量的CPU資源,數(shù)據(jù)傳輸速度也大大低于DMA模式[4]。
本設(shè)計(jì)采用兩者相結(jié)合的方式,在DMA控制器中兼容了PIO控制器,通過PIO控制器將主機(jī)系統(tǒng)內(nèi)存中DMA[2]讀寫的起始地址寫入PCIe BAR空間, DMA控制器根據(jù)BAR空間中的地址主機(jī)系統(tǒng)內(nèi)存中的數(shù)據(jù)讀入到FPGA中的FIFO中緩存,再將FPGA處理完成的數(shù)據(jù)寫入到主機(jī)系統(tǒng)內(nèi)存中。
方:您在從事分編工作數(shù)年后又改換為情報(bào)檢索服務(wù)工作,并且發(fā)表了不少相關(guān)研究成果。您能簡要介紹一下其中發(fā)生轉(zhuǎn)變的情況嗎?
數(shù)據(jù)解析模塊主要將FIFO中緩存的數(shù)據(jù)進(jìn)行解析,并根據(jù)包頭字段定義的格式將數(shù)據(jù)包分別寫入到不同的下級FIFO中緩存,下級FIFO主要包括明文透傳FIFO、SM1緩存FIFO、SM2緩存FIFO三種,明文透傳FIFO中緩存的數(shù)據(jù)包直接通過FPGA內(nèi)的SERDES接口傳輸?shù)搅硗庖粔KFPGA;SM1緩存FIFO中緩存的數(shù)據(jù)包在SSX30-D密碼芯片控制模塊的控制下,寫入到SSX30-D密碼芯片進(jìn)行加解密處理,處理完成后的數(shù)據(jù)包再通過FPGA內(nèi)的SERDES接口傳輸?shù)搅硗庖粔KFPGA;SM2緩存FIFO中的數(shù)據(jù)包在IS32U320A密碼芯片控制模塊下寫入到IS32U320A芯片內(nèi)部進(jìn)行處理,處理完成后的數(shù)據(jù)返回到FPGA并通過DMA控制器寫入到主機(jī)系統(tǒng)內(nèi)存中。
數(shù)據(jù)接收模塊主要負(fù)責(zé)接收另外一塊FPGA傳輸過來的數(shù)據(jù),并寫入到接收FIFO中緩存,DMA控制器讀取接收FIFO中的數(shù)據(jù)并通過PCIe接口寫入到主機(jī)系統(tǒng)內(nèi)存中。
中斷控制模塊主要負(fù)責(zé)發(fā)送中斷到主機(jī)系統(tǒng),通知主機(jī)系統(tǒng)讀取數(shù)據(jù),PCIe設(shè)備的中斷方式主要有傳統(tǒng)中斷、MSI中斷兩種方式[5]。傳統(tǒng)中斷為電平觸發(fā),MSI中斷為邊沿觸發(fā),一個(gè)PCIe設(shè)備最多支持4個(gè)傳統(tǒng)中斷,MSI中斷方式最多可以達(dá)到32個(gè)。本設(shè)計(jì)使用MSI中斷方式,并能根據(jù)主機(jī)系統(tǒng)的CPU核個(gè)數(shù)動(dòng)態(tài)調(diào)整中斷數(shù)目,在每個(gè)CPU的核上綁定一個(gè)MSI中斷,使得CPU資源的使用更加均勻。
網(wǎng)絡(luò)隔離裝置的系統(tǒng)一般為Linux,數(shù)據(jù)擺渡模塊的Linux驅(qū)動(dòng)程序的核心是DMA部分的設(shè)計(jì)。本設(shè)計(jì)的DMA部分在借鑒了PCIe網(wǎng)卡的驅(qū)動(dòng)架構(gòu)基礎(chǔ)上設(shè)計(jì)了更適合自己的一套DMA架構(gòu)。首先在驅(qū)動(dòng)程序的初始化模塊(probe)中申請兩塊DMA緩存區(qū),一塊作為發(fā)送描述符緩存區(qū),一塊作為接收描述符緩存區(qū)。兩塊緩存區(qū)中分別存放了數(shù)百個(gè)DMA描述符,并分別為每個(gè)描述符申請對應(yīng)的數(shù)據(jù)DMA緩存區(qū)。描述符的結(jié)構(gòu)體定義如下:
struct dma_desc {
u32 sa; //數(shù)據(jù)緩存區(qū)對應(yīng)的源地址
u32 da; //數(shù)據(jù)緩存區(qū)對應(yīng)的目的地址
u32 length; //數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)長度
u32 status; //描述符的狀態(tài)
u32 next; //下一個(gè)描述符的地址
};
DMA分為兩個(gè)過程:數(shù)據(jù)從系統(tǒng)內(nèi)存搬運(yùn)到FPGA和數(shù)據(jù)從FPGA搬運(yùn)到系統(tǒng)內(nèi)存。數(shù)據(jù)從系統(tǒng)內(nèi)存搬運(yùn)到FPGA過程如下:用戶首先將數(shù)據(jù)寫入到發(fā)送描述符對應(yīng)的數(shù)據(jù)緩存區(qū),并將數(shù)據(jù)的長度寫入描述符的length變量中,通過PIO模式將描述符的起始地址寫入到數(shù)據(jù)擺渡模塊FPGA內(nèi)的PCIe BAR空間中。FPGA內(nèi)的DMA控制器根據(jù)BAR空間中描述符的起始地址啟動(dòng)DMA,將描述符讀入到FPGA,再根據(jù)描述符中的內(nèi)容,將描述符對應(yīng)的數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)讀入到FPGA,最后通過DMA更新主機(jī)系統(tǒng)中描述符中的status狀態(tài)值。用戶通過status狀態(tài)值可確定DMA過程是否結(jié)束。
數(shù)據(jù)從FPGA搬運(yùn)到系統(tǒng)內(nèi)存的過程與之有所區(qū)別,驅(qū)動(dòng)在加載時(shí),將接收描述符緩存區(qū)的地址通過PIO模式寫入到BAR空間,F(xiàn)PGA中有數(shù)據(jù)待傳輸?shù)街鳈C(jī)系統(tǒng)時(shí),DMA控制器首先根據(jù)BAR空間中接收描述符的地址將描述符讀入到FPGA,并根據(jù)描述符中的內(nèi)容將數(shù)據(jù)傳輸?shù)街鳈C(jī)系統(tǒng)中描述符對應(yīng)的數(shù)據(jù)緩存區(qū),并更新描述符中的status狀態(tài)值。最后通過中斷通知主機(jī),主機(jī)接收到中斷后,通過描述符中的status狀態(tài)值判別哪些描述符對應(yīng)的數(shù)據(jù)緩存區(qū)有數(shù)據(jù)可讀,將數(shù)據(jù)讀走后恢復(fù)描述符中的status狀態(tài)值。
為了突出實(shí)驗(yàn)效果,對安裝了本擺渡模塊的網(wǎng)絡(luò)隔離裝置和安裝了分離的數(shù)據(jù)加密模塊的網(wǎng)絡(luò)隔離裝置分別進(jìn)行測試。安裝本設(shè)計(jì)方案的網(wǎng)絡(luò)隔離裝置實(shí)物圖如圖3所示。安裝分離的加解密模塊的網(wǎng)絡(luò)隔離裝置如圖4所示。兩臺裝置系統(tǒng)主板軟硬件相同,CPU為Cavium Octeon III系列,主頻為2.4 GHz,操作系統(tǒng)為Linux,內(nèi)核版本3.10。
圖3 安裝了本方案的網(wǎng)絡(luò)隔離裝置
圖4 安裝了分離加密模塊的網(wǎng)絡(luò)隔離裝置
本擺渡模塊支持兩種數(shù)據(jù)擺渡方式:明文透傳和密文傳輸。明文透傳模式是指數(shù)據(jù)從一側(cè)的主機(jī)系統(tǒng)傳輸?shù)綌[渡模塊上的FPGA后不進(jìn)行任何處理,直接通過SERDES接口傳輸?shù)搅硗庖粔KFPGA進(jìn)而傳輸?shù)搅硪粋?cè)的主機(jī)系統(tǒng)。密文傳輸是指首先對報(bào)文進(jìn)行加解密處理,再通過擺渡模塊傳輸?shù)搅硪粋?cè)的主機(jī)系統(tǒng)。
明文透傳數(shù)據(jù)時(shí),單獨(dú)安裝分離加密模塊的網(wǎng)絡(luò)隔離裝置與應(yīng)用本方案的網(wǎng)絡(luò)隔離裝置在數(shù)據(jù)傳輸路徑上相同。密文傳輸模式時(shí),單獨(dú)安裝分離加密模塊的網(wǎng)絡(luò)隔離裝置首先要將數(shù)據(jù)寫入加密模塊進(jìn)行加解密處理,處理完成后返回主機(jī)系統(tǒng),再寫入到擺渡模塊進(jìn)行傳輸。
應(yīng)用本方案的網(wǎng)絡(luò)隔離裝置首先將數(shù)據(jù)寫入擺渡模塊,經(jīng)過加解密處理后,直接進(jìn)行傳輸,省去了數(shù)據(jù)返回主機(jī)及重新寫入擺渡模塊的過程。經(jīng)過測試,兩種方案的明文透傳性能一致,為1.5 Gbps;密文傳輸時(shí),采用本方案的網(wǎng)絡(luò)隔離裝置傳輸速度為1.2 Gbps,采用分離加密模塊的網(wǎng)絡(luò)隔離裝置傳輸速度為800 Mbps。應(yīng)用本設(shè)計(jì)的網(wǎng)絡(luò)隔離裝置在密文傳輸模式時(shí),數(shù)據(jù)傳輸速度有明顯優(yōu)勢,且能節(jié)省硬件資源,提高CPU的資源利用率。
聶云杰、王元強(qiáng)(碩士),朱孟江、趙華(本科):主要研究方向?yàn)殡娏ο到y(tǒng)嵌入式設(shè)計(jì)。