基于偽隨機序列的DSP程序運行參數(shù)加密方法

基于偽隨機序列的DSP程序運行參數(shù)加密方法是將MCU傳遞給DSP的參數(shù)進行加密,使運行參數(shù)不會被邏輯分析儀等調(diào)試設(shè)備破譯。該方法在每次通信開始時,由D SP,產(chǎn)生偽隨機種子應(yīng)用于加密,使得同一個參數(shù)在每次通信中傳遞的密文不一樣。這種方法可以保護外部運行參數(shù)較少的DSP程序。

一、單片機與DSP通信加密機制

1、DSP的工作模式和運行參數(shù)

DSP的應(yīng)用系統(tǒng)往往是DSP+MCU的模式,DSP進行大量的、實時性要求比較高的計算,而單片機則負責人機界面,根據(jù)用戶指令控制DSP的運行。為了方便使用,操作越簡單越好,比如把DSP的運行參數(shù)固化成有限的幾種模式,用戶只需根據(jù)自己的需要選擇不同的模式號。例如:選擇模式1時,單片機發(fā)送參數(shù){A=Oxl0,B=Ox13)到DSR選擇模式2時,單片機發(fā)送參數(shù){A =Oxll,B=OY24)到DSP;等等。模式號和參數(shù)形成固定的映射關(guān)系,如果單片機與DSP的通信過程不進行加密,則很容易用邏輯分析儀把各個模式號對應(yīng)的控制數(shù)據(jù)流復(fù)制出來,對通信過程進行模擬,從而實現(xiàn)盜用DSP程序。

2、本文采用的通信加密機制

下面說明單片機和DSP之間的通信過程。

每次通信開始時,單片機向DSP發(fā)送命令,要求DSP發(fā)送一個隨機序列種子。當DSP接收到命令之后,產(chǎn)生一個16位隨機數(shù)作為種子,根據(jù)該種子對自己內(nèi)部的偽隨機序列算法進行初始化,并將該種子作為附加數(shù)據(jù)通過SPI接口回復(fù)給單片機。

反過來,當單片機接收到DSP回復(fù)的種子,則使用該種子對自己內(nèi)部的偽隨機序列算法進行初始化。在后續(xù)命令中,把需要進行傳送的DSP運行參數(shù)用該偽隨機序列進行加密處理,并將加密后的密文發(fā)送給DSP。

DSP接收密文,并對接收到的數(shù)據(jù)進行解密,判斷數(shù)據(jù)無誤后按照所得運行參數(shù)執(zhí)行相應(yīng)的命令。

在通信過程中,一旦發(fā)現(xiàn)解密后數(shù)據(jù)有誤,就需要重新發(fā)送同步隨機種子的命令,再次由DSP產(chǎn)生新的隨機種子并回復(fù)給單片機。

3、DSP與單片機的通信協(xié)議

DSP與單片機之間以“數(shù)據(jù)包”為基礎(chǔ)進行通信,每個數(shù)據(jù)包的格式為:

<Data[0],…Data[n]>

其中,=Ox2466是數(shù)據(jù)包的起始標記,=Ox2413是數(shù)據(jù)包的結(jié)束標記,Data[0,…,n]是數(shù)據(jù)包的內(nèi)容,是數(shù)據(jù)包校驗和。此外,還有一個特殊字= Ox2410,標志著后一個字是數(shù)據(jù)。例如:某數(shù)據(jù)包的內(nèi)容中有{…Ox2410,Ox2410...),則第一個Ox2410是控制符,第二個0x2410是有效數(shù)據(jù),又{…0x2410,Ox2466…)中Ox2466也是數(shù)據(jù)。這樣對數(shù)據(jù)進行打包時,遇到等于srx、ETX、DLE的數(shù)據(jù)要對應(yīng)地在前面加作為標記。整個數(shù)據(jù)包包括< 和)最長為128個16位字(WORD)。

通信時,單片機處于主動地位,每次通信都是由單片機發(fā)出命令,DSP收到后執(zhí)行命令,并向單片機回復(fù)命令執(zhí)行的結(jié)果。

單片機命令格式為:

OCMMAND_CODE | DA TA_LENGTH |DA TA;

DSP回復(fù)的數(shù)據(jù)格式為:

RES.JLT_CODE |DA TA_LENGTH |DA TA;

其中,OCMMAND_OOD E為命令編碼,RES.JLT _OOD E為回復(fù)指令編碼,DATA為命令的附加數(shù)據(jù),DATA-LENGTH是附加數(shù)據(jù)的長度。

數(shù)據(jù)包(Packet)中的數(shù)據(jù)是按照加密算法加密后的數(shù)據(jù),打包和解包過程在數(shù)據(jù)加密后進行,其打包、解包過程如下:

(1)打包過程

Packet[0]=STX;//數(shù)據(jù)包的開始標志

for( i = 0; i < DATA LENGTH; i ++ )

