装备的试用状态管理和敏感数据保护等方面,数据加密技术的应用越来越广泛。针对嵌入式系统的特点和数据加密需求,给出了一种可应用到嵌入式系统的数据加密算法。

一、数据加密的应用实例

数据加密在嵌入式系统中的应用实例如图1所示。

嵌入式系统中数据加密技术的应用

在该应用中,包括“远程控制端”和“用户端”两个子系统,其中“远程控制端”可以是上级机关,也可以是民用产品的生产、销售单位。在“远程控制端”,根据密钥文件,敏感数据被加密处理后形成密文数据,就可以通过互联网或非涉密人员进行传递。密文数据传送到设备的使用单位后,再由非涉密的使用人员(或民用产品用户)把这些数据输入嵌入式设备。设备根据其存储的密钥数据把密文还原成内部可识别的敏感数据,再进行相应操作,从而最终实现远程控制端对设备的控制;把嵌入式设备中的数据传输到远程控制端的过程与之相反,首先敏感数据由嵌入式设备进行加密处理,再通过互联网或其他非涉密渠道传送到远程控制端,密文数据解密后即可还原成原始数据。

在设备试用状态管理的应用实例中,“远程控制端”密文数据的产生由“远程控制端”密文数据产生程序实现,密文数据的具体功能由数据“任务类型”定义,包括升级到交装状态、延长试用期限、交装状态和试用状态出厂参数设置等4种任务,用户界面如图2所示。

嵌入式系统中数据加密技术的应用

只要操作人员在用户界面上输入设备序列号、用户密码、任务类型等数据,再点击“创建文件”,密文数据即可生成,然后即可把该密文数据文件通过互联网等传递给用户。当用户把该密文数据注入设备时,设备按规定的算法把数据解密后,再判断设备序列号和用户密码是否与设备定义一致,如果一致则执行密文数据定义的任务。通过这样的方法,设备生产厂商即可实现对设备试用状态的远程控制。

二、嵌入式系统数据加密技术的特点

所谓数据加密技术是指将信息(或称明文)经过加密钥匙及加密函数转换,变成无意义的密文,而接收方将此密文经过解密函数、解密钥匙还原成明文的技术。

数据加密技术要求只有在指定的用户或网络下,才能解除密码而获得原来的数据,因此数据发送方和接收方都需要一些特殊的信息用于加解密,这就是所谓的密钥(或加密算法)。密钥分为专用密钥和公开密钥两种。嵌入式系统中用户端的密钥存储在硬件设备中,因数据存储芯片在硬件上设置有加密机制,无法被读取或破译,因此采用专用密钥这种简单的形式即可满足要求。

在嵌入式系统中,“远程控制端”的密钥由远程控制人员掌握,“用户端”的密钥存储在嵌入式系统中,用户无法得到密钥数据,就无法破解密文数据,从而无法擅自设置嵌入式设备中需要保护的工作参数和工作状态。

根据嵌入式系统的特点及加密技术的应用环境,应用到嵌入式系统时,数据加密具有以下几个特点:

(1)加密算法要简单且容易在MCU上实现,占用的字节数要尽可能少;

(2)应具有较高的加密强度。如果用户有多台设备,就有机会获得多套密文数据。由于设备和密文数据都处于用户掌控之下,如果加密强度不够,密文数据将很容易被破解,并被非法应用到其他设备;

(3)加密技术应能识别密文数据是否被非法篡改,以防止用户更改数据后再在设备上试验,进而逐步掌握密文数据的加密规则;

(4)密文数据中应包含设备序列号信息,以防止数据被非法应用到其他设备。

三、数据加密的实现方法

下面介绍的数据加密方法已成功应用蓟某嵌入式设备中。其基本过程是,先把被加密数据通过“置换表”法、数据字节运算等加密算法进行加密处理,再把加密后的数据根据一定的规则随机地插入到一随机数序列中,同时把该数据在数列中的存储地址插入该数列的某规定位置。操作完成后再对该数列采用“置换表”法进行数据置换,并采用循环冗余校验技术分段计算数列的校验和,并把校验和插入数列的规定位置。该方法加密强度高,代码量少,运算量小,随机存储器需求量小,适合应用到嵌入式系统中。

1、数据加密方法

在加密数据前,首先产生一随机数序列X[i],其中i<N,N为数组长度(单位为B),其大小可根据原始数据的数量、加密强度、嵌入式系统的存储和处理能力等综合考虑后确定。

在加密过程中,原始数据通过二次寻址的方式插入随机数列,这样数据在数列中的存储位置可以是随机的,被加密数据的存储地址是相对固定的。数据二次寻址方式原理示意图如图3所示。

嵌入式系统中数据加密技术的应用

图中,每次加密操作时原始数据0x7E的存储位置是随机的,本次加密操作时其存储地址0x01C2存储在0x00D9和0x01D8两个字节中。

