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