用AVR汇编语言实现AES及其优化

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 加密、解密算法的优化

由以上算法的流程中可以清楚地看到,整个算法中程

序耗时最多的就是圈变化部分,因此对于算法的优化也就在此;而圈变化部分可以优化的也就是列变化。因为列变

相关文档
最新文档