偽隨機(jī)序列及PLD實(shí)現(xiàn)在程序和系統(tǒng)加密中的應(yīng)用
可編程邏輯器件(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)方式、鑰匙盤(pán)方式等多種。隨著軟加密的發(fā)展,解密軟件也大量出現(xiàn)。硬加密由于具有加密強(qiáng)度大、可靠性高等特點(diǎn),已廣泛用于微機(jī)軟件保護(hù)。硬加密將硬件和軟件相結(jié)合來(lái)實(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ī)稱為微狗,通過(guò)對(duì)數(shù)據(jù)的處理來(lái)提高軟件的加密強(qiáng)度;少數(shù)專業(yè)的硬加密生產(chǎn)商則采用獨(dú)自的ASIC芯片。加密卡的原理與軟件狗和微狗的相似,不同的是通過(guò)總線操作,使得設(shè)計(jì)更靈活、功能更強(qiáng),只是安裝不方便。
隨著某一加密產(chǎn)品加密操作方式的公開(kāi),其解密也就為期不遠(yuǎn)。新出現(xiàn)的解密軟件能模擬絕大部分軟件與加密狗間的數(shù)據(jù)交換過(guò)程,從而達(dá)到解密;國(guó)產(chǎn)的加密卡和微狗,大多外用E2ROM存儲(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)沒(méi)有現(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ā)器和門(mén)電路少,并且密碼是加電后動(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)讀取密碼字或者寫(xiě)入待解密數(shù)將清零防跟蹤記數(shù)器,否則超時(shí)使防跟蹤記數(shù)器滿導(dǎo)致觸發(fā)器翻轉(zhuǎn),打開(kāi)三態(tài)門(mén),擾亂輸出數(shù)據(jù),雖然這時(shí)讀/寫(xiě)數(shù)據(jù)能清零防跟蹤記數(shù)器,阻斷其時(shí)鐘,但必須重加電或系統(tǒng)復(fù)位才能斷開(kāi)三態(tài)門(mén)。
對(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ù)切換,必須有較長(zhǎng)的防跟蹤延時(shí)才能保證合法程序正常運(yùn)行,要注意在軟硬盤(pá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寫(xiě)入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)門(mén),擾亂輸出數(shù)據(jù)。防跟蹤記數(shù)器和移位寄存器時(shí)鐘可由門(mén)電路構(gòu)成的RC振蕩器產(chǎn)生。
2.2 ISA總線加密電路
與并行口方式相比,通過(guò)總線方式對(duì)加密電路的移位寄存器和移位記數(shù)器的預(yù)置、輸入數(shù)據(jù)的異或解密等操作更靈活、方便,并可與其它電路結(jié)合,其原理框圖與圖1相似。總線接口電路對(duì)端口地址和控制信號(hào)譯碼,產(chǎn)生移位寄存器和移位記數(shù)器輸入寫(xiě)、移位寄存器及異或解密輸出讀信號(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ù)可通過(guò)對(duì)其數(shù)據(jù)和地址線的異或/取反擾亂來(lái)實(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、MC6085兼容系列的單片機(jī)系統(tǒng),編程使開(kāi)始的一段初始化程序順序執(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í),程序讀無(wú)相應(yīng)輸出信號(hào),這時(shí)可用定時(shí)器中斷或程序中及時(shí)插入的代碼來(lái)清零。
上述介紹應(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ù)。