基于伪随机序列的DSP程序运行参数加密方法是将MCU传递给DSP的参数进行加密,使运行参数不会被逻辑分析仪等调试设备破译。该方法在每次通信开始时,由D SP,产生伪随机种子应用于加密,使得同一个参数在每次通信中传递的密文不一样。这种方法可以保护外部运行参数较少的DSP程序。

一、单片机与DSP通信加密机制

1、DSP的工作模式和运行参数

DSP的应用系统往往是DSP+MCU的模式,DSP进行大量的、实时性要求比较高的计算,而单片机则负责人机界面,根据用户指令控制DSP的运行。为了方便使用,操作越简单越好,比如把DSP的运行参数固化成有限的几种模式,用户只需根据自己的需要选择不同的模式号。例如:选择模式1时,单片机发送参数{A=Oxl0,B=Ox13)到DSR选择模式2时,单片机发送参数{A =Oxll,B=OY24)到DSP;等等。模式号和参数形成固定的映射关系,如果单片机与DSP的通信过程不进行加密,则很容易用逻辑分析仪把各个模式号对应的控制数据流复制出来,对通信过程进行模拟,从而实现盗用DSP程序。

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

下面说明单片机和DSP之间的通信过程。

每次通信开始时,单片机向DSP发送命令,要求DSP发送一个随机序列种子。当DSP接收到命令之后,产生一个16位随机数作为种子,根据该种子对自己内部的伪随机序列算法进行初始化,并将该种子作为附加数据通过SPI接口回复给单片机。

反过来,当单片机接收到DSP回复的种子,则使用该种子对自己内部的伪随机序列算法进行初始化。在后续命令中,把需要进行传送的DSP运行参数用该伪随机序列进行加密处理,并将加密后的密文发送给DSP。

DSP接收密文,并对接收到的数据进行解密,判断数据无误后按照所得运行参数执行相应的命令。

在通信过程中,一旦发现解密后数据有误,就需要重新发送同步随机种子的命令,再次由DSP产生新的随机种子并回复给单片机。

3、DSP与单片机的通信协议

DSP与单片机之间以“数据包”为基础进行通信,每个数据包的格式为:

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

其中,=Ox2466是数据包的起始标记,=Ox2413是数据包的结束标记,Data[0,…,n]是数据包的内容,是数据包校验和。此外,还有一个特殊字= Ox2410,标志着后一个字是数据。例如:某数据包的内容中有{…Ox2410,Ox2410...),则第一个Ox2410是控制符,第二个0x2410是有效数据,又{…0x2410,Ox2466…)中Ox2466也是数据。这样对数据进行打包时,遇到等于srx、ETX、DLE的数据要对应地在前面加作为标记。整个数据包包括< 和)最长为128个16位字(WORD)。

通信时,单片机处于主动地位,每次通信都是由单片机发出命令,DSP收到后执行命令,并向单片机回复命令执行的结果。

单片机命令格式为:

OCMMAND_CODE | DA TA_LENGTH |DA TA;

DSP回复的数据格式为:

RES.JLT_CODE |DA TA_LENGTH |DA TA;

其中,OCMMAND_OOD E为命令编码,RES.JLT _OOD E为回复指令编码,DATA为命令的附加数据,DATA-LENGTH是附加数据的长度。

数据包(Packet)中的数据是按照加密算法加密后的数据,打包和解包过程在数据加密后进行,其打包、解包过程如下:

(1)打包过程

Packet[0]=STX;//数据包的开始标志

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,数据包接收开始

while( Packet[i]!=ETX)

{

if(Packet[i] == DLE)

Data[j] = Packet[ ++ i]

elss

Data[j] = Packet[i];

i++;

j++;

//将特殊字符标记位扔掉

//将需要的字符丢进数据包中

i++;

j++;

}

}

二、伪随机数算法实现

