在ARM微处理器上实现Rijndael加密算法 - 嵌入式处理器 -
引 言
2000年10月2日,美国国家标准局NIST宣布,比利时密码学家Joat Daemen和Vincent Rijmen设计的“RijndaeI算法”以安全性好、运算速度快、存储要求低、灵活性强最终当选AES。该算法对目前的各种威胁是免疫的。这标志着信息技术有了新的安全工具,为计算机网络和电子商务的发展提供了强有力的保障。
在当前数字信息技术和网络技术高速发展的后PC时代,嵌入式系统技术已经广泛地渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术以及人们的日常生活等方方面面中,成为目前最热门的技术之一。
本文使用北京博创兴业科技有限公司研制的UP-NETARM300嵌入式开发板,在ARM SDT 2.51集成开发环境下,建立基于μC/OS-Il操作系统的工程文件,分别调用ARM汇编程序和C程序在嵌入式微处理器上实现了Rijndael算法,并比较了两者的效率。下面以分组长度和密钥长度都是128位为例,介绍调用ARM汇编程序实现加密算法的过程。本实现算法可以将密钥长度扩展
到192位或256位。
1 Rijndael加密算法简介
1.1 算法流程结构
Rijndael加密算法的128位输入分组用以字节为单位的正方形矩阵描述。该数组被复制到State数组。加密过程分为四个阶段:密钥扩展、轮密钥加、Nr-1(对应128、192、256位密钥长度,Nr分别为10、12、14)轮变换及最后一轮变换。轮变换包括字节代换、行移位、列混淆和轮密钥加四个过程,最后一轮变换包括字节代换、行移位和轮密钥加三个过程。用伪C代码表示如下:
Rijndael (State, CipherKey) {
KeyExpansion (CipherKey, ExpandKey); //密钥扩展
AddRoundKey (State, RoundKey); //轮密钥加
For (i=1;i
mov r8,r3,lsl #2
add r8,r8,r4
and r9,r6,#1
cmp r9,#1 ;判断CoefMix[i,k]的最低位是否为1
bne notequal ;若不为1,转向执行
ldrb r9,[r2,r8] ;若为1,则Temp[i,j)+=State[k,j]
eor r9,r9,r7
strb r9,[r2,r8]
notequal
mov r6,r6,lsr #1 ;CoefMix[i,k]逻辑右移1位
and r9,r7,#0x80
mov r7,r7,lsl #1 ;State[k,j]逻辑左移1位
and r7,r7,#0xff
cmp r9,#0x80 ;移位后State[k,j]最高位是否为1
blt littlethan ;如不为1,转向执行
eor r7,r7,#0xlb ;如为1,则State[k,j]与#0xlb异或littlethan
cmp r6,#0 ;CoefMix[i,k]与0比较
bgt loop_temp ;如大于0,转到标号loop_temp处执行,否则读取CoefMix[i,k+1]
add r5,r5,#1
cmp r5,#4
blt loop_k ;执行k循环
add r4,r4,#1
cmp r4,#4
blt loop_j ;执行j循环
add r3,r3,#1
cmp r3,#4
blt loop_I ;执行i循环
mov r3,#0
renew ;用Temp更新State
ldrb r4,[r2,r3]
strb r4[r0,r3]
add r3,r3,#1
cmp r3,#16
blt renew
MixColumnend
mov pc,lr ;子程序返回
3 Rijndael加密算法实现效率比较
在调用ARM汇编程序实现Rijndael加密算法之余,还在嵌入式微处理器ARM上通过调用C子程序实现了Rijndael算法,同样获得了正确结果。表1、表2是两种实现方式的空间与时间效率比较。
由表1知,ARM子程序比C子程序所占用的空间明显小得多,前者仅为后者的55%。由表2,运行一次ARM汇编程序Rijndael.s程序完成加密算法,仅需约0.657 tick(此处,1000 tick=1s),而运行一次c子程序约需0.996 tick,比前者增加了52%。
结语
高级加密标准Rijndael算法在嵌入式微处理器ARM上的实现具有一定的实用价值。经University of Califor-nia,San Diego在因特网上提供的测试程序Interactive Ri-jndael Test Vectors in JavaScript验证,本实现算法是正确的。
查看评论 回复