《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 一種基于FPGA的PCI加密卡設(shè)計
一種基于FPGA的PCI加密卡設(shè)計
嚴(yán)迎建,徐金甫,,徐勁松,李 偉
摘要: 利用FPGA設(shè)計實(shí)現(xiàn)了一種基于PCI總線接口的純硬件加密卡,,為PC機(jī)提供加密,、簽名等服務(wù)。對采用VHDL描述的PCI接口IP軟核及其應(yīng)用方法進(jìn)行了分析,;采用VHDL設(shè)計了3DES,、MD5等算法模塊,并設(shè)計了其與PCI接口IP核之間的通信控制模塊,;利用Quartus II進(jìn)行仿真,、綜合后,下載到加密卡上的FPGA配置芯片,,將上述各個模塊集成在一片F(xiàn)PGA上予以實(shí)現(xiàn),;最后,采用VC++為加密卡設(shè)計了驅(qū)動程序和測試程序,,并對整個加密卡工作進(jìn)行了功能測試,。
關(guān)鍵詞: FPGA PCI總線 3DES算法
Abstract:
Key words :

  摘 要: 利用FPGA" title="FPGA">FPGA設(shè)計實(shí)現(xiàn)了一種基于PCI總線" title="PCI總線">PCI總線接口的純硬件加密卡,為PC機(jī)提供加密、簽名等服務(wù),。對采用VHDL描述的PCI接口IP軟核及其應(yīng)用方法進(jìn)行了分析,;采用VHDL設(shè)計了3DES、MD5等算法模塊,,并設(shè)計了其與PCI接口IP核之間的通信控制模塊,;利用Quartus II進(jìn)行仿真、綜合后,,下載到加密卡上的FPGA配置芯片,,將上述各個模塊集成在一片F(xiàn)PGA上予以實(shí)現(xiàn);最后,,采用VC++為加密卡設(shè)計了驅(qū)動程序和測試程序,,并對整個加密卡工作進(jìn)行了功能測試。
  關(guān)鍵詞: PCI總線 3DES算法" title="3DES算法">3DES算法 FPGA


  PCI加密卡是基于加解密芯片和PCI總線卡技術(shù)實(shí)現(xiàn)的安全保密設(shè)備,,為計算機(jī)提供數(shù)據(jù)加密,、數(shù)據(jù)完整性、數(shù)字簽名,、訪問控制等安全功能,,可用于計算機(jī)文件保護(hù)、電子郵件系統(tǒng)安全保密,、辦公自動化安全保密,、數(shù)據(jù)庫保護(hù)、網(wǎng)絡(luò)加密等,。主要用于帶PCI插槽的臺式PC機(jī)和工作站,, 在防火墻、VPN加密機(jī)等方面具有極為廣泛的應(yīng)用前景[1][2],。
  PCI加密卡的數(shù)據(jù)加密分為軟件實(shí)現(xiàn)和硬件實(shí)現(xiàn)兩種方式,,軟件實(shí)現(xiàn)是指在PCI配置嵌入式微處理器或DSP芯片實(shí)現(xiàn)加密算法;硬件實(shí)現(xiàn)是指采用密碼算法芯片實(shí)現(xiàn)加/解密,、簽名算法,,具有處理速度快,安全性好的特點(diǎn),。在上述硬件實(shí)現(xiàn)中,,PCI總線接口可以采用專門的接口芯片,例如PCI9054實(shí)現(xiàn),;也可以采用PCI接口IP核在密碼專用芯片中實(shí)現(xiàn),。本文采用一片Altera的Cyclone 系列FPGA實(shí)現(xiàn)了加解密算法和PCI接口,并為加密卡開發(fā)了WDM驅(qū)動程序,,設(shè)計了一個能為PC機(jī)提供數(shù)據(jù)加密,、數(shù)據(jù)完整性,、訪問控制等安全功能的PCI加密卡。