伪随机数并不是假随机数,这里的“伪”是有规律的意思,产生的伪随机数既是随机的又是有规律的。伪随机数的生成方法有很多种,如线性同余算法、对数正态分布伪随机数、中心极限定理正态伪随机数等等。但是以上的算法实现比较复杂,应用于DSP中比较耗资源。本文采用了一种基于位运算的递推随机数生成算法。下面以16位数据为例介绍该算法:

基于伪随机序列的DSP程序运行参数加密方法

如图1所示,bi[n](0≤l≤15)表示产生的第穆个随机数Value[n]的各个位,用bi[0]表示种子的各个位,则:

基于伪随机序列的DSP程序运行参数加密方法

其中0≤i≤12。

该算法得到的伪随机数序列是周期性序列,令参与到循环中的位个数为word_length如图1中word_length=14对应的伪随机序列的周期为:

基于伪随机序列的DSP程序运行参数加密方法

所得伪随机数重复几率为1/16383=0.061‰。

这种算法的优点如下:

(1)计算简单只应用简单的位运算,节省硬件资源。

(2)没有复杂的计算不会因为数据计算的精度问题而导致伪随机序列在通信两端不同步。

(3)算法的灵活性强可以产生任意长度的数据作为伪随机数。即使是采用相同的数据长度,也存在很多种不同的算法,对应的word _length也不同,如图1所示的16位数据,word _length的范围是2~16。

(4)伪随机序列的周期大,数据重复的几率小若采用64位,使用wotdengrh=64,则M=2r64,重复几率几乎为0。

伪随机序列应用于通信加密过程,其随机性保证了DSP软件运行参数的安全性,其规律性又保证了加密机制的可行性与同步性。通信双方弹片机和DSP)只需要进行一次同步种子的通信,之后使用一致的递推算法,就可以保证每次在各自内部所产生的伪随机数严格同步。仍以16-bit数据为例:单片机将要发送的明文数据累加计算明文校验和,再将明文及其校验和以WORD为单位,依次用随机序列中的每一个随机数进行加密运算得到密文,发送给DSPa DSP接收到密文,将其中数据以WORD为单位依次用自己产生的伪随机数进行解密。由于单片机和DSP之间的伪随机序列是同步的,所以通过这种运算可以将密文还原为明文。DSP针对还原所得的明文以及校验和检验数据的解密翻译是否正确;正确则按照参数执行相应的程序,错误则要求单片机重新开始同步随机种子的操作,整个加密通信过程重试。这样的加密机制使同样的参数值在不同的通信过程中传递的密文是不一样的。

三、伪随机数加密效果分析

我们在专业数字调音台的DSP程序中应用了上述基于伪随机序列的加密方法。在该应用中,DSP的运行参数被固化成99种模式与单片机的99种模式选择一—对应。每种模式的参数长度是20字节,即单片机和DSP每次通信过程中都需要传递20字节的字符。在截获DSP序后,复制者还必须完全知道这99种模式对应的参数值才能用单片机对DSP进行控制。

如果不对通信过程进行加密,则复制者只需逐一地选择各种模式,并用逻辑分析仪监听MCU和DSP的通信过程,只需99次监听,共处理99×20 =1980个字节的数据就可以完全分析出每种模式的参数。

我们采用的伪随机数序列,word _length=1 6,产生伪随机数的周期M =2^16 -1 =65535,重复几率为0.015‰。

由于每次单片机发送参数到DSP前,都请求DSP产生一个新的随机种子。因此,同一个参数值在不同次通信中的具体数值和DSP返回的随机种子有关。复制者如果采用穷尽法,则至少需要监听99×65535=6487965次才有可能截获所有密文。假设每切换一次模式,并用逻辑分析仪记录其通信数据需要1分钟,则截获所有参数的密文至少需要12年的时间。可见,通信数据加密后增加了复制者对数据流进行分析的难度。可以有效地提高DSP程序的安全性,降低DSP程序被盗用的可能性。

小知识之MCU

MCU(Micro Control Unit)中文名称为微控制单元,又称单片微型计算机(Single Chip Microcomputer)或者单片机,是指随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。