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