基于PCI總線(xiàn)加密卡硬件設計
4 密碼服務(wù)的PCI傳輸控制
完成了密碼算法模塊后,還要設計一個(gè)接口控制模塊,將其連接到PCI接口模塊,以實(shí)現密碼模塊與PCI主機的通信連接。下面以3DES密碼模塊為例,介紹面向PCI傳輸的密碼算法接口控制模塊的設計。圖5為該模塊的設計框圖,在PC機與加密卡的通信過(guò)程中,驅動(dòng)程序先將數據按32bit分組送入PCI中指定的IO存儲器地址中。一次加密服務(wù)流程如下:數據首先進(jìn)入輸入緩存模塊,分別將3DES密鑰Key1、Key2送入I/O地址70h,74h,78h,7ch;數據送入80h,84h;命令送入88h。待數據傳輸完畢,由驅動(dòng)程序向密碼算法模塊發(fā)送啟動(dòng)信號,在計數器模塊的控制下,命令、IV向量、密鑰、數據由緩存模塊依次進(jìn)入密碼運算模塊;密碼運算完畢后向PCI模塊發(fā)送ready信號,并把數據處理結果放入輸出緩存地址9ch和a0h中,驅動(dòng)程序在檢測的ready信號為高時(shí)從輸出緩存地址取走數據。
5 加密卡驅動(dòng)程序設計及系統測試
PCI加密卡為主機提供加/解密服務(wù),并為應用軟件提供相應的軟件接口,主要包括用Visual C++開(kāi)發(fā)的WDM驅動(dòng)程序和應用程序編程接口函數庫兩個(gè)部分[4]。在Windows2000系統中可以使用多種驅動(dòng)程序,如虛擬設備驅動(dòng)程序(VDD)和內核模式驅動(dòng)程序。其中,WDM驅動(dòng)程序是一種PnP驅動(dòng)程序,它遵循Windows2000即插即用協(xié)議的內核模式驅動(dòng)程序,同時(shí)還遵循電源管理協(xié)議,并能在Windows98、Windows2000和Windows XP間實(shí)現源代碼級兼容。
應用程序與WDM通信時(shí),應用程序先調用CreateFile函數打開(kāi)設備,然后調用DeviceIoControl與WDM進(jìn)行數據通信,最后用CloseHandle關(guān)閉設備。主機應用程序用Visual C++開(kāi)發(fā)生成,主要包括系統的用戶(hù)界面設計、用于輸入用戶(hù)數據、顯示運算后的結果數據、調用驅動(dòng)程序實(shí)現某種功能。驅動(dòng)程序與應用程序之間的通信分為同步方式和異步方式。若采用同步方式,則應用程序調用DeviceIoControl函數時(shí)將被阻塞,等待PCI設備進(jìn)行數據處理,完成相應操作,直到驅動(dòng)程序給應用程序返回值后,應用程序才會(huì )接著(zhù)運行。若采用異步方式,則應用程序調用DeviceIoControl函數將立刻返回,不等待驅動(dòng)程序對數據的操作。這樣,如果在應用程序退出之前,驅動(dòng)程序還沒(méi)完成I/O操作,就需要編寫(xiě)超時(shí)取消I/O操作的代碼,確保在應用程序退出之后正常關(guān)閉設備。異步方式相對比較復雜,考慮到設計中算法對時(shí)序要求高,所以本設計選擇同步方式實(shí)現計算機與PCI設備之間的通信。
3DES加密算法和驅動(dòng)程序全部完成后,為了對整個(gè)加密卡的功能進(jìn)行驗證,開(kāi)發(fā)了一個(gè)文件加密服務(wù)程序對加密卡進(jìn)行測試。測試過(guò)程如下:
第一步,系統安裝及初始化。首先將加密卡插入到PCI插槽中,將硬件設計下載到FPGA配置芯片后,重新上電,裝載驅動(dòng)程序,最后,啟動(dòng)應用程序開(kāi)始整個(gè)加密卡的測試工作。
第二步,加密功能測試。輸入3DES的兩個(gè)加密初始密鑰Key1、Key2,選擇一個(gè)事先編輯的文本文件Plain.txt為待加密的明文數據。模式選擇為加密的情況下,所得密文數據輸出到Cipher.txt文件中。
第三步,解密功能測試。為了便于比較,仍然選用Key1、Key2為3DES的兩個(gè)解密初始密鑰。導入Cipher.txt作為待解密的密文數據,在模式選擇為解密的情況下,所得明文數據導出在Plain1.txt文件中。經(jīng)過(guò)比較,Plain.txt和Plain1.txt完全一致。
上述測試結果表明,加密卡驅動(dòng)程序、PCI接口IP核能夠正確將應用程序提供的數據傳輸給密碼算法模塊,密碼算法模塊正確完成加解密操作后,數據能正確通過(guò)PCI接口IP核、驅動(dòng)程序傳輸到應用程序,即加密卡設計實(shí)現了預定的功能。下一步還要對系統的性能進(jìn)行測試,優(yōu)化系統結構提高系統的性能。
本文討論一個(gè)基于FPGA實(shí)現的PCI加密卡的設計與實(shí)現過(guò)程,以3DES算法為例重點(diǎn)討論了密碼算法及其與PCI接口模塊之間的數據傳輸實(shí)現方法,對包括驅動(dòng)程序在內的加密卡進(jìn)行了功能測試。作為一個(gè)功能完善的加密卡,要為PC機提供數據加密、數據完整性、訪(fǎng)問(wèn)控制等服務(wù),除了提供3DES加密算法以外,還需要支持AES等加密強度更高的對稱(chēng)密碼算法、非對稱(chēng)算法、散列算法、簽名驗證算法等,這也是下一步要做的主(接上頁(yè))
要工作。
參考文獻
[1] 成都天融信網(wǎng)絡(luò )安全技術(shù)有限公司.PCI加密卡[EB/OL].http://www.westsec.com.cn,2006.
[2] 劉建中,李清寶.基子PCI總線(xiàn)加密卡硬件設計.電子技術(shù)應用[J],2004,30(1):7-9.
[3] 劉紅,李勃,常青,等.基于IP核的PCI總線(xiàn)接口設計與實(shí)現[J].電子技術(shù)應用,2006,32(6):6-9.
[4] 杜欣,馬秦生.PCI傳輸卡的WDM驅動(dòng)程序設計[J].電子技術(shù)應用,2003,29(12):22-24.
評論