1 系統(tǒng)硬件架構(gòu)設(shè)計
  整個PCI加密卡硬件以一片F(xiàn)PGA為中心,,配以FPGA配置芯片,、時鐘等模塊構(gòu)成。PCI接口,、3DES,、MD5算法等全部在FPGA內(nèi)部實(shí)現(xiàn)。整個加密卡的硬件結(jié)構(gòu)如圖1所示,,系統(tǒng)主要設(shè)計任務(wù)在FPGA內(nèi)部的邏輯功能完成,,包括:PCI接口模塊、控制模塊,、輸入輸出緩存模塊和數(shù)據(jù)加密模塊,。PCI接口模塊由IP軟核實(shí)現(xiàn),主要功能是控制和實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,;控制模塊主要控制PCI接口與數(shù)據(jù)加密模塊之間的數(shù)據(jù)傳輸,;輸入輸出緩存模塊主要用于寄存由PCI接口模塊輸入后等待處理的數(shù)據(jù),以及系統(tǒng)內(nèi)部運(yùn)算后等待輸出的數(shù)據(jù)結(jié)果,;數(shù)據(jù)加密模塊主要包含硬件實(shí)現(xiàn)后的加密算法,,用于對輸入的數(shù)據(jù)進(jìn)行加解密運(yùn)算,。


  在各個主要模塊中,,密碼運(yùn)算模塊的速度將直接影響到整個加密系統(tǒng)的工作效率。此外,,由于控制模塊的主要功能是控制輸入輸出緩存中的數(shù)據(jù)依次進(jìn)入加密模塊,,同時,,根據(jù)加密模塊反饋的狀態(tài)信息發(fā)出相應(yīng)的控制信息,所以,,控制模塊的設(shè)計在整個加密設(shè)備的設(shè)計實(shí)現(xiàn)中十分重要,。
2 PCI接口IP核及其應(yīng)用方法
  PCI總線接口有兩種設(shè)計方案,一是采用專門的PCI接口芯片(例如PCI9054或PCI9052)實(shí)現(xiàn),,二是采用PCI接口IP核在密碼專用芯片中實(shí)現(xiàn)[3],。本加密卡采用第二種方案,,由VHDL描述的軟核下載到FPGA中實(shí)現(xiàn),。該P(yáng)CI接口IP核符合標(biāo)準(zhǔn)的PCI2.2協(xié)議,支持I/O操作,、配置讀,、寫操作、總線BUS_MASTER讀,、BUS_MASTER寫以及DMA中斷方式和DMA數(shù)據(jù)傳輸方式,。該IP核設(shè)計主要采用有限狀態(tài)機(jī)實(shí)現(xiàn),包括中斷應(yīng)答、突發(fā)讀操作,、突發(fā)寫操作,、配置讀操作、配置寫操作,、I/O讀寫傳輸,、存儲器讀寫傳輸7個狀態(tài)機(jī)組成。其工作流程如圖2所示,。收到幀開始信號(#FRAM信號為低)后,,根據(jù)PCI總線C/BE[3..0]上的命令,分別進(jìn)入7個狀態(tài)機(jī)中的一個,。操作結(jié)束后,,主機(jī)發(fā)出幀結(jié)束信號(#FRAM為信號低),進(jìn)入等待狀態(tài),,進(jìn)入下個操作,。


  利用該P(yáng)CI接口IP核完成加密卡設(shè)計,必須先確定數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)方式,。該P(yáng)CI接口IP核支持兩個256K字節(jié)的I/O空間,;支持一個4M字節(jié)的PCI內(nèi)存空間。在PCI的數(shù)據(jù)傳輸中,,主要依靠I/O讀,、I/O寫、存儲器讀,、存儲器寫等操作完成數(shù)據(jù)傳輸,。I/O讀、寫命令用來從一個映射到I/O地址空間的設(shè)備中讀,、寫數(shù)據(jù),。存儲器讀、寫命令用來從一個映射到存儲器地址空間的設(shè)備讀,、寫數(shù)據(jù),。在加密卡初期設(shè)計中,數(shù)據(jù)都被映射到I/O地址空間進(jìn)行操作,。系統(tǒng)工作的基本過程如下:數(shù)據(jù)從PC機(jī)進(jìn)入PCI接口模塊,,先存入PCI接口模塊中指定的I/O存儲單元中;在控制模塊的控制下,,依次進(jìn)入密碼算法模塊,,數(shù)據(jù)經(jīng)過處理后輸出到輸出緩存之中,由驅(qū)動程序?qū)⑦\(yùn)算結(jié)果傳輸給應(yīng)用程序,。
  確定了數(shù)據(jù)傳輸方式后,,下一步的工作是完成加密算法模塊設(shè)計,,并設(shè)計適當(dāng)?shù)慕涌诳刂颇K,按照事先確定的數(shù)據(jù)傳輸方式將其連接到PCI接口模塊,。
