基于easyARM615的AES算法实现
【摘要】随着高性能、低功耗的嵌入式系统的广泛应用,具有安全保密功能的嵌入式产品将占有较大市场。本文围绕基于ARM615的AES算法设计实现,研究了AES的整体架构、设计原则、算法描述,并设计了具体的测试系统,利用RS232通讯实现PC机与ARM615系统的接口通信,通过调用相对独立的加解密模块实现数据的加解密运算,并实现了与PC机加解密结果的对比。
【关键词】AES算法;ARM615;加密
1引言
随着计算机通信技术的飞速发展以及互联网的应用,人们对信息安全的要求也越来越高,信息安全已成了当今尤为重要且需迫切解决的问题。经过几十年的发展,目前保障信息安全的手段日趋多样化,包括信息加密、数字签名、用户最小化权限、入侵检测、防火墙等,其中比较常用的还是信息加密。
2AES算法原理
AES算法作为美国国家标准与技术研究院(NIST)甄选发布取代DES的新一代加密标准。它采用对称分组密码体制,数据块长度和密钥长度都可变,与DES的Feistel结构不同,其轮函数采用替代/置换(SP)网络的迭代结构,由非线性层(字节替代),线性混合层(行移动、列混合),密钥加层(密钥加)组成,加解密结构呈对称性。其128比特密钥的加密安全性,比DES的56比特密钥强10倍。
通常取明密文的分组长度为128比特,密钥的长度可为128、192或256比特,一般用Nk=4、6、8代表密钥的字数(1字=32比特),在本设计中选用Nk=4,即密钥长度为128比特。为保证算法的安全,加密轮数Nr与密钥长度Nk关系密切,其间关系如表1所示,由此可知Nk=4时,Nr为10。
AES加/解密包括密钥扩展(KeyExpansion)、初始轮(InitialRound)、重复轮(Rounds)、最终轮(FinalRound)。重复轮分别包括字节替代(SubBytes)、行移动(ShiftRows)、列混合(MixColumns)、密钥加(AddRoundKey),最终轮没有列混合。其流程如图1所示。
3AES算法实现
事实证明,目前只存在攻击7轮的AES-128和AES-192算法,这里对Nk=4、Nr=10的AES-128算法进行实现。
3.1密钥扩展
密钥扩展将128bit的外部密钥(又称初始密钥)扩展成更长的比特串,再划成多个128比特的分组作为子密钥,即K0、K1、K2、K3、K4、K5、K6、K7、K8、K9、K10,以完成各轮的密钥加,其中K0是外部密钥本身。密钥扩展有同步和异步两种方式,这里采用异步方式,即在加密前进行密钥扩展准备好10轮子密钥。下面以子密钥K0生成子密钥K1为例,介绍密钥扩展过程。
将K0的后4个字节A30~A33取出,暂存到temp.decimal[4]中。调用子函数Twfour(),将temp.decimal[4]循环左移1字节,然后通过S盒替代,运算结果的首字节temp.decimal[0]与当前轮常数RC异或,再将此4字节与A00~A03按位异或,即得到K1的首4字节B00~B03。而B10~B13=B00~B03A10~A13,B20~B23=B10~B13A20~A23,B30~B33=B20~B23A30~A33。
轮常数RC值与加密轮数Nr间的关系如表2所示。
3.2重复轮加密
重复轮加密即为9次迭代的一个单轮运算,完整的重复轮包括字节替代(SubBytes)、行移动(ShiftRows)、列混合(MixColumns)、密钥加(AddRoundKey)四步操作。
字节替代是关于字节的非线性可逆变换。将有限域GF(28)=X8+X4+X3+X+1上仿射变换所有的可能结果排成一个S盒(S盒的具体内容参见文献4),该替代规模为16×16=256个字节。在分组密码算法,S盒的密码强度直接决定了密码算法的好坏。代码实现中,可将状态矩阵data.hex[4][4][2]各个字节转换为0~15十进制,作为S盒索引she.ray[4][4][2]的行列值,进行二元域上的映射,结果重组即得data.hex[4][4][2]矩阵。下面是替代过程:
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
{m=int(data.hex[i][j][0]);
n=int(data.hex[i][j][1]);
if(m<='9')m-=48;elsem-=87;
if(n<='9')n-=48;elsen-=87;
data.hex[i][j][0]=she.ray[m][n][0];
data.hex[i][j][1]=she.ray[m][n][1];}
}
行移动是指4*4=16字节的data.decimal[4][4]矩阵,0~3各行各字依次左移0~3字节,循环判断当前行数,借助临时变量temp,互换元素位置即可。
列混合是将data.decimal[4][4]与列混合矩阵M(如图3)进行矩阵乘,将矩阵各行看成有限域上的多项式:b7X7+b6X6+b5X5+b4X4+b3X3+b2X2+b1X1+b,结果采用模X8+X4+X3+X+1的模乘同余规则,实际包含了64次"异或",16次"与"操作,使用多个循环嵌套可以完成每对字的异或运算。data.decimal[4][4]与M异或之前,首先暂存到c1[4][4]。由于M的元素只有三种,若用log_01(c1)表示c1^01,则c1=log_01(c1),log_03(c1)=c1^log_02(c1),所以关键要实现的是log_02(c1)运算。在有限域GF(28)上,左移1位表示"^2"运算,所以c2=log_02(c1)用C语言表达如下:if(c1<80)c2=c1<<1;elsec2=c1<<1^11b;下面M矩阵第二列"01020301"乘c1[4][4]矩阵为例:
for(j=0;j<4;j++)
{c2[0][j]=c1[0][j];
c2[1][j]=log_02(c1[1][j]);
c2[2][j]=log_03(c1[2][j]);
c2[3][j]=c1[3][j];
for(i=0;i<4;i++)data.decimal[k][j]=c2[i][j]^data.decimal[k][j];}
将列混合的结果矩阵data.decimal[4][4]与当前轮子密钥key.now[4][4]按位异或进行密钥加运算,所得结果作为下一重复轮的输入。
3.3AES加解密对称设计
如图1所示,AES加解密过程具有对称性。在加密实现中,初始轮(InitialRound)只是密钥加操作,最终轮(FinalRound)不包含列混合。当Nk=4时共需加密10轮,用data.decimal[4][4]表示明文,key.decimal[4][4]表示密钥,L为轮数。调用ExpandedKey(),生成K1~K10轮子密钥,外部密钥即为初始轮密钥K0,然后进入Aes_perEncry(),针对128bit分组的10轮加密过程:
InitialRound:L=0时,明文与K0进行密钥加操作。
Rounds:L=1~9时,获得当前子密钥key.now[4][4]=key.decimal[(ll+1)*4][4],并循环以下操作SubBytes()、ShiftRows()、MixColumns()、AddRoundKey()。
FinalRound:L=10时,在重复轮循环中实现,通过if(L<11)MixColumns(),使得最终轮剔除列混合操作。
AES解密的实现过程与加密实现过程的不同主要体现在单轮加密中:(1)字节替代使用逆S盒,通过自我替换生成为S盒的逆she.Invray[4][4][2];(2)行移动方向取反,左移改为右移;(3)列混合用于"乘"的矩阵,需在有限域上模逆;(4)密钥扩展获得的子密钥反序成K10、K9、K8…………K0,应用于0~10轮。
4算法功能测试
为进行算法功能的测试,按照图5所示数据传输流程搭建测试验证系统,算法数据来自上位机的应用软件,AES算法的加解密功能在easyARM615芯片上实现,ARM615与上位机间通过串口进行通信,数据的打包分组由上位机软件完成,数据包的结构如表3所示。
表3
其中最低位D0为加解密模式位,当D0=1时,表示加密,D0=0时,表示解密;数据长度LONG表示要进行加解密运算的数据的长度,单位为字节;密钥固定为128bit,数据最小长度为128比特,不足128比特补0。由此可知,ARM615接收的最小长度为1+16+16=33字节,串口通信采用中断接收、轮询发送的数据传输方式。
ARM615控制器通过中断方式接收数据,接收数据长度由接收到的第一个字节中的数据长度LONG决定,并将接收数据赋值给临时数组alldata[i],继而将数组alldata[i]拆分获得加/解密模式、密钥、数据三项信息,进行AES加/解密。最后通过RS232回送密/明文给上位机应用程序。easyARM615上的程序流程如图6所示。
测试结果如表4所示,加解密结果正确,且与PC下的AES算法实现的结果进行了对比,结果一致。
5结束语
随着高性能、低功耗的嵌入式系统的广泛应用,带有安全保密功能的嵌入式系统产品将占有较大市场。本设计将AES加密算法和ARM615处理器相结合,充分体现了两者的优越性,在低制作成本条件下,提高了系统的安全性和运算速度,其实现具有一定的应用价值。
参考文献
[1]李晖,李丽香,邵帅.对称密码学及其应用.北京邮电大学出版社,2009年04月.
[2]吴小博.AES加密算法分析与C++编程实现.计算机安全,2007年12月.
[3]何明星,林昊.AES算法原理及其实现.2002年5月.
[4]金丽.基于ARM嵌入式系统的AES加密算法实现.科技信息,2010年12期.
[5]周立功.ARMCortex-M3开发指南.广州致远电子有限公司.2006年.
作者简介:
李莉(1974-),女,汉族,山东青岛人,硕士研究生,副教授,主要从事嵌入式系统及信息安全的研究。
(www.fabiaoba.com),是一个专门从事期刊推广期刊发表、投稿辅导、发表期刊的网站。
本站提供如何投稿辅导、发表期刊,寻求论文刊登合作,快速投稿辅导,投稿辅导格式指导等解决方案:省级论文刊登/国家级论文刊登/
CSSCI核心/医学投稿辅导/职称投稿辅导。
投稿邮箱:fabiaoba365@126.com
在线咨询:
275774677、
1003180928
在线咨询:
610071587、
1003160816
联系电话:13775259981