摘 要: 討論了用偽隨機(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ù),防止他人對電路的分析,、仿照,,使其成為科研實(shí)驗(yàn)、樣機(jī)試制和小批量產(chǎn)品的首選方案,。
隨著計(jì)算機(jī),、單片機(jī)技術(shù)的發(fā)展和廣泛應(yīng)用,軟件加密成為知識產(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存儲密碼數(shù)據(jù),電路簡單,,成本低,,但用SOFT-ICE等軟件進(jìn)行軟件狗的解密和復(fù)制并不很困難。在這種情況下,,軟件狗內(nèi)部增加了一個(gè)單片機(jī)稱為微狗,,通過對數(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存儲配置數(shù)據(jù)和用戶密碼,,獲取這些數(shù)據(jù)就可能解密、甚至復(fù)制微狗,,因此加密方法的獨(dú)特性,、手法的反常規(guī)性在加密應(yīng)用中非常重要。單片機(jī)/DSP系統(tǒng)的控制及外圍電路都相對簡單,,對軟件的跟蹤比較容易分析硬件的設(shè)計(jì)思想和實(shí)現(xiàn)功能,,而目前對其軟件的保護(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)用程序的加密,,具有簡單方便,解密難度大的特點(diǎn),,同樣可用PLD器件實(shí)現(xiàn)更復(fù)雜的加密方法如 EDS,。
1 硬件加密的PLD實(shí)現(xiàn)原理
硬件加密必須綜合考慮加密方法的可行性、有效性,、硬件復(fù)雜度等因素,,由邏輯電路產(chǎ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位的有效密碼或密鑰。對某一具體電路,,移位寄存器初值不同時(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)門,。
對加密電路的正確操作步驟是:在主程序中預(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ù)脈沖信號作為防跟蹤計(jì)數(shù)器的時(shí)鐘。在微機(jī)系統(tǒng)中,,尤其在WINDOWS操作系統(tǒng)的分時(shí)事件驅(qū)動(dòng)運(yùn)行模式下,,由于系統(tǒng)固有的存儲器刷新,、時(shí)鐘中斷,以及運(yùn)行中硬件中斷,、DMA操作,、任務(wù)切換,必須有較長的防跟蹤延時(shí)才能保證合法程序正常運(yùn)行,,要注意在軟硬盤操作時(shí)對密碼數(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ī)控制信號SLCT置高提供的電流很小,因此直接掛在并行口上的電路必須選用規(guī)模不大的低功耗器件,。
經(jīng)并行口控制移位寄存器產(chǎn)生密碼的基本操作步驟是:(1)SLCT置高加電,;(2)STROBE觸發(fā)經(jīng)D0~D8
寫入16位控制字,選通加密電路,,否則打印口正常,;(3)初始化信號INIT置低,STROBE選擇預(yù)置移位寄存器和移位計(jì)數(shù)器,;(4)INIT置高選通移位時(shí)鐘,;(5)檢測數(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總線加密電路
與并行口方式相比,通過總線方式對加密電路的移位寄存器和移位記數(shù)器的預(yù)置,、輸入數(shù)據(jù)的異或解密等操作更靈活,、方便,并可與其它電路結(jié)合,,其原理框圖與圖1相似,。總線接口電路對端口地址和控制信號譯碼,,產(chǎn)生移位寄存器和移位記數(shù)器輸入寫,、移位寄存器及異或解密輸出讀信號,,讀信號清零防跟蹤記數(shù)器并阻斷其時(shí)鐘。在ISA總線接口中,,移位寄存器時(shí)鐘用OSC或總線時(shí)鐘BCLK,,而防跟蹤記數(shù)器時(shí)鐘可采用移位時(shí)鐘或狀態(tài)持續(xù)變化的總線控制信號及狀態(tài)信號,如:地址鎖存信號BALE,、刷新指示信號REFRESH,、DMA操作允許信號AEN(因用于I/O地址譯碼,隱蔽性好)等,,用REFRESH信號時(shí)計(jì)數(shù)器規(guī)模小,、運(yùn)行可靠,但是切斷該信號防跟蹤功能不起作用,,密碼數(shù)據(jù)仍正常產(chǎn)生,。
2.3 單片機(jī)/ DSP系統(tǒng)程序加密電路
早期的單片機(jī)系統(tǒng)大都用擴(kuò)展EPROM作為程序存儲器,這種方式目前在高速單片機(jī)/DSP中仍然很常用,。對于程序量小,,不需外部程序?qū)ぶ返暮唵蜗到y(tǒng)(如微狗),采用內(nèi)置EPROM/FLASH RAM,、帶加密控制字的MCU(如GMS97C2051)本身就能可靠地保護(hù)程序,;因此我們的討論只限于用擴(kuò)展程序存儲器的系統(tǒng)。
對擴(kuò)展程序存儲器的加密保護(hù)可通過對其數(shù)據(jù)和地址線的異或/取反擾亂來實(shí)現(xiàn),,其目的都是不能直接獲取程序存儲器內(nèi)部保存的數(shù)據(jù)。由于X=X⊕K⊕K,,X=X,,因此在系統(tǒng)工作時(shí)由硬件實(shí)現(xiàn)代碼和密鑰的異或/取反操作可得到正確的程序(文獻(xiàn)[2]中用二級異或提高加密強(qiáng)度的觀點(diǎn)不正確,因?yàn)閅=X⊕K1⊕K2=X⊕K),,其原理如圖4所示,。通常單片機(jī)加密的方式是密鑰固定不變,或CPU讀取程序代碼的同時(shí),,從另一片EPROM讀取密碼,,使每一代碼對應(yīng)一密鑰。這兩種方式的解密只需用簡單的組合邏輯電路,,對前一種方式,,用邏輯分析法很容易求解邏輯關(guān)系而解密,后一種方法進(jìn)行邏輯分析的工作量雖然大大提高,,但密鑰本身容易被直接獲取,。因此我們用m序列產(chǎn)生器動(dòng)態(tài)產(chǎn)生密鑰,將解密的組合邏輯電路與時(shí)序邏輯相結(jié)合,,而較復(fù)雜時(shí)序邏輯的分析是很困難的,。
對8031,、MC6805兼容系列的單片機(jī)系統(tǒng),編程使開始的一段初始化程序順序執(zhí)行,,系統(tǒng)復(fù)位時(shí)自動(dòng)對移位寄存器設(shè)初值,,復(fù)位后程序存儲器的讀信號同時(shí)作為移位時(shí)鐘,使每條指令的密鑰不斷變化,;在第一次執(zhí)行循環(huán),、跳轉(zhuǎn)指令前,程序發(fā)控制字阻斷移位時(shí)鐘,,使以后的程序密鑰相同,。在高速DSP系統(tǒng)中,一般上電后將低速EPROM中的程序加載到高速SRAM中運(yùn)行,,可使EPROM的讀控制信號一直作為移位時(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)信號清零,,有的DSP從內(nèi)部RAM運(yùn)行程序時(shí),程序讀無相應(yīng)輸出信號,,這時(shí)可用定時(shí)器中斷或程序中及時(shí)插入的代碼來清零,。
上述介紹應(yīng)用移位寄存器產(chǎn)生偽隨機(jī)數(shù)據(jù)對程序進(jìn)行加密的一些方法,曾在我們設(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ī)的操作方式,這樣就可以用簡單的硬件電路,很好地實(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)