3 密碼算法模塊設(shè)計
  密碼算法模塊是整個加密卡設(shè)計的核心,,其設(shè)計的優(yōu)劣直接關(guān)系到加密卡的性能和安全性。下面以3DES算法為例,,介紹密碼算法模塊的設(shè)計方法,。
3.1 3DES算法模塊設(shè)計
  本設(shè)計采用兩個密鑰的3DES,該加密方案使用兩個不同的密鑰Key1和Key2對明文進(jìn)行三次DES或DES-1變換,,加密函數(shù)采用加密-脫密-加密序列:
  
  兩個密鑰的三重DES的有效密鑰長度是112位,。在本設(shè)計中采用了密碼分組鏈接方式(CBC)。在這種方案中,,加密算法的輸入是當(dāng)前的明文分組和前邊的密文分組的異或,,對每個分組使用相同的密鑰。從效果上看,,將明文分組序列的處理連接起來了,。每個明文分組的加密函數(shù)的輸入與明文分組之間不再有固定的關(guān)系,因此,,64bit的重復(fù)模式不再會暴露,。
  3DES密碼硬件模塊為控制模塊和數(shù)據(jù)路徑設(shè)計兩部分??刂颇K產(chǎn)生數(shù)據(jù)通路需要的控制信號序列,,保證數(shù)據(jù)處理單元正確有序地工作。數(shù)據(jù)路徑用來實(shí)現(xiàn)信息傳送和密碼變換的數(shù)據(jù)處理單元,。3DES算法設(shè)計采用迭代結(jié)構(gòu),,由初始置換電路IP、多路選擇電路L_MUX和R_MUX,、32-bit L鎖存器,、32-bit R鎖存器、擴(kuò)展置換E處理電路,、S盒數(shù)據(jù)代替電路,、P盒置換電路及末置換IP-1電路構(gòu)成。其運(yùn)算電路如圖3所示,。


3.2 3DES輸入輸出模塊設(shè)計
  輸入輸出模塊主要為密碼運(yùn)算模塊提供密鑰,、數(shù)據(jù)以及命令信息的模塊??刂菩盘栔饕ǎ翰僮鲿r鐘CLK,、系統(tǒng)初始化INIT,、寫使能WEN,、讀使能REN,、運(yùn)算完畢READY、DIN[31:0],、數(shù)據(jù)輸入,、數(shù)據(jù)輸出DOUT[31:0]、端口選擇A[2:0],。當(dāng)INIT=1時,,將3DES模塊內(nèi)部所有寄存器復(fù)位并清零;當(dāng)A[2:0]=010,, WEN=1時,,在CLK時鐘上升沿,將命令字由32位數(shù)據(jù)總線寫入芯片內(nèi)部命令寄存器,;當(dāng)A[2:0]=001,,WEN=1時,在CLK時鐘上升沿,,將128位的密鑰分四次由32-bit數(shù)據(jù)總線寫入芯片內(nèi)部密鑰寄存器,;當(dāng)A[2:0]=000,WEN=1時,,在CLK時鐘上升沿將64位的數(shù)據(jù)分兩次由32位數(shù)據(jù)總線寫入芯片內(nèi)部輸入數(shù)據(jù)寄存器,;每寫夠2個長字,3DES模塊開始運(yùn)算,,運(yùn)算完畢后,,READY變?yōu)楦唠娖剑敵鰯?shù)據(jù)分為兩組分別送入temporary_l和temporary_2兩個寄存器,。3DES Quartus仿真波形如圖4所示,。


