《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 通過USBN9603/P89C51平臺實(shí)現(xiàn)USB接口硬件加密
通過USBN9603/P89C51平臺實(shí)現(xiàn)USB接口硬件加密
畢進(jìn)軍 于志平 李 倫
摘要: 利用USB接口技術(shù),結(jié)合PC機(jī)的結(jié)構(gòu)特點(diǎn),為基于PC平臺的數(shù)據(jù)加密系統(tǒng)提出了一種使用USB連接的解決方案。并指出了該方案現(xiàn)存的一些缺陷及改進(jìn)方法,以備今后系統(tǒng)的升級。
關(guān)鍵詞: PowerPC USB 數(shù)據(jù)加密
Abstract:
Key words :

  摘  要: 利用USB接口技術(shù),結(jié)合PC機(jī)的結(jié)構(gòu)特點(diǎn),為基于PC平臺的數(shù)據(jù)加密系統(tǒng)提出了一種使用USB連接的解決方案。并指出了該方案現(xiàn)存的一些缺陷及改進(jìn)方法,以備今后系統(tǒng)的升級。

  關(guān)鍵詞: USB  數(shù)據(jù)加密

 

  在目前的計(jì)算機(jī)環(huán)境中,利用一些運(yùn)行在計(jì)算機(jī)內(nèi)部的加密協(xié)議進(jìn)行數(shù)據(jù)傳輸是較安全的。但是一旦微機(jī)連接到Internet上,在系統(tǒng)安全環(huán)節(jié)上就會(huì)形成一個(gè)脆弱的鏈接。在網(wǎng)絡(luò)上傳輸未加密的信息,極有可能讓黑客獲得如用戶密碼和帳號這樣的敏感信息。現(xiàn)有的軟件加密方法遠(yuǎn)遠(yuǎn)不能滿足目前的需要。加密專用硬件設(shè)備是目前國際上首選的替代軟件加密的產(chǎn)品。使用加密硬件,就必須考慮計(jì)算機(jī)接口的問題。計(jì)算機(jī)的接口有許多種,如傳統(tǒng)的串口和并口。串口的數(shù)據(jù)傳輸率在115K~230Kbps,一般用來連接鼠標(biāo)和外置Modem。并口的數(shù)據(jù)傳輸率比串口快8倍,標(biāo)準(zhǔn)并口的數(shù)據(jù)傳輸率約為1Mbps,一般用來連接打印機(jī)、掃描儀等。早期的軟件狗類加密硬件基本上都使用并口,不但極易與打印機(jī)沖突,而且容易被破解。要想設(shè)計(jì)出更可靠更完善的加密硬件,必須采用新的計(jì)算機(jī)接口。

  由于USB的諸多優(yōu)點(diǎn),市場上已經(jīng)出現(xiàn)了很多USB的加密產(chǎn)品,如帶加密功能的USB閃存、USB加密卡等。但這些產(chǎn)品多是簡單的使用軟件進(jìn)行加密,而沒有結(jié)合FPGA技術(shù)形成完整的數(shù)據(jù)加密系統(tǒng)。為此,我們選擇了開發(fā)USB接口加密系統(tǒng)。本文將詳細(xì)闡述USB在數(shù)據(jù)加密系統(tǒng)中的應(yīng)用。

1 系統(tǒng)的總體設(shè)計(jì)方案

  整體硬件結(jié)構(gòu)如圖1所示。下面概要介紹本系統(tǒng)的三大部分。

 

