關鍵詞:USB加密卡,FPGA,驅動程序,即插即用
1 引 言
軟件加密卡(又稱軟件狗)是一種智能型加密工具,是一個安裝在并口、串口等接口上的硬件電路。當被保護的軟件運行時,程序向插在計算機上的加密卡發出查詢命令,加密卡迅速計算查詢并給出響應,正確的響應能保證軟件順利運行。如果沒有軟件加密卡,程序不能運行。最新的第四代軟件加密卡內置一個單片機芯片,芯片中存有特定的算法程序,可將讀出的密鑰進行加密變幻,以對抗邏輯分析儀。
USB軟件加密卡是USB接口技術與第四代加密卡技術結合的產物,因而與其它加密卡相比具有一些明顯優勢:首先,USB的數據傳輸速度快,USB1.0協議為12M比特率,USB2.0版可達480M比特率;其次,USB的底層數據傳輸具有特定的打包方法和編碼格式,這樣就增加了加密數據在傳輸過程中被截獲及解密的難度。最后,USB設備的即插即用性(plug-and-play)極大地方便了用戶的使用,比如,要在其它微機上使用被保護軟件時,只要一拔一插即可,免除了開機箱和重啟動的麻煩。
2 USB軟件加密卡的硬件設計
2.1 USB接口芯片
USB接口芯片的種類很多,但無論何種接口芯片,都有兩個基本功能:一是與上位機通信;二是提供對外圍電路CPU的接口。也就是說接口芯片架起了計算機與外圍設備的橋梁,使開發者不用關心復雜的USB協議是如何將數據傳送到主機的。
現有的支持USB1.0協議的接口芯片可大致分為兩類:一種為內部集成了微控制器,如Intel 8×930Ax/Hx內嵌一個8051CPU;另一種則只提供了對外圍電路訪問的讀寫接口,如USBN9603。在加密卡的設計中,建議采用第二種類型,因為對于較復雜的加密算法,8051CPU處理起來很吃力。下面以USBN9603為例介紹接口芯片的使用。
圖1描述了USBN9603的邏輯結構,可以看到芯片對外提供了8位并行接口,該接口為數據/地址復用接口,芯片內部自帶地址鎖存器,配合CS,RD,WK信號完成對內部寄存器的讀寫操作。USBN9603有一外部中斷INTR管腳,當USB接口有狀態變化時可產生中斷信號通知CPU,通過軟件置中斷屏蔽寄存器位,可控制中斷信號的發生。
USBN9603有7個與主機相連接的端點,包括一個雙向命令傳輸端點、三個接收端點、三個發送端點,可支持中斷(Interrupt)、批量(Bulk)和等時(Isochronal)傳輸模式。USBN9603傳輸器(Transceiver)配有的電壓調節器通過軟件置位可產生上拉電壓,通過上拉電阻接D+則接通全速模式,接D-則接通低速模式。
USBN9603使用外接晶振,同時有一個對外的時鐘輸出器,產生對外的時鐘信號,它的輸出頻率可由軟件控制。USBN9603的USB接口引擎由物理層和媒介通道控制器組成。物理層包括數字時鐘電路、監視電路、位填充與清除邏輯電路等。媒介通道控制器層要完成數據包格式化、循環冗余檢測、端點地址偵察等任務,并提供對端點發出的NAK,ACK和STALL回應的控制。接口引擎還要負責偵察和報告USB總線事件,如復位,掛起和恢復。
USBN9603向開發者提供了53個可編程的寄存器,地址分布在0x00~0x3F。CPU通過對寄存器的讀寫,完成一切USB接口操作。USBN9603寄存器被映射為CPU的外部RAM。CPU通過CS片選信號尋址,在ALE信號及RD、WR信號的配合下,由8位的并口寫入地址和數據。雖然讀寫操作簡單,但各寄存器的定義及作用卻復雜,但只要對USB協議及USBN9603功能有一定的了解,就不難理解和掌握各寄存器的使用。
2.2 外圍控制電路的設計
外圍控制電路的作用有兩個:一是對USB接口操作;二是實現加密算法。這要求主控芯片提供基本的讀寫、中斷和地址/數據信號,同時要有一定的計算能力以適應加密算法。在此前提下,我們有多種選擇,但加密卡的制作不能一味地追求高保密性能,而忽視了開發成本,應根據不同的應用場合靈活地選用不同的方案。例如,采用DSP芯片,其保密性和計算速度俱佳,但開發成本高、周期長;也可用價格低廉的單片機如8051,雖然速度慢且保密性差,但制作簡單、開發周期短。
我們在實踐中應用的一種方案為單片機+FPGA(Field Programmable Gate Array)模式,既可方便地用單片機完成對USB口的操作,又能利用FPGA的速度快和保密性強等特點實現復雜的加密算法。FPAG支持眾多的加密標準如AES、DES、三倍DES。而且,依靠FPGA的在線編程功能可方便地實現算法的更新與升級。這種組合模式符合模塊化設計思想,會一定程度地提高開發速度。
3 USB軟件加密卡驅動程序設計
3.1 驅動程序的基本功能實現
驅動程序的基本功能就是建立應用程序與加密卡之間的數據通訊。Windows98和Windows2000操作系統為USB總線提供了全面的支持,并且用WDM(Windows Device Mode)設備驅動程序模型代替了VxD設備驅動程序。WDM支持USB1.1協議,并為用戶開發自己的用戶驅動程序提供了下沿接口USBDI(USBDriving Interface)。USB用戶驅動程序通過USBDI訪問USB設備類驅動程序。USB客戶驅動程序決不會收到任何硬件資源(如端口或中斷),所有低層I/O都由USB設備類驅動程序應付。客戶驅動程序只關心數據傳輸類型、傳輸時序、傳輸管道以及如何處理數據等主要操作。USBDI就是為實現這一點而設計的軟件接口。形象地講,USBDI以軟件形式搭建了一個USB協議中所定義設備的邏輯結構,見圖2。
由圖2可知,USBDI表現給客戶驅動程序的所有USB設備都統一由配置、接口、端點組成。一個設備暴露一系列管道(端點),一個或多個端點可組成一個接口,一個或多個接口可組成一個配置。注意,USB接口芯片也以此模型描述其設備結構。端點、接口和配置由各自描述符描述性質。描述符一般放在外設儲存器中,當設備接入USB總線時,以連續數據塊的形式一起發到USB設備類驅動程序。USB客戶驅動程序對設備的操作完全參照描述符中的參數進行。
從編程角度上講,USBDI為開發者提供了一系列內部控制碼IOCTL,來向USB設備類驅動程序發出控制信息,如客戶驅動程序可使用IOCTL_INTERNAL_USB_RESET_PORT來復位管道。
IOCTL種類很多,其中最重要的是IOCTL_INTERNAL_USB_SUBMIT_URB,它用于向USB設備婁驅動程序發送URB(USB Request Block)請求塊。URB是一個聯合體數據結構,因而有多種不同的定義,每種定義對應一種功能并由各自的功能碼描述,如USB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER表示通過塊或中斷端點讀/寫數據功能。每個功能碼使用各自的URB結構詳細說明它的輸入/輸出參數。URB包參數構造完后,將其指針掛接在IRP包上,隨IRP包傳給USB設備類驅動程序處理。URB是個極重要的概念,對外設的各種操作基本上是通過發送URB包進行的。
有了驅動程序并將其安裝在計算機上,應用程序(被保護軟件)就可用OpenFile、Write/ReadFile等API函數對加密卡進行讀寫或狀態檢測。
3.2 開發驅動程序的加密功能
驅動程序的加密功能有以下幾種實現方式:將加密數據的一部分或加密算法的某一階段交給驅動程序完成,使其在基本通訊功能上增加數據過濾計算功能;還可借鑒“用戶算法植入”的思想(普通的加密思想無非是在程序執行中與加密卡交換數據,而這種加密技術是在加密硬件中開辟一塊存儲區,將用戶程序的一部分寫進去,并由加密卡來執行),將應用軟件的一部分寫入驅動程序,造成在沒有驅動程序時應用程序將不完整。
開發驅動程序的加密功能主要基于兩點考慮。首先,USB外設具有即插即用功能,加密卡插上或拔出時,其驅動程序自動加載或卸載,不可能在沒有加密卡的情況下單獨運行驅動程序,因而可以將它們視為整體。但驅動程序畢竟在計算機上運行,它可以充分利用其資源,如計算能力與內存空間,以協助加密卡的工作。其次,驅動程序運行在操作系統的內核。鑒于一般操作系統(如Windows)對內核的保護,要對其進行跟蹤解密比較困難,因而將應用軟件的重要部分寫入驅動程序要比在應用程序中運行更安全,更依賴于加密卡,同時又不增加加密卡的負擔。
驅動程序的加密功能使其既成為加密卡的一部分又成為應用軟件的一部分,這種雙重性實現了加密系統的緊密聯系,使得加密效果更可靠。同時,使得性能較低的加密卡得以擴展,方便地用低成本實現高保密性。另外,要對現有加密卡進行升級,往往只需修改驅動程序,這更顯得方便高效。
4 結束語
以上我們已對USB加密卡的各種關鍵技術作了詳細介紹。雖然世界上沒有絕對安全的加密技術,而數據加密也只是安全保密的一小部分,但加密卡的軟硬件開發表現出了高度的靈活性與創新性。面對層出不窮的威脅計算機安全的行為,各種各樣的加密技術將不斷涌現,它們以自身的發展,捍衛了軟件商利益的同時,也捍衛著知識的尊嚴。
2 Chris Cant.Windows WDM設備驅動程序開發指南.北京:機械工業出版社,2000
3 看雪編著.加密與解密——軟件保護技術及完全解決方案.北京:電子工業出版社,2001
評論
查看更多