APP下载

CAN总线通信中的改进AES加密算法设计

2018-07-11,,

单片机与嵌入式系统应用 2018年7期
关键词:密匙加密算法字节

,,

(火箭军工程大学 基础部,西安 710025)

引 言

某控制系统各节点间通过CAN总线互连通信,而在CAN的协议规范中只对物理层和数据链路层做了明确的规定,其应用层协议用户可自行根据具体的应用系统自主定义[1]。为了保证总线在通信过程中的安全性,在应用层协议里进行了数据加密,并采用了改进的AES加密算法。AES加密算法是1998年由Rijndael提出,其安全性目前仍在深入研究与讨论中,但普遍认为其具有良好的安全性。本文对AES加密算法进行了改进,且只改进了其非线性部分S-Box的构造,其余线性变换的结构并未改变。S-Box是一个预先计算好的字节替换表,因此算法的执行时间不会有所改变,不存在参考文献[2]提出的由于改进算法而导致影响通信效率的问题。本文通过对比改进前后的AES加密算法的仿射变换对周期、代数表达式项数、严格雪崩距离等各项指标来说明算法的安全性,并通过实验验证了可行性。

1 AES加密算法原理

1.1 算法基本结构

AES加密算法为分组密码,分组长度为128位即16个字节,密匙长度有128、192或256位,根据密匙长度的不同,加密的轮数也不同,本文采用长度为128位的密匙,加密轮数为10轮。AES加密算法不仅编码紧凑、设计简单而且可抵抗多种类型的攻击,其基本结构包括4个部分。

(1)字节替换(SubBytes)

字节替换也就是通过S-Box对字节元素进行非线性的变换,S-Box由有限域GF(28)上的乘法求逆运算和仿射变换运算而来,通过查表的方式即可直接得到变换前后的字节元素,替换后字节元素至少有两位发生变换,能充分打乱原来的字节元素,本文所介绍的AES加密算法就是对S-Box进行改进而来。具体替换规则为假设一字节为xy,则S-Box中第x行第y列所对应的元素就是替换后的元素。

(2)行位移(ShiftRows)

行位移是AES加密算法中的一个简单线性运算,即在4×4的状态矩阵中,把第i行循环左移i个字节(i=0,1,2,3)。

(3)列混合(MixColumns)

列混合是将状态矩阵中的每一列看成一个多项式,让其与一个固定的多项式a(x)相乘,再做模多项式m(x)=x4+1的运算,其中a(x)=03x3+01x2+01x+02。

(4)轮密匙加(AddRoundKey)

轮密匙加变换就是让状态矩阵与经过密匙扩展得到的子密匙做异或运算,因此轮密匙加变换的逆变换就是其本身,其中子密匙是原始密匙通过密匙扩展算法得到的。

1.2 算法的流程

AES加密算法先将128位的明文进行分组,得到一个4×4的明文状态矩阵作为算法的输入,然后选取密匙矩阵先对明文状态矩阵做一次轮密匙加变换,再经过10轮的轮函数加密,轮函数操作依次为字节替换、行位移、列混合和轮密匙加,其中由于最后一轮的列混合不仅不会提高安全性,反而会拉低算法运算速度,故该轮丢弃列混合变换。解密算法仍为10轮,由于算法的4个轮操作均为可逆变换,因此解密过程就是用与加密过程同样的密匙对每一轮的加密操作进行逆运算。算法的流程图如图1所示,其代码实现如下:

void aes(char *p, int plen, char *key){

int keylen = strlen(key);

int pArray[4][4];

int k,i;

… …

extendKey(key);//扩展密钥

for(k = 0; k < plen; k += 16) {

convertToIntArray(p + k, pArray);

addRoundKey(pArray, 0);

//第一次轮密钥加

for(i = 1; i < 10; i++){

subBytes(pArray);//字节代换

shiftRows(pArray);//行移位

mixColumns(pArray);//列混合

addRoundKey(pArray, i);//轮密匙加

}

subBytes(pArray);//字节代换

shiftRows(pArray);//行移位

addRoundKey(pArray, 10);//轮密匙加

convertArrayToStr(pArray, p + k);

}

}

图1 AES加密算法流程图

2 S-Box构造原理及性质

S-Box作为AES加密算法中唯一的非线性部分,是一个作用于状态字节的非线性变换,对于128位的明文加密,一次加密过程就要用到S-Box 160次[3],因此其构造对算法的安全性起关键性作用。S-Box的构造由两个可逆的复合变换而成,即先在有限域GF(28)上求乘法逆元变换,其中00没有乘法逆元,规定其变换后依然是00,再在GF(2)上做仿射变换运算。参考文献[4]给出了S-Box的代数表达式只有9项:S(x)=05x254+09x253+f9x251+25x247+f4x239+01x223+b5x191+8fx127+63。

(1)定义1

(2)定义2

(3)定义3

迭代输出周期[6]:从其中一元素开始对S-Box做连续替换直到回到该元素所经过的元素数。S-Box具有5个迭代输出周期且均小于88,分别是87、81、59、27、2,其短周期现象给密码分析提供了可能性,增大迭代输出周期有利于提高算法的安全性。

(4)定义4

(5)定义5

(6)定义6

非线性度[6]:设F(x)=(f1(x),…,fn(x))是GF(2)n到GF(2)n的多输出布尔置换,则称

(7)定义7

