摘 要: 討論了用偽隨機(jī)序列實(shí)現(xiàn)程序加密保護(hù)及其可編程邏輯器件實(shí)現(xiàn)的原理、方法和具體操作,給出了在微機(jī)軟件和單片機(jī)/DSP系統(tǒng)中程序加密的實(shí)際運(yùn)用舉例,。
關(guān)鍵詞: 加密技術(shù) 可編程邏輯器件 偽隨機(jī)序列 單片機(jī)系統(tǒng) DSP
可編程邏輯器件(PLD)經(jīng)歷了PAL,、GAL,、CPLD 和FPGA幾個(gè)發(fā)展階段,。使用PLD具有設(shè)計(jì)靈活,、調(diào)試方便,、系統(tǒng)可靠性高等眾多優(yōu)點(diǎn),,并有利于硬件設(shè)計(jì)的保護(hù),防止他人對(duì)電路的分析,、仿照,,使其成為科研實(shí)驗(yàn)、樣機(jī)試制和小批量產(chǎn)品的首選方案,。
隨著計(jì)算機(jī),、單片機(jī)技術(shù)的發(fā)展和廣泛應(yīng)用,軟件加密成為知識(shí)產(chǎn)權(quán)保護(hù)的重要手段,。目前微機(jī)軟件加密的方法可分為兩大類:軟加密和硬加密,。軟加密主要有密碼方式,、軟件自校驗(yàn)方式、鑰匙盤方式等多種,。隨著軟加密的發(fā)展,,解密軟件也大量出現(xiàn)。硬加密由于具有加密強(qiáng)度大,、可靠性高等特點(diǎn),,已廣泛用于微機(jī)軟件保護(hù)。硬加密將硬件和軟件相結(jié)合來實(shí)現(xiàn)軟件的加密,,軟件在運(yùn)行時(shí)需與硬件正確交換數(shù)據(jù),,否則程序不運(yùn)行,或不能執(zhí)行主要功能,,典型的產(chǎn)品有:插在計(jì)算機(jī)總線上的加密卡,,接在計(jì)算機(jī)并口或USB口的軟件狗(加密鎖)、微狗等,。軟件狗大多用E2PROM存儲(chǔ)密碼數(shù)據(jù),,電路簡(jiǎn)單,成本低,,但用SOFT-ICE等軟件進(jìn)行軟件狗的解密和復(fù)制并不很困難,。在這種情況下,軟件狗內(nèi)部增加了一個(gè)單片機(jī)稱為微狗,,通過對(duì)數(shù)據(jù)的處理來提高軟件的加密強(qiáng)度,;少數(shù)專業(yè)的硬加密生產(chǎn)商則采用獨(dú)自的ASIC芯片。加密卡的原理與軟件狗和微狗的相似,,不同的是通過總線操作,,使得設(shè)計(jì)更靈活、功能更強(qiáng),,只是安裝不方便,。
隨著某一加密產(chǎn)品加密操作方式的公開,其解密也就為期不遠(yuǎn),。新出現(xiàn)的解密軟件能模擬絕大部分軟件與加密狗間的數(shù)據(jù)交換過程,,從而達(dá)到解密;國產(chǎn)的加密卡和微狗,,大多外用E2PROM存儲(chǔ)配置數(shù)據(jù)和用戶密碼,,獲取這些數(shù)據(jù)就可能解密、甚至復(fù)制微狗,,因此加密方法的獨(dú)特性,、手法的反常規(guī)性在加密應(yīng)用中非常重要。單片機(jī)/DSP系統(tǒng)的控制及外圍電路都相對(duì)簡(jiǎn)單,,對(duì)軟件的跟蹤比較容易分析硬件的設(shè)計(jì)思想和實(shí)現(xiàn)功能,,而目前對(duì)其軟件的保護(hù)并不受重視,,并且單片機(jī)/DSP系統(tǒng)沒有現(xiàn)成的加密產(chǎn)品,設(shè)計(jì)者應(yīng)結(jié)合系統(tǒng)軟,、硬件的要求靈活決定,。我們利用PLD器件本身的加密保護(hù)特性,由其產(chǎn)生的偽隨機(jī)序列實(shí)現(xiàn)單片機(jī)/DSP系統(tǒng)和計(jì)算機(jī)應(yīng)用程序的加密,,具有簡(jiǎn)單方便,,解密難度大的特點(diǎn),同樣可用PLD器件實(shí)現(xiàn)更復(fù)雜的加密方法如 EDS,。
1 硬件加密的PLD實(shí)現(xiàn)原理
硬件加密必須綜合考慮加密方法的可行性,、有效性、硬件復(fù)雜度等因素,,由邏輯電路產(chǎn)生大量密碼的一種簡(jiǎn)單有效的方法是使用線性反饋移位寄存器,,其產(chǎn)生的偽隨機(jī)數(shù)據(jù)已廣泛用于數(shù)據(jù)通信中的加擾、擴(kuò)頻,、跳頻和數(shù)據(jù)加密,。圖1所示是具有防跟蹤、產(chǎn)生2N-1個(gè)N 位偽隨機(jī)數(shù)據(jù)的加密電路原理框圖,,密碼生成所用觸發(fā)器和門電路少,,并且密碼是加電后動(dòng)態(tài)產(chǎn)生的,不同的預(yù)置產(chǎn)生的數(shù)據(jù)不同,,因此密碼的強(qiáng)度,、隱蔽性優(yōu)于加密狗和微狗(卡)。
N位移位寄存器產(chǎn)生的偽隨機(jī)碼作為讀取的密碼或輸入數(shù)據(jù)解密的密鑰,,在移位時(shí)鐘的作用下,,可輸出2N-1個(gè)N位的有效密碼或密鑰。對(duì)某一具體電路,,移位寄存器初值不同時(shí),,這2N-1個(gè)隨機(jī)數(shù)有2N-1種排序,可預(yù)置偽隨機(jī)數(shù)產(chǎn)生器的原理電路如圖2所示,。要使移位寄存器產(chǎn)生一確定的值,,首先置其初值,然后置移位計(jì)數(shù)器初值并允許時(shí)鐘電路產(chǎn)生移位時(shí)鐘,;當(dāng)移位計(jì)數(shù)器計(jì)滿時(shí),,產(chǎn)生一個(gè)數(shù)據(jù)準(zhǔn)備好狀態(tài)可供軟件讀取,該狀態(tài)同時(shí)阻斷時(shí)鐘電路,,停止移位操作,并且啟動(dòng)防跟蹤記數(shù)器的時(shí)鐘產(chǎn)生電路,;若在規(guī)定的時(shí)間內(nèi)讀取密碼字或者寫入待解密數(shù)將清零防跟蹤記數(shù)器,,否則超時(shí)使防跟蹤記數(shù)器滿導(dǎo)致觸發(fā)器翻轉(zhuǎn),,打開三態(tài)門,擾亂輸出數(shù)據(jù),,雖然這時(shí)讀/寫數(shù)據(jù)能清零防跟蹤記數(shù)器,,阻斷其時(shí)鐘,但必須重加電或系統(tǒng)復(fù)位才能斷開三態(tài)門,。
對(duì)加密電路的正確操作步驟是:在主程序中預(yù)置移位計(jì)數(shù)器和移位寄存器初值,,在子程序的一處判斷移位是否完成,另一處讀密碼或?qū)懘饷軘?shù),,在另一子程序判斷或取解密數(shù)據(jù),,以防止跟蹤。
為在使用較少觸發(fā)器情況下保證程序正常運(yùn)行并能有效地防止解密跟蹤,,應(yīng)恰當(dāng)?shù)剡x擇防跟蹤計(jì)數(shù)器的時(shí)鐘,,若用移位寄存器時(shí)鐘源,則需要較高的分頻才能滿足高速的數(shù)據(jù)產(chǎn)生,、適當(dāng)?shù)难訒r(shí)時(shí)間,;因此在實(shí)際使用中,應(yīng)根據(jù)需要,,選擇系統(tǒng)可能提供的低頻持續(xù)脈沖信號(hào)作為防跟蹤計(jì)數(shù)器的時(shí)鐘,。在微機(jī)系統(tǒng)中,尤其在WINDOWS操作系統(tǒng)的分時(shí)事件驅(qū)動(dòng)運(yùn)行模式下,,由于系統(tǒng)固有的存儲(chǔ)器刷新,、時(shí)鐘中斷,以及運(yùn)行中硬件中斷,、DMA操作,、任務(wù)切換,必須有較長的防跟蹤延時(shí)才能保證合法程序正常運(yùn)行,,要注意在軟硬盤操作時(shí)對(duì)密碼數(shù)據(jù)操作的影響,。
2 應(yīng)用舉例
2.1 并行口加密電路
在PC機(jī)系統(tǒng)中,一般打印機(jī)并行接口包括單向輸出的8條數(shù)據(jù)線D0~D7和四條控制線,、5條狀態(tài)輸入線,,因此每次讀操作只讀取4bits密碼,其加密電路原理框圖如圖3所示,。由于并行口不提供電源,,將聯(lián)機(jī)控制信號(hào)SLCT置高提供的電流很小,因此直接掛在并行口上的電路必須選用規(guī)模不大的低功耗器件,。
經(jīng)并行口控制移位寄存器產(chǎn)生密碼的基本操作步驟是:(1)SLCT置高加電,;(2)STROBE觸發(fā)經(jīng)D0~D8
寫入16位控制字,選通加密電路,,否則打印口正常,;(3)初始化信號(hào)INIT置低,,STROBE選擇預(yù)置移位寄存器和移位計(jì)數(shù)器;(4)INIT置高選通移位時(shí)鐘,;(5)檢測(cè)數(shù)據(jù)是否準(zhǔn)備好,;(6)換行控制AUTO LF置高,在STROBE脈沖作用下數(shù)據(jù)按4bits輸出供CPU讀??;(7)SLCT置低斷電。
防跟蹤記數(shù)器由移位計(jì)數(shù)器滿狀態(tài)啟動(dòng),,其溢出脈沖使觸發(fā)器翻轉(zhuǎn)選通三態(tài)門,,擾亂輸出數(shù)據(jù)。防跟蹤記數(shù)器和移位寄存器時(shí)鐘可由門電路構(gòu)成的RC振蕩器產(chǎn)生,。
2.2 ISA總線加密電路
與并行口方式相比,,通過總線方式對(duì)加密電路的移位寄存器和移位記數(shù)器的預(yù)置、輸入數(shù)據(jù)的異或解密等操作更靈活,、方便,,并可與其它電路結(jié)合,其原理框圖與圖1相似,??偩€接口電路對(duì)端口地址和控制信號(hào)譯碼,產(chǎn)生移位寄存器和移位記數(shù)器輸入寫,、移位寄存器及異或解密輸出讀信號(hào),,讀信號(hào)清零防跟蹤記數(shù)器并阻斷其時(shí)鐘。在ISA總線接口中,,移位寄存器時(shí)鐘用OSC或總線時(shí)鐘BCLK,,而防跟蹤記數(shù)器時(shí)鐘可采用移位時(shí)鐘或狀態(tài)持續(xù)變化的總線控制信號(hào)及狀態(tài)信號(hào),如:地址鎖存信號(hào)BALE,、刷新指示信號(hào)REFRESH,、DMA操作允許信號(hào)AEN(因用于I/O地址譯碼,隱蔽性好)等,,用REFRESH信號(hào)時(shí)計(jì)數(shù)器規(guī)模小,、運(yùn)行可靠,但是切斷該信號(hào)防跟蹤功能不起作用,,密碼數(shù)據(jù)仍正常產(chǎn)生,。
2.3 單片機(jī)/ DSP系統(tǒng)程序加密電路
早期的單片機(jī)系統(tǒng)大都用擴(kuò)展EPROM作為程序存儲(chǔ)器,這種方式目前在高速單片機(jī)/DSP中仍然很常用,。對(duì)于程序量小,,不需外部程序?qū)ぶ返暮?jiǎn)單系統(tǒng)(如微狗),采用內(nèi)置EPROM/FLASH RAM、帶加密控制字的MCU(如GMS97C2051)本身就能可靠地保護(hù)程序,;因此我們的討論只限于用擴(kuò)展程序存儲(chǔ)器的系統(tǒng),。
對(duì)擴(kuò)展程序存儲(chǔ)器的加密保護(hù)可通過對(duì)其數(shù)據(jù)和地址線的異或/取反擾亂來實(shí)現(xiàn),,其目的都是不能直接獲取程序存儲(chǔ)器內(nèi)部保存的數(shù)據(jù),。由于X=X⊕K⊕K,X=X,,因此在系統(tǒng)工作時(shí)由硬件實(shí)現(xiàn)代碼和密鑰的異或/取反操作可得到正確的程序(文獻(xiàn)[2]中用二級(jí)異或提高加密強(qiáng)度的觀點(diǎn)不正確,,因?yàn)閅=X⊕K1⊕K2=X⊕K),其原理如圖4所示,。通常單片機(jī)加密的方式是密鑰固定不變,,或CPU讀取程序代碼的同時(shí),從另一片EPROM讀取密碼,,使每一代碼對(duì)應(yīng)一密鑰,。這兩種方式的解密只需用簡(jiǎn)單的組合邏輯電路,對(duì)前一種方式,,用邏輯分析法很容易求解邏輯關(guān)系而解密,,后一種方法進(jìn)行邏輯分析的工作量雖然大大提高,但密鑰本身容易被直接獲取,。因此我們用m序列產(chǎn)生器動(dòng)態(tài)產(chǎn)生密鑰,,將解密的組合邏輯電路與時(shí)序邏輯相結(jié)合,而較復(fù)雜時(shí)序邏輯的分析是很困難的,。
對(duì)8031,、MC6805兼容系列的單片機(jī)系統(tǒng),編程使開始的一段初始化程序順序執(zhí)行,,系統(tǒng)復(fù)位時(shí)自動(dòng)對(duì)移位寄存器設(shè)初值,,復(fù)位后程序存儲(chǔ)器的讀信號(hào)同時(shí)作為移位時(shí)鐘,使每條指令的密鑰不斷變化,;在第一次執(zhí)行循環(huán),、跳轉(zhuǎn)指令前,程序發(fā)控制字阻斷移位時(shí)鐘,,使以后的程序密鑰相同,。在高速DSP系統(tǒng)中,一般上電后將低速EPROM中的程序加載到高速SRAM中運(yùn)行,,可使EPROM的讀控制信號(hào)一直作為移位時(shí)鐘,,使密鑰不斷變化;如果用串行口方式加載,,程序解密操作與數(shù)據(jù)通信中的數(shù)據(jù)解擾相同,,數(shù)據(jù)輸出時(shí)鐘直接作為移位時(shí)鐘。單片機(jī)/DSP作為微機(jī)系統(tǒng)的協(xié)處理器時(shí),單片機(jī)/DSP的代碼一般經(jīng)總線裝載,,可將加密代碼與移位寄存器輸出的密鑰異或解密,,輸出到單片機(jī)/DSP的程序RAM。
系統(tǒng)運(yùn)行時(shí),,用于MCU/DSP程序保護(hù)的防跟蹤計(jì)數(shù)器時(shí)鐘一直有效,,這樣可以防止仿真器的跟蹤。防跟蹤計(jì)數(shù)器要用程序讀或其相關(guān)信號(hào)清零,,有的DSP從內(nèi)部RAM運(yùn)行程序時(shí),,程序讀無相應(yīng)輸出信號(hào),這時(shí)可用定時(shí)器中斷或程序中及時(shí)插入的代碼來清零,。
上述介紹應(yīng)用移位寄存器產(chǎn)生偽隨機(jī)數(shù)據(jù)對(duì)程序進(jìn)行加密的一些方法,,曾在我們?cè)O(shè)計(jì)的系統(tǒng)中得到驗(yàn)證,整個(gè)電路的設(shè)計(jì)不復(fù)雜,,占用PLD 器件的資源不多,,完全可結(jié)合在系統(tǒng)的硬件邏輯設(shè)計(jì)中。使用8/16位的移位寄存器時(shí),,密鑰量有限,,制約了加密的復(fù)雜度,使用者應(yīng)根據(jù)設(shè)計(jì)要求和自己的經(jīng)驗(yàn),,引入各種非常規(guī)的操作方式,,這樣就可以用簡(jiǎn)單的硬件電路,很好地實(shí)現(xiàn)軟件和系統(tǒng)的保護(hù),。
參考文獻(xiàn)
1 Alteral MAX+PLUSⅡ Tutorial.ALTERA,1998
2 王茂.單片機(jī)系統(tǒng)的加密技術(shù).計(jì)算機(jī)工程與應(yīng)用,,1997;(11)
3 董渭清,王換招.高檔微機(jī)總線接口技術(shù).西安:西安交通大學(xué)出版社,,1995,;(9)