假设某数据d在随机数列中的存储位置为md(双字节),地址md为小于N的随机数,md在随机数列中的存储位置为nd'(高字节)和kd'(低字节),则原始数据d可表述为:

嵌入式系统中数据加密技术的应用

为提高加密强度,数据d的存储地址的存储地址nd'和kd'是伪随机的,每次加密操作时,其值将分别在地址空间Jnd±F,Jkd±F的范围内变化,其中,Jnd,Jkd分别为数据d存储地址的高、低字节的存储基地址,F为存储地址最大偏移量。这3个量都是事先定义好的。为简化算法的复杂程度,降低算法对随机存储器的需求,所有原始数据基地址的最大偏移量可以设置成相等。

加密操作时基地址偏移量的具体值,f随机,由随机数列中某些元素通过规定的算法运算得到:

嵌入式系统中数据加密技术的应用

式中:xa,…,xb分别为小于N的固定值;F1表示运算规则。运算规则可以采用求和再取低几位、取反求和等各种规则,但要保证运算结果f随机<F。为简化加密过程,可以在随机数列中规定某段数据专门用于产生基地址偏移量。

考虑到f随机,则式(1)变为:

嵌入式系统中数据加密技术的应用

式中:Jnd,Jkd分别是数据nd'和kd'在随机数列X[i]中的基地址;f随机是本次加密操作的地址偏移量。

另外在把数据写入随机数序列X[i]时被写数据也经过了变换,变换规则可以采用高4位与低4位交换、取非、字/字节循环移位、XOR等各种方法,只要变换后不破坏数据的惟一性即可。设把数据写入随机数序列时的变换规则为F2,对应的反变换表示为F2,则式(3)变为:

嵌入式系统中数据加密技术的应用

由于f随机具有随机特性,则每次加密数据时,数据d写入随机数列的位置md具有随机性、存储md寻址地址的字节位置也具有随机性;这样就保证了系统每次在加密数据时数据地址及数据地址的存储地址都是不相同的,大大增加了破译难度。

综上所述,把数据d插入随机数列的过程是:第1步,产生一随机数序列X[i],其中i<N,N为数组长度;第2步,根据规则F1得到基地址偏移量f随机;第3步,产生一随机数md,其中md<N,并且没有被使用过;第4步,把数据d经过F2规则变换后赋值给X[md];第5步,假设nd'为数据md的高8位,则把nd'经过F2规则变换后赋值给X[Jmd+f随机],其中Jnd是加密算法中数据d存储地址的高字节的存储基地址。第6步,假设kd'为数据md的低8位,则把kd'经过F2规则变换后赋值给X[Jkd+f随机],其中Jkd是加密算法中数据d存储地址的低字节的存储基地址。至此,即完成了一个数据插入随机数列的过程。

根据随机数列得到数据d的过程是:第1步,根据规则F1得到基地址偏移量f随机,第2步,把X[Jnd+f随机]经F2规则变换后赋值给nd';第3步,把X[Jkd+f随机]经F2规则变换后赋值给kd';第4步,X[nd'<<8+kd']经F2规则变换后即得到原始数据d。

2、密文数据防篡改的方法

为防止密文数据被非法更改,采用了经过改进的循环冗余校验技术。即数列X[i]的字节x[M]存储[0,M-1]地址段中所有数据的校验和,x[2M]字节存储[M,2M-1]地址段中所有数据的校验和,…,在解密时首先检查各地址段数据的校验和与“校验和存储字节”的存储值是否相等,即可判断数据是否被非法更改。假设M是被计算的数据段长度,则:

嵌入式系统中数据加密技术的应用

式中:F2代表数据写入随机数列时的变换规则;k=1,2,…,N/M。

通过这种方法,密文数据中的任何字节被非法更改,都可以被检测到。另外被求和的字段长度也可以设置成不相等,数据就更难被破解。

3、数列置换

为进一步提高加密强度,埋入数据后的随机数列X[i]还可经过“置换表”技术进行加密。在该方法中,置换表Z[i]是关键,它是数列[0,1,…,255]中的元素再经过随机排列而得到的。设Z[i]中的数据为x[i],则z[i]具有如下特征:

嵌入式系统中数据加密技术的应用

且m≠n假设[X i]中的数据为[xi]置换后的数据为[yi],则[xi]到[yi]的数据变换操作为:

嵌入式系统中数据加密技术的应用解密过程与上式相关,具体为:

嵌入式系统中数据加密技术的应用

使用两个或更多的“置换表”,在置换操作时按伪随机的方式使用每个袭,可以进一步提高加密强度。但每增加一个置换袭,嵌入式系统程序中就需要增加一个长度为255 B的数组,因此置换表的数量还要根据加密强度需求、嵌入式系统的存储和数据处理能力等因素确定。

小知识之嵌入式系统

嵌入式系统(Embedded system),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电气工程师协会( U.K. Institution of Electrical Engineer)的定义,嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。嵌入式系统通常进行大量生产,所以单个的成本节约,能够随着产量进行成百上千的放大。