4 密碼服務(wù)的PCI傳輸控制
  完成了密碼算法模塊后,還要設(shè)計一個接口控制模塊,,將其連接到PCI接口模塊,,以實(shí)現(xiàn)密碼模塊與PCI主機(jī)的通信連接。下面以3DES密碼模塊為例,,介紹面向PCI傳輸?shù)拿艽a算法接口控制模塊的設(shè)計,。圖5為該模塊的設(shè)計框圖,在PC機(jī)與加密卡的通信過程中,,驅(qū)動程序先將數(shù)據(jù)按32bit分組送入PCI中指定的IO存儲器地址中,。一次加密服務(wù)流程如下:數(shù)據(jù)首先進(jìn)入輸入緩存模塊,分別將3DES密鑰Key1,、Key2送入I/O地址70h,,74h,78h,,7ch,;數(shù)據(jù)送入80h,,84h;命令送入88h,。待數(shù)據(jù)傳輸完畢,,由驅(qū)動程序向密碼算法模塊發(fā)送啟動信號,在計數(shù)器模塊的控制下,,命令,、IV向量、密鑰,、數(shù)據(jù)由緩存模塊依次進(jìn)入密碼運(yùn)算模塊,;密碼運(yùn)算完畢后向PCI模塊發(fā)送ready信號,并把數(shù)據(jù)處理結(jié)果放入輸出緩存地址9ch和a0h中,,驅(qū)動程序在檢測的ready信號為高時從輸出緩存地址取走數(shù)據(jù),。


