摘 要: 利用USB接口技術,結合PC機的結構特點,為基于PC平臺的數據加密系統提出了一種使用USB連接的解決方案。并指出了該方案現存的一些缺陷及改進方法,以備今后系統的升級。
關鍵詞: USB 數據加密
在目前的計算機環境中,利用一些運行在計算機內部的加密協議進行數據傳輸是較安全的。但是一旦微機連接到Internet上,在系統安全環節上就會形成一個脆弱的鏈接。在網絡上傳輸未加密的信息,極有可能讓黑客獲得如用戶密碼和帳號這樣的敏感信息。現有的軟件加密方法遠遠不能滿足目前的需要。加密專用硬件設備是目前國際上首選的替代軟件加密的產品。使用加密硬件,就必須考慮計算機接口的問題。計算機的接口有許多種,如傳統的串口和并口。串口的數據傳輸率在115K~230Kbps,一般用來連接鼠標和外置Modem。并口的數據傳輸率比串口快8倍,標準并口的數據傳輸率約為1Mbps,一般用來連接打印機、掃描儀等。早期的軟件狗類加密硬件基本上都使用并口,不但極易與打印機沖突,而且容易被破解。要想設計出更可靠更完善的加密硬件,必須采用新的計算機接口。
由于USB的諸多優點,市場上已經出現了很多USB的加密產品,如帶加密功能的USB閃存、USB加密卡等。但這些產品多是簡單的使用軟件進行加密,而沒有結合FPGA技術形成完整的數據加密系統。為此,我們選擇了開發USB接口加密系統。本文將詳細闡述USB在數據加密系統中的應用。
1 系統的總體設計方案
整體硬件結構如圖1所示。下面概要介紹本系統的三大部分。
1.1 USB接口子系統設計
對于實現較復雜的加密方法,外置的MPU處理起來更方便,故本系統的USB接口電路采用微處理器加USB專用接口芯片來實現。USB專用接口芯片是美國國家半導體公司提供的樣片USBN9603。微處理芯片采用飛利浦公司的可基于系統編程的單片機P89C51RD2,它負責控制USBN9603芯片的狀態和讀寫USB節點的數據,以及負責控制外部存儲器及其他功能設備。P89C51有3個加密位,用來保護固化的單片機軟件不可讀,從而保證系統不被仿制。本系統還使用了ATMEL公司的24C64作為存儲芯片。24C64芯片包含有8KB可讀寫的Flash存儲器,在掉電時可以保存軟件開發商設置的初始口令以及用于存放關鍵數據及配置參數等信息,可以用于從硬件上對抗共享器共享,可以更加安全穩定地實現軟件試用期和使用次數控制等功能。
1.2 軟件子系統設計
根據USB系統的組成,可以將軟件分成二大部分:主機端軟件和設備端軟件。主機端軟件由設備驅動程序和應用程序組成。開發設備驅動程序有專門的開發工具包,在編寫軟件驅動程序時用到的主要工具有Windows98 DDK、DriverWorks和VC++6.0。Windows一般提供鼠標、鍵盤等HID設備完整的主機端驅動程序,但對于大部分用戶自己設計的硬件設備,需要在通用的底層驅動程序的基礎上開發相應的客戶驅動程序。USB主機端軟件開發的主要任務就是調用USB驅動程序接口、編寫設備驅動程序和用戶接口的應用程序軟件,并在軟件中加入反破解措施。
在各種反破解措施中,跟蹤分析方法的威力最為強大,具體的跟蹤分析方法有靜態分析和動態跟蹤破解法等。
(1)靜態分析方法。用反編譯工具軟件對受保護軟件進行逆向分析,以求找出訪問外部加密硬件的代碼并進行相應的修改。本文介紹的USB加密系統中采用了API函數調用與SHELL外殼加密相結合的技術,可以有效地對抗靜態分析方法。即使使用脫殼工具軟件后,外殼被破壞,內部的加密函數的調用仍然能保證保護的有效性。
(2)動態跟蹤破解法。要求使用者具有豐富的破解經驗。它使用調試分析工具軟件,跟蹤控制受保護軟件的整個運行過程,找出它與加密接口間交互部分的判斷代碼并進行修改,使其跳過對加密硬件的檢測或使檢測結果無效。對付這種破解方法,本方案使用了數據交換隨機噪聲技術和迷宮技術,即在程序入口和出口之間包含大量無效判斷跳轉進行干擾,動態改變執行次序,提升抗跟蹤能力。另外,USB加密系統內部設有時間閘,各種操作必須在規定的時間內完成。正常操作用時很短,而跟蹤過程用時較長,超過規定時間將返回錯誤結果。
1.3 加密子系統設計
加密子系統的設計采用單片機加FPGA(Field Programmable Gate Array)模式,既可方便地用單片機完成對USB口的操作,又能利用FPGA速度快和保密性強等特點實現復雜的加密算法。
在加密系統的設計與實現中,主要是根據芯片的容量大小,選擇一種合適的加解密算法,將其在FPGA芯片中實現,同時處理好與單片機的外部接口問題。根據FPGA的特性,在以后的使用中可以隨著加密算法的進一步發展,采用動態可重構技術,將新的加密算法重新配置在硬件中,實現新的加密技術,故此加密裝置有很高的靈活性。本系統開發的EDA工具軟件采用XILINX公司的XILINX軟件包FOUNDATION4.1集成環境,硬件采用XILINX公司的SPARTAN系列FPGA芯片。
2 USB接口電路的開發
2.1 USB接口電路
電路設計采用模塊化的設計方法。本系統在電路一級有3個模塊:USB接口模塊、I2C總線模塊和加密模塊。這樣不但可以提高開發效率,而且非常有利于系統的擴展和升級。本文重點介紹了3個模塊的設計方法及電路的連接。在系統中,使用ATMEL的24C64作為存儲芯片,采用P89C51RD2單片機的P1口模擬I2C總線來實現MCU與24C64的連接。系統USB接口平臺的硬件電路設計框圖如圖2所示。
2.2 P89C51單片機與USBN9603的硬件連接設計
對USBN9603芯片的控制是通過向它的寄存器讀寫數據來實現的。它的每個寄存器都有相應的地址映射,其地址范圍從0x00~0x3F,對應58個寄存器(有6個地址保留)。USBN9603芯片相對于P89C51單片機來說更像是一片外部存儲器,當USBN9603被片選后,讀寫某個寄存器的地址,就可以被訪問。P89C51單片機的P0口可以作為一個地址/數據復用的總線口,而USBN9603芯片的總線連接方式是可設定的。USBN9603的并行連接有2種工作模式:復用模式與非復用模式。本接口電路中只用到復用模式與P89C51單片機進行接口。在這種模式下,MODE0接高電平,MODE1接低電平。MPU可以直接訪問寄存器DATAIN、DATAOUT和ADDR。圖3是USBN9603復用模式讀寫時序圖。根據圖3就可以將USBN9603的8位地址/數據總線直接與P89C51單片機的P0口相連及各自的“讀寫”引腳分別相連。如圖4所示。
在標準訪問模方式下,USBN9603的序列是首先將地址寫入ADDRESS寄存器,然后再讀取DATAOUT的數據或者寫入DATAIN數據。
3 設備驅動程序的編制
驅動程序的基本功能就是建立應用程序與USB接口之間的數據通信。Windows 98和Windows 2000操作系統為USB總線提供了全面的支持,并且用WDM(Windows Device Mode)設備驅動程序模型代替了VxD設備驅動程序。WDM模型主要采用分層的方法,模仿面向對象的技術。先進行邏輯上的“分層”,然后將標準的實現和低層細節“封裝”起來,形成“基類”。客戶程序通過“繼承”的方式來擴展“基類”的功能,完成所需要的實現。WDM支持USBl.l協議,并為用戶開發自己的用戶驅動程序提供USB驅動程序接口USBDI。USB用戶驅動程序通過USBDI訪問USB設備類驅動程序。USB外設不占用端口或中斷等硬件資源,所有低層I/O都由USB設備類驅動程序處理。客戶驅動程序只關心數據傳輸類型、傳輸時序、傳輸管道以及如何處理數據等主要操作。USBDI就是為實現這一點而設計的軟件接口。
如圖5所示,Windows對構成一個USB主機的不同軟件部分進行了十分清楚的劃分。其中USB客戶軟件僅僅包含了用來控制不同USB外設的設備驅動程序。USB設備驅動程序會通過Windows所定義的一個軟件接口來同根集線器驅動程序進行通信。而USB根集線器驅動程序則要通過USBDI來實現同通用串行總線驅動程序(USBD)的通信。然后,USBD會選擇2種主控制器驅動程序之一來同其下方的主控制器進行通信。最后,主控制器驅動程序會直接實現對USB物理總線的訪問。
在圖5中,主控制器驅動程序處于USBD的下方,而根集線器卻位于USBD上方。在一個支持USB系統的主機中,都會有一個根集線器來提供2個USB端口。一個USB系統中的所有USB設備,包括USB功能設備和USB集線器都必須以直接接入或星型接入方式接入一個USB根集線器。在Windows環境中,所有的客戶驅動程序都可以通過指向一個根集線器驅動程序的接口來和所有接入的USB設備進行通信。另外一種方法就是通過USBDI而直接同USBD進行交互。
4 測 試
下面以前文介紹的整個USB接口平臺為基礎,給出USB加密系統原型版在Windows98操作系統中的測試。
測試分2步進行,首先對USB接口平臺單獨測試,然后對整體測試。
測試的主機平臺為方正“文祥600”計算機,操作系統的版本為Windows98第二版。首先確保硬件設備連接到PC的USB接口上,并且操作系統為Windows98,按照提示正確安裝驅動程序。當本設備接口連入PC機后,操作系統的系統USB總線驅動程序立刻檢測到有新的USB設備加入。在與USB設備的0節點進行通信獲得設備的基本信息后,操作系統將彈出窗口要求安裝驅動程序。在驅動程序正確安裝完成以后,在計算機的“系統屬性”中就可以看到結果,此時表示USB加密系統已經被正確安裝。下面用DriverStudio自動生成的DOS界面的應用程序進行測試。
當應用程序找到設備后,就可以執行讀、寫2種操作。首先執行寫功能:寫入6個字符,應用程序提示寫入設備成功;然后執行讀功能:將寫功能寫入的6個字符讀出,應用程序提示從設備讀出了6個字符,并且讀出的字符與寫入的一致,這說明了USB接口部分讀、寫功能正常。
接下來是對系統進行總體測試。打開以DOS應用程序為基礎重新編制的Windows應用程序,程序界面如圖6所示。左邊設備信息報告欄第1行顯示的“查找設備成功”,表示設備可以正常使用了。在“寫數據”窗口中,可以寫下任何文本內容,在測試中我們寫下了“加密技術——讓世界更安全!”的字樣。然后點“寫入設備”按鈕,數據就被寫到USB加密板中,左側信息窗口出現對映的信息;再點擊“讀取數據”按鈕,在“讀數據”窗口中,顯示了由USB加密系統返回的密文,同樣左側信息窗口也出現對映的信息,這樣就完成了加密過程。
對信息進行解密的操作過程與加密的過程相同。首先將密文復制到寫數據窗口中,點擊“寫入設備”按鈕,再點擊“讀取數據”按鈕,就可以看到明文“加密技術——讓世界更安全!”出現在讀數據窗口中(圖略)。
以上過程證明了整個系統工作正常,可以完成向設備寫入明文數據,USB設備接收到數據后再傳遞給加密接口進行加密,形成密文,再傳送到USB設備,然后把數據讀取出來。解密功能也正常,解密后的明文與原始明文一致。
USB是一種全新的通用串行總線接口,是非常復雜的系統,但了解這樣一個系統,有助于了解當今接口體系結構的設計思想,對于理解其他的接口體系結構很有好處。
參考文獻
1 Compaq,Hewlett-Packard,Intel et al.Universal Bus Specification Revision 2.0.2000
2 Axelson J著,陳逸譯.USB大全.北京:中國電力出版社,2001
3 張念淮,江浩.USB總線接口開發指南.北京:國防工業出版社,2001
4 Anderson D著,精英科技譯.USB系統體系.北京:中國電力出版社,2001
5 Cant C著,孫義譯.Windows WDM設備驅動程序開發指南.北京:機械工業出版社,2001
6 武安河,周利莉.Windows設備驅動程序(VxD和WDM)開發實務.北京:電子工業出版社,2001