1.1 USB接口子系統(tǒng)設(shè)計(jì)

  對于實(shí)現(xiàn)較復(fù)雜的加密方法,外置的MPU處理起來更方便,故本系統(tǒng)的USB接口電路采用微處理器加USB專用接口芯片來實(shí)現(xiàn)。USB專用接口芯片是美國國家半導(dǎo)體公司提供的樣片USBN9603。微處理芯片采用飛利浦公司的可基于系統(tǒng)編程的單片機(jī)P89C51RD2,它負(fù)責(zé)控制USBN9603芯片的狀態(tài)和讀寫USB節(jié)點(diǎn)的數(shù)據(jù),以及負(fù)責(zé)控制外部存儲器及其他功能設(shè)備。P89C51有3個(gè)加密位,用來保護(hù)固化的單片機(jī)軟件不可讀,從而保證系統(tǒng)不被仿制。本系統(tǒng)還使用了ATMEL公司的24C64作為存儲芯片。24C64芯片包含有8KB可讀寫的Flash存儲器,在掉電時(shí)可以保存軟件開發(fā)商設(shè)置的初始口令以及用于存放關(guān)鍵數(shù)據(jù)及配置參數(shù)等信息,可以用于從硬件上對抗共享器共享,可以更加安全穩(wěn)定地實(shí)現(xiàn)軟件試用期和使用次數(shù)控制等功能。

1.2 軟件子系統(tǒng)設(shè)計(jì)

  根據(jù)USB系統(tǒng)的組成,可以將軟件分成二大部分:主機(jī)端軟件和設(shè)備端軟件。主機(jī)端軟件由設(shè)備驅(qū)動(dòng)程序和應(yīng)用程序組成。開發(fā)設(shè)備驅(qū)動(dòng)程序有專門的開發(fā)工具包,在編寫軟件驅(qū)動(dòng)程序時(shí)用到的主要工具有Windows98 DDK、DriverWorks和VC++6.0。Windows一般提供鼠標(biāo)、鍵盤等HID設(shè)備完整的主機(jī)端驅(qū)動(dòng)程序,但對于大部分用戶自己設(shè)計(jì)的硬件設(shè)備,需要在通用的底層驅(qū)動(dòng)程序的基礎(chǔ)上開發(fā)相應(yīng)的客戶驅(qū)動(dòng)程序。USB主機(jī)端軟件開發(fā)的主要任務(wù)就是調(diào)用USB驅(qū)動(dòng)程序接口、編寫設(shè)備驅(qū)動(dòng)程序和用戶接口的應(yīng)用程序軟件,并在軟件中加入反破解措施。

  在各種反破解措施中,跟蹤分析方法的威力最為強(qiáng)大,具體的跟蹤分析方法有靜態(tài)分析和動(dòng)態(tài)跟蹤破解法等。

  (1)靜態(tài)分析方法。用反編譯工具軟件對受保護(hù)軟件進(jìn)行逆向分析,以求找出訪問外部加密硬件的代碼并進(jìn)行相應(yīng)的修改。本文介紹的USB加密系統(tǒng)中采用了API函數(shù)調(diào)用與SHELL外殼加密相結(jié)合的技術(shù),可以有效地對抗靜態(tài)分析方法。即使使用脫殼工具軟件后,外殼被破壞,內(nèi)部的加密函數(shù)的調(diào)用仍然能保證保護(hù)的有效性。

  (2)動(dòng)態(tài)跟蹤破解法。要求使用者具有豐富的破解經(jīng)驗(yàn)。它使用調(diào)試分析工具軟件,跟蹤控制受保護(hù)軟件的整個(gè)運(yùn)行過程,找出它與加密接口間交互部分的判斷代碼并進(jìn)行修改,使其跳過對加密硬件的檢測或使檢測結(jié)果無效。對付這種破解方法,本方案使用了數(shù)據(jù)交換隨機(jī)噪聲技術(shù)和迷宮技術(shù),即在程序入口和出口之間包含大量無效判斷跳轉(zhuǎn)進(jìn)行干擾,動(dòng)態(tài)改變執(zhí)行次序,提升抗跟蹤能力。另外,USB加密系統(tǒng)內(nèi)部設(shè)有時(shí)間閘,各種操作必須在規(guī)定的時(shí)間內(nèi)完成。正常操作用時(shí)很短,而跟蹤過程用時(shí)較長,超過規(guī)定時(shí)間將返回錯(cuò)誤結(jié)果。

