在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<Nr;i++)
Round (State, ExpandKey+4*i); //轮变换
FinalRound (State, ExpandKey+4 * Nr); //最后一轮变换}
Round (State, RoundKey){ //轮变换
SubByte (State); //字节代换
ShiftRow(State); //行移位
MixColumn(State); //列混淆
AddRoundKey(State, RoundKey); 轮密钥加
FinalRound(State, RoundKey) { //最后一轮变换
SubByte(State);
ShiftRow(State);
AddRoundKey(State,RoundKey);
1. 2算法所使用的主要变换
(1)字节代换SubByte
用一个简单的查表操作代替了基于矩阵乘法的复杂仿射变换。Rijndael定义了一个16
评论