摘 要: 討論了用偽隨機序列實現程序加密保護及其可編程邏輯器件實現的原理、方法和具體操作,給出了在微機軟件和單片機/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+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位的移位寄存器時,密鑰量有限,制約了加密的復雜度,使用者應根據設計要求和自己的經驗,引入各種非常規的操作方式,這樣就可以用簡單的硬件電路,很好地實現軟件和系統的保護。
- 偽隨機序(5146)
相關推薦
PLD/FPGA的分類和使用有哪些?
PLD/可編程邏輯器件的入門知識
PLD在消費電子領域的應用
PLD在消費電子領域的應用
PLD在消費電子領域的挑戰
PLD的應用
加密芯片
隨機函數不是很隨機
AES 256加密認證芯片介紹 帶加密認證功能的EEPROM
FPGA電路實現:m序列及應用
GPS數據加密系統的DES IP怎么實現?
M487芯片CRYPTO模塊中對稱加密AES功能測試方案
MATLAB中計算方式生成隨機序列
MM32 MCU加密方法
PIC16F628A中的隨機輸出
PSoC 3偽隨機序列PRC問題
PSoC 4 偽隨機序列 (PRS)
Quartus VHDL程序問題
[Mill]FPGA無線通信課程連載——擾碼的原理及實現
[求助] 將設計的偽隨機碼發生器組合成整體進行調用
[求助]基于FPGA的偽隨機碼發生器的設計與實現
keil-O2優化時系統自帶的偽隨機數會導致死機
stm32偽隨機的使用
【LinkIt 7687試用體驗】8.加密算法中真隨機數的產生方法
【NUCLEO-F412ZG試用體驗】之硬件隨機數。
【assingle分享】labview隨機數發生器
【原創】基于FPGA的M序列發生器設計
【總結】LabVIEW隨機數發生器
【鋯石A4 FPGA試用體驗】——小炮與鋯石A4的故事(11)——基于FPGA的m序列發生器
一種基于FPGA的真隨機數發生器設計與實現
一種基于混沌和小波變換的大容量音頻信息隱藏算法
利用DSP系統實現多路測量信號擴頻傳輸實現
基于FPGA技術的Logistic映射PN序列
基于FPGA的擴頻系統設計(附代碼)
如何實現FPGA滑動相關法偽碼捕獲?
學習筆記 | 基于FPGA的偽隨機數發生器(附代碼)
定制化加密芯片優勢和產品特點
定制型加密芯片這是一款采用隨機變量交換系統的認證加密芯片,請問定制化加密芯片優勢在哪里?
擴頻通信系統的分類及原理
無線通信中的擾碼
有誰知道控制PRS偽隨機序列模塊嗎?
求教?。abVIEW怎樣數據的隨機化
真隨機數發生器在信息安全系統中的應用
通過USBN9603/P89C51平臺實現USB接口硬件加密
采用PLD實現視頻接口設計
高安全、高性能、高性價比 加密芯片 分享
高安全、高性能、高性價比 加密芯片 分享
偽隨機系列及編碼.ppt

一種基于隨機序列的RFID安全協議

用單片機實現SRAM工藝FPGA的加密應用

CDMA偽隨機碼

基于隨機碼數列的文件加密算法的實現

基于混沌序列密碼的網絡信息加密系統

Galileo系統偽隨機序列生成及其FPGA實現

基于PLD及FPGA的頻率與相位測量系統設計與實現

基于過擬合神經網絡的混沌偽隨機序列

彩色圖像的雙隨機相位加密隱藏技術

基于DSP的任意長度偽隨機序列產生方法

一種混沌偽隨機序列發生器的FPGA實現

M序列偽隨機碼在測距回答概率控制中的應用


M序列偽隨機碼在測距回答概率控制中的應用


偽隨機序列及PLD實現在程序和系統加密中的應用


FPGA的偽隨機序列發生器設計


基于DSP的任意長度偽隨機序列產生方法


Lorenz系統混沌加密算法研究

一類序列信號檢測器的實現方案

基于TDERCS偽隨機序列發生器的FPGA設計與實現

基于計算全息的菲涅爾雙隨機相位加密技術

基于Altera的DSP Builder工具箱的偽隨機序列產生器設計方法

用FPGA硬件實現多路偽隨機序列應用適應光學SPGD控制算法設計


混沌動態隨機分組與隨機調制FRFT旋轉因子

Logistic方程混沌信號加密實現

基于SPGD控制算法自適應光學系統的偽隨機序列的設計與要求


如何設計一個用于數字圖像加密的序列密碼算法

基于SRAM的可重配置電路PLD


基于偽隨機序列的噪音干擾FPGA實現

如何使用FPGA實現偽隨機數發生器

評論