色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > USB軟件加密卡及其驅(qū)動(dòng)程序的設(shè)計(jì)與開發(fā)

          USB軟件加密卡及其驅(qū)動(dòng)程序的設(shè)計(jì)與開發(fā)

          作者: 時(shí)間:2012-04-18 來源:網(wǎng)絡(luò) 收藏
          【摘 要】 詳述了USB軟件加密卡及其驅(qū)動(dòng)程序這一熱門技術(shù)。根據(jù)實(shí)踐經(jīng)驗(yàn),重點(diǎn)介紹了USB接口芯片選擇和應(yīng)用。闡述了USB驅(qū)動(dòng)程序基本功能的開發(fā),還提出了開發(fā)驅(qū)動(dòng)程序的加密功能的新觀點(diǎn),具有很強(qiáng)的實(shí)踐意義。
            關(guān)鍵詞:USB加密卡,F(xiàn)PGA,驅(qū)動(dòng)程序,即插即用


          1 引 言
            軟件加密卡(又稱軟件狗)是一種智能型加密工具,是一個(gè)安裝在并口、串口等接口上的硬件電路。當(dāng)被保護(hù)的軟件運(yùn)行時(shí),程序向插在計(jì)算機(jī)上的加密卡發(fā)出查詢命令,加密卡迅速計(jì)算查詢并給出響應(yīng),正確的響應(yīng)能保證軟件順利運(yùn)行。如果沒有軟件加密卡,程序不能運(yùn)行。最新的第四代軟件加密卡內(nèi)置一個(gè)單片機(jī)芯片,芯片中存有特定的算法程序,可將讀出的密鑰進(jìn)行加密變幻,以對抗邏輯分析儀。
            USB軟件加密卡是USB接口技術(shù)與第四代加密卡技術(shù)結(jié)合的產(chǎn)物,因而與其它加密卡相比具有一些明顯優(yōu)勢:首先,USB的數(shù)據(jù)傳輸速度快,USB1.0協(xié)議為12M比特率,USB2.0版可達(dá)480M比特率;其次,USB的底層數(shù)據(jù)傳輸具有特定的打包方法和編碼格式,這樣就增加了加密數(shù)據(jù)在傳輸過程中被截獲及解密的難度。最后,USB設(shè)備的即插即用性(plug-and-play)極大地方便了用戶的使用,比如,要在其它微機(jī)上使用被保護(hù)軟件時(shí),只要一拔一插即可,免除了開機(jī)箱和重啟動(dòng)的麻煩。
          2 USB軟件加密卡的硬件設(shè)計(jì)
          2.1 USB接口芯片
            USB接口芯片的種類很多,但無論何種接口芯片,都有兩個(gè)基本功能:一是與上位機(jī)通信;二是提供對外圍電路CPU的接口。也就是說接口芯片架起了計(jì)算機(jī)與外圍設(shè)備的橋梁,使開發(fā)者不用關(guān)心復(fù)雜的USB協(xié)議是如何將數(shù)據(jù)傳送到主機(jī)的。
            現(xiàn)有的支持USB1.0協(xié)議的接口芯片可大致分為兩類:一種為內(nèi)部集成了微控制器,如Intel 8×930Ax/Hx內(nèi)嵌一個(gè)8051CPU;另一種則只提供了對外圍電路訪問的讀寫接口,如USBN9603。在加密卡的設(shè)計(jì)中,建議采用第二種類型,因?yàn)閷τ谳^復(fù)雜的加密算法,8051CPU處理起來很吃力。下面以USBN9603為例介紹接口芯片的使用。
            圖1描述了USBN9603的邏輯結(jié)構(gòu),可以看到芯片對外提供了8位并行接口,該接口為數(shù)據(jù)/地址復(fù)用接口,芯片內(nèi)部自帶地址鎖存器,配合CS,RD,WK信號(hào)完成對內(nèi)部寄存器的讀寫操作。USBN9603有一外部中斷INTR管腳,當(dāng)USB接口有狀態(tài)變化時(shí)可產(chǎn)生中斷信號(hào)通知CPU,通過軟件置中斷屏蔽寄存器位,可控制中斷信號(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é)器通過軟件置位可產(chǎn)生上拉電壓,通過上拉電阻接D+則接通全速模式,接D-則接通低速模式。
            USBN9603使用外接晶振,同時(shí)有一個(gè)對外的時(shí)鐘輸出器,產(chǎn)生對外的時(shí)鐘信號(hào),它的輸出頻率可由軟件控制。USBN9603的USB接口引擎由物理層和媒介通道控制器組成。物理層包括數(shù)字時(shí)鐘電路、監(jiān)視電路、位填充與清除邏輯電路等。媒介通道控制器層要完成數(shù)據(jù)包格式化、循環(huán)冗余檢測、端點(diǎn)地址偵察等任務(wù),并提供對端點(diǎn)發(fā)出的NAK,ACK和STALL回應(yīng)的控制。接口引擎還要負(fù)責(zé)偵察和報(bào)告USB總線事件,如復(fù)位,掛起和恢復(fù)。

            USBN9603向開發(fā)者提供了53個(gè)可編程的寄存器,地址分布在0x00~0x3F。CPU通過對寄存器的讀寫,完成一切USB接口操作。USBN9603寄存器被映射為CPU的外部RAM。CPU通過CS片選信號(hào)尋址,在ALE信號(hào)及RD、WR信號(hào)的配合下,由8位的并口寫入地址和數(shù)據(jù)。雖然讀寫操作簡單,但各寄存器的定義及作用卻復(fù)雜,但只要對USB協(xié)議及USBN9603功能有一定的了解,就不難理解和掌握各寄存器的使用。
          2.2 外圍控制電路的設(shè)計(jì)
            外圍控制電路的作用有兩個(gè):一是對USB接口操作;二是實(shí)現(xiàn)加密算法。這要求主控芯片提供基本的讀寫、中斷和地址/數(shù)據(jù)信號(hào),同時(shí)要有一定的計(jì)算能力以適應(yīng)加密算法。在此前提下,我們有多種選擇,但加密卡的制作不能一味地追求高保密性能,而忽視了開發(fā)成本,應(yīng)根據(jù)不同的應(yīng)用場合靈活地選用不同的方案。例如,采用DSP芯片,其保密性和計(jì)算速度俱佳,但開發(fā)成本高、周期長;也可用價(jià)格低廉的單片機(jī)如8051,雖然速度慢且保密性差,但制作簡單、開發(fā)周期短。
            我們在實(shí)踐中應(yīng)用的一種方案為單片機(jī)+FPGA(Field Programmable Gate Array)模式,既可方便地用單片機(jī)完成對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ì)一定程度地提高開發(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é)議,并為用戶開發(fā)自己的用戶驅(qū)動(dòng)程序提供了下沿接口USBDI(USBDriving Interface)。USB用戶驅(qū)動(dòng)程序通過USBDI訪問USB設(shè)備類驅(qū)動(dòng)程序。USB客戶驅(qū)動(dòng)程序決不會(huì)收到任何硬件資源(如端口或中斷),所有低層I/O都由USB設(shè)備類驅(qū)動(dòng)程序應(yīng)付??蛻趄?qū)動(dòng)程序只關(guān)心數(shù)據(jù)傳輸類型、傳輸時(shí)序、傳輸管道以及如何處理數(shù)據(jù)等主要操作。USBDI就是為實(shí)現(xiàn)這一點(diǎn)而設(shè)計(jì)的軟件接口。形象地講,USBDI以軟件形式搭建了一個(gè)USB協(xié)議中所定義設(shè)備的邏輯結(jié)構(gòu),見圖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è)備類驅(qū)動(dòng)程序。USB客戶驅(qū)動(dòng)程序?qū)υO(shè)備的操作完全參照描述符中的參數(shù)進(jìn)行。
            從編程角度上講,USBDI為開發(fā)者提供了一系列內(nèi)部控制碼IOCTL,來向USB設(shè)備類驅(qū)動(dòng)程序發(fā)出控制信息,如客戶驅(qū)動(dòng)程序可使用IOCTL_INTERNAL_USB_RESET_PORT來復(fù)位管道。
          IOCTL種類很多,其中最重要的是IOCTL_INTERNAL_USB_SUBMIT_URB,它用于向USB設(shè)備婁驅(qū)動(dòng)程序發(fā)送URB(USB Request Block)請求塊。URB是一個(gè)聯(lián)合體數(shù)據(jù)結(jié)構(gòu),因而有多種不同的定義,每種定義對應(yīng)一種功能并由各自的功能碼描述,如USB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER表示通過塊或中斷端點(diǎn)讀/寫數(shù)據(jù)功能。每個(gè)功能碼使用各自的URB結(jié)構(gòu)詳細(xì)說明它的輸入/輸出參數(shù)。URB包參數(shù)構(gòu)造完后,將其指針掛接在IRP包上,隨IRP包傳給USB設(shè)備類驅(qū)動(dòng)程序處理。URB是個(gè)極重要的概念,對外設(shè)的各種操作基本上是通過發(fā)送URB包進(jìn)行的。
            有了驅(qū)動(dòng)程序并將其安裝在計(jì)算機(jī)上,應(yīng)用程序(被保護(hù)軟件)就可用OpenFile、Write/ReadFile等API函數(shù)對加密卡進(jìn)行讀寫或狀態(tài)檢測。
          3.2 開發(fā)驅(qū)動(dòng)程序的加密功能
            驅(qū)動(dòng)程序的加密功能有以下幾種實(shí)現(xiàn)方式:將加密數(shù)據(jù)的一部分或加密算法的某一階段交給驅(qū)動(dòng)程序完成,使其在基本通訊功能上增加數(shù)據(jù)過濾計(jì)算功能;還可借鑒“用戶算法植入”的思想(普通的加密思想無非是在程序執(zhí)行中與加密卡交換數(shù)據(jù),而這種加密技術(shù)是在加密硬件中開辟一塊存儲(chǔ)區(qū),將用戶程序的一部分寫進(jìn)去,并由加密卡來執(zhí)行),將應(yīng)用軟件的一部分寫入驅(qū)動(dòng)程序,造成在沒有驅(qū)動(dòng)程序時(shí)應(yīng)用程序?qū)⒉煌暾?/SPAN>
            開發(fā)驅(qū)動(dòng)程序的加密功能主要基于兩點(diǎn)考慮。首先,USB外設(shè)具有即插即用功能,加密卡插上或拔出時(shí),其驅(qū)動(dòng)程序自動(dòng)加載或卸載,不可能在沒有加密卡的情況下單獨(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)對內(nèi)核的保護(hù),要對其進(jìn)行跟蹤解密比較困難,因而將應(yīng)用軟件的重要部分寫入驅(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)高保密性。另外,要對現(xiàn)有加密卡進(jìn)行升級(jí),往往只需修改驅(qū)動(dòng)程序,這更顯得方便高效。
          4 結(jié)束語
            以上我們已對USB加密卡的各種關(guān)鍵技術(shù)作了詳細(xì)介紹。雖然世界上沒有絕對安全的加密技術(shù),而數(shù)據(jù)加密也只是安全保密的一小部分,但加密卡的軟硬件開發(fā)表現(xiàn)出了高度的靈活性與創(chuàng)新性。面對層出不窮的威脅計(jì)算機(jī)安全的行為,各種各樣的加密技術(shù)將不斷涌現(xiàn),它們以自身的發(fā)展,捍衛(wèi)了軟件商利益的同時(shí),也捍衛(wèi)著知識(shí)的尊嚴(yán)。
          參考文獻(xiàn)
          1 秦石喬,王省書.微機(jī)接口技術(shù)及應(yīng)用.長沙:國防科技大學(xué)出版社,2000
          2 Chris Cant.Windows WDM設(shè)備驅(qū)動(dòng)程序開發(fā)指南.北京:機(jī)械工業(yè)出版社,2000
          3 看雪編著.加密與解密——軟件保護(hù)技術(shù)及完全解決方案.北京:電子工業(yè)出版社,2001
          模擬電路文章專題:模擬電路基礎(chǔ)


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