抗代数攻击阻力[7]:在有限域GF(28)上有t项的r个方程,定义Γ为S-Box的抗代数攻击阻力,有Γ=((t-r)/n)[(t-r)/n],对于AES加密算法中的S-Box,参考文献[6]给出t=81,r=23,n=8,带入上式可得Γ≈222.9。该指标主要与求乘法逆元运算有关,因此对于改进后的S-Box抗代数攻击阻力仍为Γ≈222.9。

(8)定义8

雪崩效应[8]:设F(x)=(f1(x),…,fn(x))是GF(2)n到GF(2)n的多输出布尔置换,若对任意的α∈GF(2)n且W(α)=1,即α的汉明重量为1时,有w(fi(x+a)+fi(x))=2n-1(1≤i≤n),则称F(x)满足严格的雪崩准则SAC,称

3 改进的AES加密算法及性能分析

3.1 改进方法

改进的AES加密算法主要是对S-Box进行重构,通过上述对S-Box的代数性质分析,增大仿射变换周期和迭代输出周期有利于提高算法的安全性,且S-Box的代数表达式项数较少只有9项,代数复杂度低则算法抵御代数攻击性能弱。笔者通过大量的对比试验发现,S-Box的代数表达式项数与构造S-Box的求乘法逆元素运算和仿射变换运算的顺序有关,且为满足S-Box和逆S-Box均具有较复杂的代数多项式,可多做一次仿射变换运算,因此重构的S-Box可先对字节元素做仿射变换运算,再求乘法逆元素运算,最后再做一次仿射变换运算。而仿射变换周期和迭代输出周期与仿射变换对的选取有关,根据定义2得到仿射变换周期为16的仿射变换对共有8 192对,按照新S-Box的构造原理选出其中91对,使得Lu,v具有唯一一个周期256的置换表,根据定义8分别计算所有仿射变换对的严格雪崩准则距离,得到仿射变换对(79,51)的DSAC(F)最小为372。因此,重构的S-Box具体步骤如下:

① 首先选取仿射变换对(79,51)做仿射变换,运算过程如下

x=L79,51(x)=Lb×x+51=

② 求乘法逆元运算

③ 最后依然用仿射变换对(79,51)再做一次仿射变换L79,51

y=L79,51(x")=Lb×x"+51

表1 改进后的S-Box替换表

表2 改进后的逆S-Box替换表

3.2 性能分析

根据定义4~7,改进后的AES加密算法S-Box在平衡性、差分均匀度、非线性结构和抗代数攻击阻力上均不变。由于重构S-Box时改变了求乘法逆元和仿射变换运算的顺序,并增加了一次仿射变换运算,S-Box的代数复杂度有所提高,S-Box的代数项数由原来的9项增加到255项,而逆S-Box的代数项数也只由原来的255项降到253项。选取仿射变换周期为16的仿射变换对(79,51),使得S-Box的严格雪崩准则距离由432下降到372,具有更好的雪崩效应。改进前后S-Box性能对比如表3所列。

表3 改进前后S-Box性能对比表

4 实验验证

图2 加密算法验证界面

实验首先对改进后的加密算法进行验证,选取明文为{01,02,03,04,…,0f,00},密匙为{2b,7e,15,16;28,ae,d2,a6;ab,f7,15,88;09,cf,4f,3c},用C语言编写程序,并在VC6.0编译环境下运行后得到如图2所示的界面,加密后的密文为{de,0f,43,e7,…,a6,57}。

其次在CAN开发板的通信中进行验证,开发板主控芯片采用稳定性较好的STC89C52RC单片机,CAN控制器和收发器分别为SJA1000和TJA1050,且开发板上有一个4位的数码管可用于显示加密后的数据。将3块CAN开发板以总线型的拓扑结构连成网络,并把CAN_H、CAN_L、VCC、GND端对应相连,其中的一块开发板设为主节点,用于发送数据,其余两块设为从节点,用于接收数据,主节点与USB-CAN转换模块相连,USB-CAN分析仪可以通过USB接口把CAN网络与电脑的上位机软件EmbededDebug v2.0相连,便于数据的采集、处理以及对数据的收发进行实时监控。本实验输入的明文为{01,02,03,04,…,0f,00},得到的密文为{de,0f,43,e7,…,a6,57},在CAN通信实验的程序中只写入加密函数而不进行解密,并让加密后的密文通过数码管显示,由于数码管只有4位,只能显示密文的前4位即{de,0f,43,e7},实验现场图如图3所示。

图3 CAN总线通信实验现场图

由图可以直观看出,数码管在第二位正常显示了数字0f,其余三位是由于在数码管函数中未作定义而随机生成的段选。再把解密函数写入实验程序中,数码管正常显示了发送的数据01,02,03,04,并打开上位机软件EmbededDebug v2.0,可以实时看到数据{01,02,03,04,…,0f,00}进行正常的收发,如图4所示。

图4 上位机软件监控数据图

结 语

猜你喜欢

密匙加密算法字节
No.8 字节跳动将推出独立出口电商APP
6口塘出虾43000斤!产值超100万元,“万亩虾塘”的成功密匙你了解了吗?
嵌入式系统授权密匙的实验与设计
基于SDN 的量子密码通信网络设计与研究*
试论密钥协商协议及其安全性
No.10 “字节跳动手机”要来了?
简谈MC7字节码
基于小波变换和混沌映射的图像加密算法
Hill加密算法的改进
对称加密算法RC5的架构设计与电路实现