用AVR汇编语言实现AES及其优化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
200518
Microcontrollers &Embedded Systems
27
用AV R 汇编语言实现AES 及其优化
※
■西南交通大学 张振权 罗新民 齐春
摘 要
A ES 是美国高级加密标准算法,将在未来几十年里代替DES 在各个领域中得到广泛应用。本文在研究
分析A ES 加密算法原理的基础上,着重说明算法的实现步骤,并结合AVR 汇编语言完整地实现A ES 加
密和解密。根据A ES 原理,提出几种列变化的优化算法,并根据实验结果分析和比较它们的优缺点。
关键词
A ES 算法 DES AVR 汇编语言 加密算法 解密算法
引 言
随着对称密码的发展,DES 数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST 公开征集新的数据加密标准,即A ES
[1]
。经过三轮的筛选,比利时
Joan Daeman 和Vincent Rijmen 提交的Rijndael 算法被提
议为A ES 的最终算法。此算法将成为美国新的数据加密
标准而被广泛应用在各个领域中。尽管人们对A ES 还有不同的看法,但总体来说,A ES 作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。
A ES 设计有三个密钥长度:128,192,256位,相对而言,A ES 的128密钥比DES 的56密钥强1021
倍
[2]
。A ES 算
法主要包括三个方面:轮变化、圈数和密钥扩展。本文以
128为例,介绍算法的基本原理;结合AVR 汇编语言,实
现高级数据加密算法A ES 。
1 AES 加密、解密算法原理和AVR 实现
A ES 是分组密钥,算法输入128位数据,密钥长度也
是128位。用Nr 表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表1所列)。每一轮都需要一个
与输入分组具有相同长度的扩展密钥Expandedkey (i )的参与。由于外部输入的加密密钥K 长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion )把外部密钥
K 扩展成更长的比特串,以生成各轮的加密和解密密钥。
1.1 圈变化
A ES 每一个圈变换由以下三个层组成:
非线性层———进行Subbyte 变换;
线行混合层———进行Shift Row 和MixColumn 运算;密钥加层———进行AddRound Key 运算。
①Subbyte 变换是作用在状态中每个字节上的一种
非线性字节转换,可以通过计算出来的S 盒进行映射。
Schange :
ldi zh ,$01;将指针指向S 盒的首地址mov zl ,r2;将要查找的数据作为指针低地址ld
temp ,z +;取出这个对应的数据mov r2,temp
;交换数据完成查表
…
ret
②Shift Row 是一个字节换位。它将状态中的行按照
不同的偏移量进行循环移位,而这个偏移量也是根据Nb 的不同而选择的[3]。
shiftrow :
;这是一个字节换位的子程序mov temp ,r3;因为是4×4mov r3,r7;r2r6r10r14r2r6r10r14mov r7,r11;r3r7r11r15r7r11r15r3mov r11,r15;r4r8r12r17r12r17r4r8mov r15,temp ;r5r9r13r18
r18r5r9r13
mov temp ,r4mov temp1,r8mov r4,r12mov r8,r17mov r12,temp mov r17,temp1mov temp ,r18mov r18,r13mov r13,r9mov r9,r5mov r5,temp ret
③在MixColumn 变换中,把状态中的每一列看作
GF (28
)上的多项式a (x )与固定多项式c (x )相乘的结果。
28
200518
b (x )=
c (x ) a (x )的系数这样计算: 运算不是普通的乘
法运算,而是特殊的运算,即
b (x )=
c (x )・a (x )(mo
d x 4
+1)
对于这个运算
b 0=02。a 0+03。a 1+a 2+a 3
令xtime (a 0)=02。a 0
其中,符号“。”表示模一个八次不可约多项式的同余乘法[3]。
mov temp ,a0; 这是一个mixcolimn 子程序
rcall xtime ;调用xtime 程序
mov a0,temp mov temp ,a1rcall xtime eor a0,a1eor a0,temp eor a0,a2eor a0,a3
;完成b (x )的计算…
xtime :
;这是一个子程序
ldi temp1,$1b lsl temp brcs next1
;如果最高位是1,则转移next :ret
;否则什么也不变化
next1:eor temp ,temp1
rjmp next
b 0b 1b 2b 3
=
02
0301
010102030101010203
03
01
01
02
a 0a 1a 2a 3
对于逆变化,其矩阵C 要改变成相应的D ,即b (x )=d (x ) a (x )。
④密钥加层运算(addround )是将圈密钥状态中的对应字节按位“异或”。
⑤根据线性变化的性质[1],解密运算是加密变化的逆变化。这里不再详细叙述。
1.2 轮变化
对不同的分组长度,其对应的轮变化次数是不同的,如表1所列。
表1
AES 类型与其参数的关系A ES 类型密钥长度/字分组大小/字轮变化数/次
A ES 1284410A ES 1926412A ES 256
8
4
14
1.3 密钥扩展
A ES 算法利用外部输入密钥K (密钥串的字数为Nk ),通过密钥的扩展程序得到共计4(Nr +1)字的扩展
密钥。它涉及如下三个模块:
①位置变换(rotword )———把一个4字节的序列[A ,B ,C,D]变化成[B ,C,D ,A ];
②S 盒变换(subword )———对一个4字节进行S 盒代替;
③变换Rcon[i ]———Rcon[i ]表示32位比特字[x i -1,00,00,00]。这里的x 是(02),如Rcon[1]=[01000000];Rcon[2]=[02000000];Rcon[3]=[04000000]…… 扩展密钥的生成:扩展密钥的前Nk 个字就是外部密钥K;以后的字W [[i]]等于它前一个字W [[i -1]]与前第N k 个字W [[i -N k]]的“异或”,即W [[i]]=W [[i -1]] W [[i -N k]]。但是若i 为N k 的倍数,则W [i ]=W
[i -N k] Subword (Rotword (W [[i -1]])) Rcon[i/N k ]。
程序执行的时候,主要调用以上几个子程序,具体实现如下:
Keyexpansion :
rcall rotwoed rcall subword rcall Rcon
…
A ES 的加密与解密流程如图1所示。
图1 AES 的加密和解密流程
2 AES 加密、解密算法的优化
由以上算法的流程中可以清楚地看到,整个算法中程
序耗时最多的就是圈变化部分,因此对于算法的优化也就在此;而圈变化部分可以优化的也就是列变化。因为列变