{

if ((Data[i]==srx) || (Data[i] == DLE)

||(Data[i] == ETX))

{

Packet[i++]=DLE

PEcket[i]=Data[i];

}

else

Packet[i1=Data[i]

}

Packet[i]=ETx;

(2)解包過程

if(Pcket[O]==STX)

{//已初始化,i=j=0,數(shù)據(jù)包接收開始

while( Packet[i]!=ETX)

{

if(Packet[i] == DLE)

Data[j] = Packet[ ++ i]

elss

Data[j] = Packet[i];

i++;

j++;

//將特殊字符標記位扔掉

//將需要的字符丟進數(shù)據(jù)包中

i++;

j++;

}

}

二、偽隨機數(shù)算法實現(xiàn)

偽隨機數(shù)并不是假隨機數(shù),這里的“偽”是有規(guī)律的意思,產(chǎn)生的偽隨機數(shù)既是隨機的又是有規(guī)律的。偽隨機數(shù)的生成方法有很多種,如線性同余算法、對數(shù)正態(tài)分布偽隨機數(shù)、中心極限定理正態(tài)偽隨機數(shù)等等。但是以上的算法實現(xiàn)比較復(fù)雜,應(yīng)用于DSP中比較耗資源。本文采用了一種基于位運算的遞推隨機數(shù)生成算法。下面以16位數(shù)據(jù)為例介紹該算法:

基于偽隨機序列的DSP程序運行參數(shù)加密方法

如圖1所示,bi[n](0≤l≤15)表示產(chǎn)生的第穆個隨機數(shù)Value[n]的各個位,用bi[0]表示種子的各個位,則:

基于偽隨機序列的DSP程序運行參數(shù)加密方法

其中0≤i≤12。

該算法得到的偽隨機數(shù)序列是周期性序列,令參與到循環(huán)中的位個數(shù)為word_length如圖1中word_length=14對應(yīng)的偽隨機序列的周期為:

基于偽隨機序列的DSP程序運行參數(shù)加密方法

所得偽隨機數(shù)重復(fù)幾率為1/16383=0.061‰。

這種算法的優(yōu)點如下:

(1)計算簡單只應(yīng)用簡單的位運算,節(jié)省硬件資源。

(2)沒有復(fù)雜的計算不會因為數(shù)據(jù)計算的精度問題而導(dǎo)致偽隨機序列在通信兩端不同步。

(3)算法的靈活性強可以產(chǎn)生任意長度的數(shù)據(jù)作為偽隨機數(shù)。即使是采用相同的數(shù)據(jù)長度,也存在很多種不同的算法,對應(yīng)的word _length也不同,如圖1所示的16位數(shù)據(jù),word _length的范圍是2~16。

(4)偽隨機序列的周期大,數(shù)據(jù)重復(fù)的幾率小若采用64位,使用wotdengrh=64,則M=2r64,重復(fù)幾率幾乎為0。

偽隨機序列應(yīng)用于通信加密過程,其隨機性保證了DSP軟件運行參數(shù)的安全性,其規(guī)律性又保證了加密機制的可行性與同步性。通信雙方彈片機和DSP)只需要進行一次同步種子的通信,之后使用一致的遞推算法,就可以保證每次在各自內(nèi)部所產(chǎn)生的偽隨機數(shù)嚴格同步。仍以16-bit數(shù)據(jù)為例:單片機將要發(fā)送的明文數(shù)據(jù)累加計算明文校驗和,再將明文及其校驗和以WORD為單位,依次用隨機序列中的每一個隨機數(shù)進行加密運算得到密文,發(fā)送給DSPa DSP接收到密文,將其中數(shù)據(jù)以WORD為單位依次用自己產(chǎn)生的偽隨機數(shù)進行解密。由于單片機和DSP之間的偽隨機序列是同步的,所以通過這種運算可以將密文還原為明文。DSP針對還原所得的明文以及校驗和檢驗數(shù)據(jù)的解密翻譯是否正確;正確則按照參數(shù)執(zhí)行相應(yīng)的程序,錯誤則要求單片機重新開始同步隨機種子的操作,整個加密通信過程重試。這樣的加密機制使同樣的參數(shù)值在不同的通信過程中傳遞的密文是不一樣的。

三、偽隨機數(shù)加密效果分析

我們在專業(yè)數(shù)字調(diào)音臺的DSP程序中應(yīng)用了上述基于偽隨機序列的加密方法。在該應(yīng)用中,DSP的運行參數(shù)被固化成99種模式與單片機的99種模式選擇一—對應(yīng)。每種模式的參數(shù)長度是20字節(jié),即單片機和DSP每次通信過程中都需要傳遞20字節(jié)的字符。在截獲DSP序后,復(fù)制者還必須完全知道這99種模式對應(yīng)的參數(shù)值才能用單片機對DSP進行控制。

如果不對通信過程進行加密,則復(fù)制者只需逐一地選擇各種模式,并用邏輯分析儀監(jiān)聽MCU和DSP的通信過程,只需99次監(jiān)聽,共處理99×20 =1980個字節(jié)的數(shù)據(jù)就可以完全分析出每種模式的參數(shù)。

我們采用的偽隨機數(shù)序列,word _length=1 6,產(chǎn)生偽隨機數(shù)的周期M =2^16 -1 =65535,重復(fù)幾率為0.015‰。

由于每次單片機發(fā)送參數(shù)到DSP前,都請求DSP產(chǎn)生一個新的隨機種子。因此,同一個參數(shù)值在不同次通信中的具體數(shù)值和DSP返回的隨機種子有關(guān)。復(fù)制者如果采用窮盡法,則至少需要監(jiān)聽99×65535=6487965次才有可能截獲所有密文。假設(shè)每切換一次模式,并用邏輯分析儀記錄其通信數(shù)據(jù)需要1分鐘,則截獲所有參數(shù)的密文至少需要12年的時間??梢?,通信數(shù)據(jù)加密后增加了復(fù)制者對數(shù)據(jù)流進行分析的難度。可以有效地提高DSP程序的安全性,降低DSP程序被盜用的可能性。

小知識之MCU

MCU(Micro Control Unit)中文名稱為微控制單元,又稱單片微型計算機(Single Chip Microcomputer)或者單片機,是指隨著大規(guī)模集成電路的出現(xiàn)及其發(fā)展,將計算機的CPU、RAM、ROM、定時計數(shù)器和多種I/O接口集成在一片芯片上,形成芯片級的計算機,為不同的應(yīng)用場合做不同組合控制。