1.3 加密子系統(tǒng)設(shè)計(jì)

  加密子系統(tǒng)的設(shè)計(jì)采用單片機(jī)加FPGA(Field Programmable Gate Array)模式,既可方便地用單片機(jī)完成對USB口的操作,又能利用FPGA速度快和保密性強(qiáng)等特點(diǎn)實(shí)現(xiàn)復(fù)雜的加密算法。

  在加密系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)中,主要是根據(jù)芯片的容量大小,選擇一種合適的加解密算法,將其在FPGA芯片中實(shí)現(xiàn),同時(shí)處理好與單片機(jī)的外部接口問題。根據(jù)FPGA的特性,在以后的使用中可以隨著加密算法的進(jìn)一步發(fā)展,采用動(dòng)態(tài)可重構(gòu)技術(shù),將新的加密算法重新配置在硬件中,實(shí)現(xiàn)新的加密技術(shù),故此加密裝置有很高的靈活性。本系統(tǒng)開發(fā)的EDA工具軟件采用XILINX公司的XILINX軟件包FOUNDATION4.1集成環(huán)境,硬件采用XILINX公司的SPARTAN系列FPGA芯片。

2  USB接口電路的開發(fā)

2.1 USB接口電路

  電路設(shè)計(jì)采用模塊化的設(shè)計(jì)方法。本系統(tǒng)在電路一級有3個(gè)模塊:USB接口模塊、I2C總線模塊和加密模塊。這樣不但可以提高開發(fā)效率,而且非常有利于系統(tǒng)的擴(kuò)展和升級。本文重點(diǎn)介紹了3個(gè)模塊的設(shè)計(jì)方法及電路的連接。在系統(tǒng)中,使用ATMEL的24C64作為存儲芯片,采用P89C51RD2單片機(jī)的P1口模擬I2C總線來實(shí)現(xiàn)MCU與24C64的連接。系統(tǒng)USB接口平臺的硬件電路設(shè)計(jì)框圖如圖2所示。

 

2.2 P89C51單片機(jī)與USBN9603的硬件連接設(shè)計(jì)

  對USBN9603芯片的控制是通過向它的寄存器讀寫數(shù)據(jù)來實(shí)現(xiàn)的。它的每個(gè)寄存器都有相應(yīng)的地址映射,其地址范圍從0x00~0x3F,對應(yīng)58個(gè)寄存器(有6個(gè)地址保留)。USBN9603芯片相對于P89C51單片機(jī)來說更像是一片外部存儲器,當(dāng)USBN9603被片選后,讀寫某個(gè)寄存器的地址,就可以被訪問。P89C51單片機(jī)的P0口可以作為一個(gè)地址/數(shù)據(jù)復(fù)用的總線口,而USBN9603芯片的總線連接方式是可設(shè)定的。USBN9603的并行連接有2種工作模式:復(fù)用模式與非復(fù)用模式。本接口電路中只用到復(fù)用模式與P89C51單片機(jī)進(jìn)行接口。在這種模式下,MODE0接高電平,MODE1接低電平。MPU可以直接訪問寄存器DATAIN、DATAOUT和ADDR。圖3是USBN9603復(fù)用模式讀寫時(shí)序圖。根據(jù)圖3就可以將USBN9603的8位地址/數(shù)據(jù)總線直接與P89C51單片機(jī)的P0口相連及各自的“讀寫”引腳分別相連。如圖4所示。

 

 

  在標(biāo)準(zhǔn)訪問模方式下,USBN9603的序列是首先將地址寫入ADDRESS寄存器,然后再讀取DATAOUT的數(shù)據(jù)或者寫入DATAIN數(shù)據(jù)。

