歡迎您光臨本站 登入註冊首頁

概述

摘要:討論了用偽隨機序列實現程序加密保護及其可編程邏輯器件實現的原理、方法和具體操作,給出了在微機軟體和單片機/DSP系統中程序加密的實際運用舉例。   可編程邏輯器件(……

摘 要: 討論了用偽隨機序列實現程序加密保護及其可編程邏輯器件實現的原理、方法和具體操作,給出了在微機軟體和單片機/DSP系統中程序加密的實際運用舉例。

    可編程邏輯器件(PLD)經歷了PAL、GAL、CPLD 和FPGA幾個發展階段。使用PLD具有設計靈活、調試方便、系統可靠性高等眾多優點,並有利於硬體設計的保護,防止他人對電路的分析、仿照,使其成為科研實驗、樣機試製和小批量產品的首選方案。

    隨著計算機、單片機技術的發展和廣泛應用,軟體加密成為知識產權保護的重要手段。目前微機軟體加密的方法可分為兩大類:軟加密和硬加密。軟加密主要有密碼方式、軟體自校驗方式、鑰匙盤方式等多種。隨著軟加密的發展,解密軟體也大量出現。硬加密由於具有加密強度大、可靠性高等特點,已廣泛用於微機軟體保護。硬加密將硬體和軟體相結合來實現軟體的加密,軟體在運行時需與硬體正確交換數據,否則程序不運行,或不能執行主要功能,典型的產品有:插在計算機匯流排上的加密卡,接在計算機並口或USB口的軟體狗(加密鎖)、微狗等。軟體狗大多用E2PROM存儲密碼數據,電路簡單,成本低,但用SOFT-ICE等軟體進行軟體狗的解密和複製並不很困難。在這種情況下,軟體狗內部增加了一個單片機稱為微狗,通過對數據的處理來提高軟體的加密強度;少數專業的硬加密生產商則採用獨自的ASIC晶元。加密卡的原理與軟體狗和微狗的相似,不同的是通過匯流排操作,使得設計更靈活、功能更強,只是安裝不方便。

    隨著某一加密產品加密操作方式的公開,其解密也就為期不遠。新出現的解密軟體能模擬絕大部分軟體與加密狗間的數據交換過程,從而達到解密;國產的加密卡和微狗,大多外用E2ROM存儲配置數據和用戶密碼,獲取這些數據就可能解密、甚至複製微狗,因此加密方法的獨特性、手法的反常規性在加密應用中非常重要。單片機/DSP系統的控制及外圍電路都相對簡單,對軟體的跟蹤比較容易分析硬體的設計思想和實現功能,而目前對其軟體的保護並不受重視,並且單片機/DSP系統沒有現成的加密產品,設計者應結合系統軟、硬體的要求靈活決定。我們利用PLD器件本身的加密保護特性,由其產生的偽隨機序列實現單片機/DSP系統和計算機應用程序的加密,具有簡單方便,解密難度大的特點,同樣可用PLD器件實現更複雜的加密方法如 EDS。

   1 硬體加密的PLD實現原理

    硬體加密必須綜合考慮加密方法的可行性、有效性、硬體複雜度等因素,由邏輯電路產生大量密碼的一種簡單有效的方法是使用線性反饋移位寄存器,其產生的偽隨機數據已廣泛用於數據通信中的加擾、擴頻、跳頻和數據加密。圖1所示是具有防跟蹤、產生2N-1個N 位偽隨機數據的加密電路原理框圖,密碼生成所用觸發器和門電路少,並且密碼是加電后動態產生的,不同的預置產生的數據不同,因此密碼的強度、隱蔽性優於加密狗和微狗(卡)。

    N位移位寄存器產生的偽隨機碼作為讀取的密碼或輸入數據解密的密鑰,在移位時鐘的作用下,可輸出2N-1個N位的有效密碼或密鑰。對某一具體電路,移位寄存器初值不同時,這2N-1個隨機數有2N-1 種排序,可預置偽隨機數產生器的原理電路如圖2所示。要使移位寄存器產生一確定的值,首先置其初值,然後置移位計數器初值並允許時鐘電路產生移位時鐘;當移位計數器計滿時,產生一個數據準備好狀態可供軟體讀取,該狀態同時阻斷時鐘電路,停止移位操作,並且啟動防跟蹤記數器的時鐘產生電路;若在規定的時間內讀取密碼字或者寫入待解密數將清零防跟蹤記數器,否則超時使防跟蹤記數器滿導致觸發器翻轉,打開三態門,擾亂輸出數據,雖然這時讀/寫數據能清零防跟蹤記數器,阻斷其時鐘,但必須重加電或系統複位才能斷開三態門。

    對加密電路的正確操作步驟是:在主程序中預置移位計數器和移位寄存器初值,在子程序的一處判斷移位是否完成,另一處讀密碼或寫待解密數,在另一子程序判斷或取解密數據,以防止跟蹤。

    為在使用較少觸發器情況下保證程序正常運行並能有效地防止解密跟蹤,應恰當地選擇防跟蹤計數器的時鐘,若用移位寄存器時鐘源,則需要較高的分頻才能滿足高速的數據產生、適當的延時時間;因此在實際使用中,應根據需要,選擇系統可能提供的低頻持續脈衝信號作為防跟蹤計數器的時鐘。在微機系統中,尤其在 WINDOWS操作系統的分時事件驅動運行模式下,由於系統固有的存儲器刷新、時鐘中斷,以及運行中硬體中斷、DMA操作、任務切換,必須有較長的防跟蹤延時才能保證合法程序正常運行,要注意在軟硬碟操作時對密碼數據操作的影響。

    2 應用舉例

    2.1 并行口加密電路

    在PC機系統中,一般印表機并行介面包括單向輸出的8條數據線D0~D7和四條控制線、5條狀態輸入線,因此每次讀操作只讀取4bits密碼,其加密電路原理框圖如圖3所示。由於并行口不提供電源,將聯機控制信號SLCT置高提供的電流很小,因此直接掛在并行口上的電路必須選用規模不大的低功耗器件。

    經并行口控制移位寄存器產生密碼的基本操作步驟是:(1)SLCT置高加電;(2)STROBE觸發經D0~D8寫入16位控制字,選通加密電路,否則列印口正常;(3)初始化信號INIT置低,STROBE選擇預置移位寄存器和移位計數器;(4)INIT置高選通移位時鐘;(5)檢測數據是否準備好;(6)換行控制AUTO LF置高,在STROBE脈衝作用下數據按4bits輸出供CPU讀取;(7)SLCT置低斷電。

    防跟蹤記數器由移位計數器滿狀態啟動,其溢出脈衝使觸發器翻轉選通三態門,擾亂輸出數據。防跟蹤記數器和移位寄存器時鐘可由門電路構成的RC振蕩器產生。

    2.2 ISA匯流排加密電路

    與并行口方式相比,通過匯流排方式對加密電路的移位寄存器和移位記數器的預置、輸入數據的異或解密等操作更靈活、方便,並可與其它電路結合,其原理框圖與圖1相似。匯流排介面電路對埠地址和控制信號解碼,產生移位寄存器和移位記數器輸入寫、移位寄存器及異或解密輸出讀信號,讀信號清零防跟蹤記數器並阻斷其時鐘。在ISA匯流排介面中,移位寄存器時鐘用OSC或匯流排時鐘BCLK,而防跟蹤記數器時鐘可採用移位時鐘或狀態持續變化的匯流排控制信號及狀態信號,如:地址鎖存信號BALE、刷新指示信號REFRESH、DMA操作允許信號AEN(因用於I/O地址解碼,隱蔽性好)等,用REFRESH信號時計數器規模小、運行可靠,但是切斷該信號防跟蹤功能不起作用,密碼數據仍正常產生。

    2.3 單片機/ DSP系統程序加密電路

    早期的單片機系統大都用擴展EPROM作為程序存儲器,這種方式目前在高速單片機/DSP中仍然很常用。對於程序量小,不需外部程序定址的簡單系統(如微狗),採用內置EPROM/FLASH RAM、帶加密控制字的MCU(如GMS97C2051)本身就能可靠地保護程序;因此我們的討論只限於用擴展程序存儲器的系統。

    對擴展程序存儲器的加密保護可通過對其數據和地址線的異或/取反擾亂來實現,其目的都是不能直接獲取程序存儲器內部保存的數據。由於X=X++K,X=X,因此在系統工作時由硬體實現代碼和密鑰的異或/取反操作可得到正確的程序(文獻[2]中用二級異或提高加密強度的觀點不正確,因為Y=X+K1+K2=X+K),其原理如圖4所示。通常單片機加密的方式是密鑰固定不變,或CPU讀取程序代碼的同時,從另一片EPROM讀取密碼,使每一代碼對應一密鑰。這兩種方式的解密只需用簡單的組合邏輯電路,對前一種方式,用邏輯分析法很容易求解邏輯關係而解密,后一種方法進行邏輯分析的工作量雖然大大提高,但密鑰本身容易被直接獲取。因此我們用m序列產生器動態產生密鑰,將解密的組合邏輯電路與時序邏輯相結合,而較複雜時序邏輯的分析是很困難的。

    對8031、MC6085兼容系列的單片機系統,編程使開始的一段初始化程序順序執行,系統複位時自動對移位寄存器設初值,複位后程序存儲器的讀信號同時作為移位時鐘,使每條指令的密鑰不斷變化;在第一次執行循環、跳轉指令前,程序發控制字阻斷移位時鐘,使以後的程序密鑰相同。在高速DSP系統中,一般上電后將低速EPROM中的程序載入到高速SRAM中運行,可使EPROM的讀控制信號一直作為移位時鐘,使密鑰不斷變化;如果用串列口方式載入,程序解密操作與數據通信中的數據解擾相同,數據輸出時鐘直接作為移位時鐘。單片機/DSP作為微機系統的協處理器時,單片機/DSP的代碼一般經匯流排裝載,可將加密代碼與移位寄存器輸出的密鑰異或解密,輸出到單片機/DSP的程序RAM。

    系統運行時,用於MCU/DSP程序保護的防跟蹤計數器時鐘一直有效,這樣可以防止模擬器的跟蹤。防跟蹤計數器要用程序讀或其相關信號清零,有的DSP從內部RAM運行程序時,程序讀無相應輸出信號,這時可用定時器中斷或程序中及時插入的代碼來清零。

    上述介紹應用移位寄存器產生偽隨機數據對程序進行加密的一些方法,曾在我們設計的系統中得到驗證,整個電路的設計不複雜,佔用PLD 器件的資源不多,完全可結合在系統的硬體邏輯設計中。使用8/16位的移位寄存器時,密鑰量有限,制約了加密的複雜度,使用者應根據設計要求和自己的經驗,引入各種非常規的操作方式,這樣就可以用簡單的硬體電路,很好地實現軟體和系統的保護。


[admin via 研發互助社區 ] 偽隨機序列及PLD實現在程序和系統加密中的應用已經有2112次圍觀

http://cocdig.com/docs/show-post-45145.html