引 言
2000年10月2日,美国国家标准局NIST宣布,比利时密码学家Joat Daemen和Vincent Rijmen设计的“RijndaeI算法”以安全性好、运算速度快、存储要求低、灵活性强最终当选AES。该算法对目前的各种威胁是免疫的。这标志着信息技术有了新的安全工具,为计算机网络和电子商务的发展提供了强有力的保障。
在当前数字信息技术和网络技术高速发展的后PC时代,嵌入式系统技术已经广泛地渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术以及人们的日常生活等方方面面中,成为目前最热门的技术之一。
本文使用北京博创兴业科技有限公司研制的UP-NETARM300嵌入式开发板,在ARM SDT 2.51集成开发环境下,建立基于μC/OS-Il操作系统的工程文件CONTROL ENGINEERING China版权所有,分别调用ARM汇编程序和C程序在嵌入式微处理器上实现了Rijndael算法,并比较了两者的效率。下面以分组长度和
到192位或256位。
1 Rijndael加密算法简介
1.1 算法流程结构
Rijndael加密算法的128位输入分组用以字节为单位的正方形矩阵描述。该数组被复制到State数组。加密过程分为四个阶段:密钥扩展、轮密钥加、Nr-1(对应128、192、256位密钥长度,Nr分别为10、12、14)轮变换及最后一轮变换。轮变换包括字节代换、行移位、列混淆和轮密钥加四个过程,最后一轮变换包括字节代换、行移位和轮密钥加三个过程。用伪C代码表示如下:
Rijndael (Statewww.cechina.cn, CipherKey) {
KeyExpansion (CipherKey, ExpandKey); //密钥扩展
AddRoundKey (Statewww.cechina.cn, RoundKey); //轮密钥加
For (i=1;i<Nr;i++)
Round (Statewww.cechina.cn, ExpandKey+4*i); //轮变换
FinalRound (Statewww.cechina.cn, ExpandKey+4 * Nr); //最后一轮变换}
Round (Statewww.cechina.cn, RoundKey){ //轮变换
SubByte (State); //字节代换
ShiftRow(State); //行移位
MixColumn(State); //列混淆
AddRoundKey(Statewww.cechina.cn, RoundKey); 轮密钥加
FinalRound(Statewww.cechina.cn, RoundKey) { //最后一轮变换
SubByte(State);
ShiftRow(State);
AddRoundKey(Statewww.cechina.cn,RoundKey);
1. 2算法所使用的主要变换
(1)字节代换SubByte
用一个简单的查表操作代替了基于矩阵乘法的复杂仿射变换。Rijndael定义了一个16×16字节的S盒矩阵控制工程网版权所有,包含8位值所能表达的256种可能的变换。把Statc中每个字节的高4位作为行值www.cechina.cn,低4位作为列值,取出S盒中对应行列的元素作为新的字节输出。
行移位变换ShiftRow:State的第一行保持不变,第2、3、4行分别循环左移1、2、3个字节。
(2)列混淆变换MixColumn
可表示为如下基于系数矩阵CoefMix与State的矩阵乘法:
乘积矩阵中的每个元素S'i,j是系数矩阵中一行元素CoefMix[i,k]与State矩阵中对应一列元素State[kwww.cechina.cn,j]的乘积之和。这里的加法与乘法都定义在有限域GF(28)上:加法即按位异或操作,乘法遵循GF(28)上的多项式乘法规则。
(3)密钥扩展KeyExpanxsion
以4个字密钥为输入,生成44字扩展密钥数组ω[44],为初始轮密钥加阶段和后面10