5 加密卡驅(qū)動程序設(shè)計及系統(tǒng)測試
  PCI加密卡為主機(jī)提供加/解密服務(wù),并為應(yīng)用軟件提供相應(yīng)的軟件接口,,主要包括用Visual C++開發(fā)的WDM驅(qū)動程序和應(yīng)用程序編程接口函數(shù)庫兩個部分[4],。在Windows2000系統(tǒng)中可以使用多種驅(qū)動程序,如虛擬設(shè)備驅(qū)動程序(VDD)和內(nèi)核模式驅(qū)動程序,。其中,,WDM驅(qū)動程序是一種PnP驅(qū)動程序,它遵循Windows2000即插即用協(xié)議的內(nèi)核模式驅(qū)動程序,,同時還遵循電源管理協(xié)議,,并能在Windows98、Windows2000和Windows XP間實(shí)現(xiàn)源代碼級兼容,。
  應(yīng)用程序與WDM通信時,,應(yīng)用程序先調(diào)用CreateFile函數(shù)打開設(shè)備,然后調(diào)用DeviceIoControl與WDM進(jìn)行數(shù)據(jù)通信,,最后用CloseHandle關(guān)閉設(shè)備,。主機(jī)應(yīng)用程序用Visual C++開發(fā)生成,主要包括系統(tǒng)的用戶界面設(shè)計,、用于輸入用戶數(shù)據(jù),、顯示運(yùn)算后的結(jié)果數(shù)據(jù)、調(diào)用驅(qū)動程序?qū)崿F(xiàn)某種功能,。驅(qū)動程序與應(yīng)用程序之間的通信分為同步方式和異步方式,。若采用同步方式,則應(yīng)用程序調(diào)用DeviceIoControl函數(shù)時將被阻塞,,等待PCI設(shè)備進(jìn)行數(shù)據(jù)處理,,完成相應(yīng)操作,直到驅(qū)動程序給應(yīng)用程序返回值后,應(yīng)用程序才會接著運(yùn)行,。若采用異步方式,,則應(yīng)用程序調(diào)用DeviceIoControl函數(shù)將立刻返回,不等待驅(qū)動程序?qū)?shù)據(jù)的操作,。這樣,如果在應(yīng)用程序退出之前,,驅(qū)動程序還沒完成I/O操作,,就需要編寫超時取消I/O操作的代碼,確保在應(yīng)用程序退出之后正常關(guān)閉設(shè)備,。異步方式相對比較復(fù)雜,,考慮到設(shè)計中算法對時序要求高,所以本設(shè)計選擇同步方式實(shí)現(xiàn)計算機(jī)與PCI設(shè)備之間的通信,。
  3DES加密算法和驅(qū)動程序全部完成后,,為了對整個加密卡的功能進(jìn)行驗證,開發(fā)了一個文件加密服務(wù)程序?qū)用芸ㄟM(jìn)行測試,。測試過程如下:
  第一步,,系統(tǒng)安裝及初始化。首先將加密卡插入到PCI插槽中,,將硬件設(shè)計下載到FPGA配置芯片后,,重新上電,裝載驅(qū)動程序,,最后,,啟動應(yīng)用程序開始整個加密卡的測試工作。
  第二步,,加密功能測試,。輸入3DES的兩個加密初始密鑰Key1、Key2,,選擇一個事先編輯的文本文件Plain.txt為待加密的明文數(shù)據(jù),。模式選擇為加密的情況下,所得密文數(shù)據(jù)輸出到Cipher.txt文件中,。
  第三步,,解密功能測試。為了便于比較,,仍然選用Key1,、Key2為3DES的兩個解密初始密鑰。導(dǎo)入Cipher.txt作為待解密的密文數(shù)據(jù),,在模式選擇為解密的情況下,,所得明文數(shù)據(jù)導(dǎo)出在Plain1.txt文件中。經(jīng)過比較,,Plain.txt和Plain1.txt完全一致,。
  上述測試結(jié)果表明,,加密卡驅(qū)動程序、PCI接口IP核能夠正確將應(yīng)用程序提供的數(shù)據(jù)傳輸給密碼算法模塊,,密碼算法模塊正確完成加解密操作后,,數(shù)據(jù)能正確通過PCI接口IP核、驅(qū)動程序傳輸?shù)綉?yīng)用程序,,即加密卡設(shè)計實(shí)現(xiàn)了預(yù)定的功能,。下一步還要對系統(tǒng)的性能進(jìn)行測試,優(yōu)化系統(tǒng)結(jié)構(gòu)提高系統(tǒng)的性能,。
  本文討論一個基于FPGA實(shí)現(xiàn)的PCI加密卡的設(shè)計與實(shí)現(xiàn)過程,,以3DES算法為例重點(diǎn)討論了密碼算法及其與PCI接口模塊之間的數(shù)據(jù)傳輸實(shí)現(xiàn)方法,對包括驅(qū)動程序在內(nèi)的加密卡進(jìn)行了功能測試,。作為一個功能完善的加密卡,,要為PC機(jī)提供數(shù)據(jù)加密、數(shù)據(jù)完整性,、訪問控制等服務(wù),,除了提供3DES加密算法以外,還需要支持AES等加密強(qiáng)度更高的對稱密碼算法,、非對稱算法,、散列算法、簽名驗證算法等,,這也是下一步要做的主(接上頁)
要工作,。
參考文獻(xiàn)

[1] 成都天融信網(wǎng)絡(luò)安全技術(shù)有限公司.PCI加密卡[EB/OL].http://www.westsec.com.cn,2006.
[2] 劉建中,李清寶.基子PCI總線加密卡硬件設(shè)計.電子技術(shù)應(yīng)用[J],,2004,,30(1):7-9.
[3] 劉紅,李勃,,常青,,等.基于IP核的PCI總線接口設(shè)計與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2006,,32(6):6-9.
[4] 杜欣,,馬秦生.PCI傳輸卡的WDM驅(qū)動程序設(shè)計[J].電子技術(shù)應(yīng)用,2003,,29(12):22-24.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。