3 設(shè)備驅(qū)動(dòng)程序的編制

  驅(qū)動(dòng)程序的基本功能就是建立應(yīng)用程序與USB接口之間的數(shù)據(jù)通信。Windows 98和Windows 2000操作系統(tǒng)為USB總線提供了全面的支持,并且用WDM(Windows Device Mode)設(shè)備驅(qū)動(dòng)程序模型代替了VxD設(shè)備驅(qū)動(dòng)程序。WDM模型主要采用分層的方法,模仿面向?qū)ο蟮募夹g(shù)。先進(jìn)行邏輯上的“分層”,然后將標(biāo)準(zhǔn)的實(shí)現(xiàn)和低層細(xì)節(jié)“封裝”起來,形成“基類”??蛻舫绦蛲ㄟ^“繼承”的方式來擴(kuò)展“基類”的功能,完成所需要的實(shí)現(xiàn)。WDM支持USBl.l協(xié)議,并為用戶開發(fā)自己的用戶驅(qū)動(dòng)程序提供USB驅(qū)動(dòng)程序接口USBDI。USB用戶驅(qū)動(dòng)程序通過USBDI訪問USB設(shè)備類驅(qū)動(dòng)程序。USB外設(shè)不占用端口或中斷等硬件資源,所有低層I/O都由USB設(shè)備類驅(qū)動(dòng)程序處理??蛻趄?qū)動(dòng)程序只關(guān)心數(shù)據(jù)傳輸類型、傳輸時(shí)序、傳輸管道以及如何處理數(shù)據(jù)等主要操作。USBDI就是為實(shí)現(xiàn)這一點(diǎn)而設(shè)計(jì)的軟件接口。

  如圖5所示,Windows對構(gòu)成一個(gè)USB主機(jī)的不同軟件部分進(jìn)行了十分清楚的劃分。其中USB客戶軟件僅僅包含了用來控制不同USB外設(shè)的設(shè)備驅(qū)動(dòng)程序。USB設(shè)備驅(qū)動(dòng)程序會(huì)通過Windows所定義的一個(gè)軟件接口來同根集線器驅(qū)動(dòng)程序進(jìn)行通信。而USB根集線器驅(qū)動(dòng)程序則要通過USBDI來實(shí)現(xiàn)同通用串行總線驅(qū)動(dòng)程序(USBD)的通信。然后,USBD會(huì)選擇2種主控制器驅(qū)動(dòng)程序之一來同其下方的主控制器進(jìn)行通信。最后,主控制器驅(qū)動(dòng)程序會(huì)直接實(shí)現(xiàn)對USB物理總線的訪問。

 

 

  在圖5中,主控制器驅(qū)動(dòng)程序處于USBD的下方,而根集線器卻位于USBD上方。在一個(gè)支持USB系統(tǒng)的主機(jī)中,都會(huì)有一個(gè)根集線器來提供2個(gè)USB端口。一個(gè)USB系統(tǒng)中的所有USB設(shè)備,包括USB功能設(shè)備和USB集線器都必須以直接接入或星型接入方式接入一個(gè)USB根集線器。在Windows環(huán)境中,所有的客戶驅(qū)動(dòng)程序都可以通過指向一個(gè)根集線器驅(qū)動(dòng)程序的接口來和所有接入的USB設(shè)備進(jìn)行通信。另外一種方法就是通過USBDI而直接同USBD進(jìn)行交互。

4  測  試

  下面以前文介紹的整個(gè)USB接口平臺為基礎(chǔ),給出USB加密系統(tǒng)原型版在Windows98操作系統(tǒng)中的測試。

測試分2步進(jìn)行,首先對USB接口平臺單獨(dú)測試,然后對整體測試。

  測試的主機(jī)平臺為方正“文祥600”計(jì)算機(jī),操作系統(tǒng)的版本為Windows98第二版。首先確保硬件設(shè)備連接到PC的USB接口上,并且操作系統(tǒng)為Windows98,按照提示正確安裝驅(qū)動(dòng)程序。當(dāng)本設(shè)備接口連入PC機(jī)后,操作系統(tǒng)的系統(tǒng)USB總線驅(qū)動(dòng)程序立刻檢測到有新的USB設(shè)備加入。在與USB設(shè)備的0節(jié)點(diǎn)進(jìn)行通信獲得設(shè)備的基本信息后,操作系統(tǒng)將彈出窗口要求安裝驅(qū)動(dòng)程序。在驅(qū)動(dòng)程序正確安裝完成以后,在計(jì)算機(jī)的“系統(tǒng)屬性”中就可以看到結(jié)果,此時(shí)表示USB加密系統(tǒng)已經(jīng)被正確安裝。下面用DriverStudio自動(dòng)生成的DOS界面的應(yīng)用程序進(jìn)行測試。

  當(dāng)應(yīng)用程序找到設(shè)備后,就可以執(zhí)行讀、寫2種操作。首先執(zhí)行寫功能:寫入6個(gè)字符,應(yīng)用程序提示寫入設(shè)備成功;然后執(zhí)行讀功能:將寫功能寫入的6個(gè)字符讀出,應(yīng)用程序提示從設(shè)備讀出了6個(gè)字符,并且讀出的字符與寫入的一致,這說明了USB接口部分讀、寫功能正常。

  接下來是對系統(tǒng)進(jìn)行總體測試。打開以DOS應(yīng)用程序?yàn)榛A(chǔ)重新編制的Windows應(yīng)用程序,程序界面如圖6所示。左邊設(shè)備信息報(bào)告欄第1行顯示的“查找設(shè)備成功”,表示設(shè)備可以正常使用了。在“寫數(shù)據(jù)”窗口中,可以寫下任何文本內(nèi)容,在測試中我們寫下了“加密技術(shù)——讓世界更安全!”的字樣。然后點(diǎn)“寫入設(shè)備”按鈕,數(shù)據(jù)就被寫到USB加密板中,左側(cè)信息窗口出現(xiàn)對映的信息;再點(diǎn)擊“讀取數(shù)據(jù)”按鈕,在“讀數(shù)據(jù)”窗口中,顯示了由USB加密系統(tǒng)返回的密文,同樣左側(cè)信息窗口也出現(xiàn)對映的信息,這樣就完成了加密過程。

 

  對信息進(jìn)行解密的操作過程與加密的過程相同。首先將密文復(fù)制到寫數(shù)據(jù)窗口中,點(diǎn)擊“寫入設(shè)備”按鈕,再點(diǎn)擊“讀取數(shù)據(jù)”按鈕,就可以看到明文“加密技術(shù)——讓世界更安全!”出現(xiàn)在讀數(shù)據(jù)窗口中(圖略)?!?/p>

  以上過程證明了整個(gè)系統(tǒng)工作正常,可以完成向設(shè)備寫入明文數(shù)據(jù),USB設(shè)備接收到數(shù)據(jù)后再傳遞給加密接口進(jìn)行加密,形成密文,再傳送到USB設(shè)備,然后把數(shù)據(jù)讀取出來。解密功能也正常,解密后的明文與原始明文一致。

  USB是一種全新的通用串行總線接口,是非常復(fù)雜的系統(tǒng),但了解這樣一個(gè)系統(tǒng),有助于了解當(dāng)今接口體系結(jié)構(gòu)的設(shè)計(jì)思想,對于理解其他的接口體系結(jié)構(gòu)很有好處。

 

參考文獻(xiàn)

1  Compaq,Hewlett-Packard,Intel et al.Universal Bus Specification Revision 2.0.2000

2  Axelson J著,陳逸譯.USB大全.北京:中國電力出版社,2001

3  張念淮,江浩.USB總線接口開發(fā)指南.北京:國防工業(yè)出版社,2001

4  Anderson D著,精英科技譯.USB系統(tǒng)體系.北京:中國電力出版社,2001

5  Cant C著,孫義譯.Windows WDM設(shè)備驅(qū)動(dòng)程序開發(fā)指南.北京:機(jī)械工業(yè)出版社,2001

6  武安河,周利莉.Windows設(shè)備驅(qū)動(dòng)程序(VxD和WDM)開發(fā)實(shí)務(wù).北京:電子工業(yè)出版社,2001

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