科技信息
博 士 ·专 家论 坛
基 于 ARM 嵌 八 式 系 统 昀 AES加 峦 簧 法 实 坝
南通 大 学江 苏省专 用 集成 电路设 计 重点 实验 室 金 丽
[摘 要 ]文章 阐述 了 AES算法 的原理 ,使 用 了基 于 AP,dVI7的 SEP3203嵌入 式 系统 实验平 台 ,在 ARaM ADS集成开发环境 下 ,移植
~C/OS-II实时 操 作 系统 ,建 立 并 编 译 AESEncrypt汇 编 文 件 ,对 轮 函数 采 用子 程 序 调 用 方 法 ,在 嵌 入 式 系统 上 高 效 的 实现 了 高级 加
密标 准 AES算 法。
[关键词 ]AES ARdM btC/OS-II 高级加 密
1.引言
随着 计算机运算 能力 的飞速发展 ,以及互 联网所带来 的巨大并行
计算能力 ,DES的安全性 日显脆弱 。AES的基本要求 是比三重 DES快
且至少与 三重 DES一样安 全 ,分组 长度为 128比特 ,密 钥长度 为 128、
192和 256比特可选 。AES作 为新一代 的数据 加密标 准汇聚 了强 安全
性 、高性能 、高效率 、易用和灵活等优点”1。
随着信息化 、智能化 、网络化 的发 展 ,嵌入式 技术得到 了广泛 的发
展空间 ,嵌入式系统作为计 算机硬件 和软件 的综合体 ,它 的技术 开发和
人们的生活越来越紧密结合 ,所 以嵌入式 系统的信息安全性显 得尤为
重要 。本文使用 的是南 京博芯 电子技术有 限公司研制 的 GD02嵌 入式
系统实验开 发平 台 ,GDO2采用 当前 流行的 ARM7TDMI核 32位嵌 入式
处理器,在 ARM ADSI.2集成开发 环境下 ,通过 移植 ~C/OS—II实时操
作 系统 ,建立并编译 AES汇编 文件 ,根据 ARM 的编程特 点 ,高效 的实
现 了高 级 加 密 标 准 AES算 法 。
2.AES算 法 原 理
AES是一个迭代的 、对称密钥分组 的密码 ,它可 以使用 的三种密钥
长度对应 的加密 轮数 Nr分 别为 1O、l2、l4,并且用 128位分 组加密和解
密数据 。本文介绍的密钥长度三种都可选 。加密 的每一轮 由三层组成 :
非线性层 ,由 16个 s一盒并置而成 ,进行 Subbyte()运算 ,起 到混淆 的作
用 ;线性混合 层 ,进行 ShiftRow()运算 和 Mixcolumn()运算 ,确保 多轮之
上 的高度 扩散 ;密钥 加层 ,进行 AddRoundKey()运算 ,子密 钥简单 的异
或到 中间状态上[21。其加密和解密算法原理流程 图如 图 1所示 :
SubBytes(state)
ShiftRows(state)
AddRoundkey(stae,w[Nr Nb,(Nr+1) Nb一1】)
out=state
end
在加 密流程 中 ,分别 运用 了 SubBytes()、ShiftRows()、MixColumns
()和 AddRoundkey()四个 独立 的变换 ,对状态矩阵进行 了处理 。
2.1.1SubBytes()变换
SubBytes()变换即 s一盒运算 ,是 将每个字节通过 S一盒 (如表 1所
示 )做非线性运算 。s一盒选取的是有限域 GF(2s)中的乘法逆运算 。GF(2~
中的乘法 (以·表示 )是多项式 的模 2乘 积通过免去进位 ,再模~个次数
为 8的不可约 多项式约化得到 。s一盒 是可逆转的 ,它通 过两步变换得
蛰l:
表 l S盒 的 十 六进 制 表示
0 l 2 3 4 S 6 1 日 9 a b C d l 0 f
63 70 7"/ 7b f2 6b 6f c5 30 O1 67 21> fe d7 ab 16
1
82 c9 7d fa 59 ●7 f0
dd a
o i4 12 c0
2 b7 fd 93 26 36 3f f7 。c 34 a5 e 5 fl 71 8_8 31 15
3 O4 o7 23 03 l8 96 05 旦a 07 12 80 e2 eb 27 地 75
4 09 83 2a la U) 6e 5a a0 52 3b d 6 b3 29 e3 2f 84
5 53 dl DO eft 2O f0 b1
6a ob b e 3, ta 10 5B cf
6 do ef n £b 43 4d 33 85 45 £9 02 7f 50 3O 9f a8
7 51 a3 l0 Bf 92 9d 39 fS b0 b6 da 21 t0 £f f3
8 cd O0 13 eC 5f 97 ●4 17 o4 a7 7e 3d 64 5d 19 73
g 60 Bi 4f do 29 2a 90 88 I6 0e b B 1^ d- 5e 她 ‘如
a eO 32 3a Oa 4, 06 24 5a a2 d3 a0 62 ’1 95 e4 19
b e7 ce 31 6d 8d d5 ae a9 6o S6 f4 ea 65 7a ae O8
o ba 78 2S 29 lo a6 M 06 08 dd 7l 1f 4b bd 8b 8a
d T0 3e b5 66 48 03 f6 0e 61 35 57 b, B6 01 1d ,e
e el fB 9日 ll 69 d9 8e 94 9b 1e 87 e’ Ce 55 2B df
f 8a al B9 Od bf e6 ●2 68 41 99 2d 0f b0 54 bb 16
(1)在有限域 GF位中求得乘逆 ,其中 ‘0o’的逆 就是 它本身 。
(2)运用下 面的仿射变换(GF(2)中):
:b。① ① ① 脚 ① +枷 ①c
图 1 AES加 密 和 解 密 流 程
由图可知 ,解 密是加 密的逆过程 ,所 以本文 主要介绍 AE加密过
程 。
2.1加 密
在加密 初始 ,首先用 128位数据分 组 ,然后进 行子密钥 加 ,具 体加
密 流 程 的 用 c伪 码 表示 如 下 :
Cipher(byte in『4 Nb], byte out[4 Nb],word w[Nb (Nr+1)】)
begin
byte state[4,Nb】
state=in
AddRoundkey(state,Wfo,Nb-l1)
for round=l step 1 toNr一1
SubBytes(state)
ShiftRows(state)
MixColumns(state)
AddRoundkey(state,w[round Nb,(round+1) Nb-1])
enffor
l 0
0 O
用矩阵形式表示 ,仿射变换结果如下 :
Ib0’I l 1 1 1 1 1
{b1’{10 1 1 1 1
lb2’l}0 0 1 1 1
fb3’J f0 0 0 1 l
I 1 I 1 0 0 0 1
J ’J J 1 1 0 0 0
1 l I 1 1 1 0 0
【b ’J l1 1 1 1 0
2.1.2ShiftRows()变 换
1 1
1 1
1 l
1 1
+
O l
O O
S叫
S
是 Su SIj Su
Sl
I Sl】
,
S¨
S蜘
[=!!望
!!
S∞
su l S3j
图 2 ShiftRows()变 换
ShiftRows()变换是进行行变换 ,即对 State矩 阵进行移位操作 ,第一
行不变 ,第二行循 环左 移一位 ,第 三行循环左移 两位 ,第 四行循 环左移
三 位 。 具 体 如 图 2所 示 。
2.1.3MixColumns()变换
基金项 目:本文 系南通 大学 自然科 学基金项 目(08Z067 o
作者简介 :金 丽(1978一),女 ,江 苏南通人 ,南通大 学专用集成 电路设计 重点 实验 室教师 ,硕士 ,讲师 ,主要研究方向为嵌入式软件、信息安全。
一
1 一
,
科技信息
博士 ·专家论坛
MixColumns()运算是把状态 中的每一列看作 GF(2S)]2的多项式与
一 固定多项式 a(x)={03}x (O1lx {0l}x+l02)相乘然后模多项式 x4+1 根
据矩阵的乘法运算 ,设 s‘(x】=:a(x)①s(x),可得到 :
s’q ({02). 0({o3}.st ①s ④s
s。一产s ({021.s· 0(1o3l·s ①s
s’ sq ④s- ({o2}.8 ①({O3}.s
s‘ (1031.8 0st ①s ①(f02J·s
因此一列中的四个字节替换如图 3所示 :
图 3 MixColumns()变 换
2.1.4AddRoundkey()变换
AddRoundKey()变 换是与扩展 密钥的异或运 算 ,即根据加密 的轮
数用相应 的扩展密钥的四个数据项 和中间状态矩阵上的列进行按位异
或 :
【s’ s’l s’轴s’ =【 s-ps s 0 w 】
具体如图 4所示 :
So+
S¨
S S∞
Sl‘
——, — 一 一
SLo
0
Slj
S2
S如
S” S
s3
Slo
■■_
S S”
I
——
\ \
\
S
S’
s'o 3
、s
S’__1
S+I.j
2 +]
S。h
S‘2 0
2 s|2j
一
S。l0
s._‘
sI SS
'■ _
图 4 AddRoundKey()变 换
2.2密钥扩展 KeyExpansion
密钥扩展算 法首先利用初始密钥产生 出加密所需要 的所有密钥 ,
然后对该密钥序列中的除第一个和最后一个字外的密钥字进行逆列 混
合处理 。得到解密过程所需要的所 有密钥 。
密钥扩展 总共产 生 Nb(Nr+1)个双字 :算 法初始需要 一个 Nb个双
字 的集合 ,接着每个轮操作都需要 Nb个 双字的密钥数据 ,最终的密钥
流程共包含了一个 4字节双字 的线性数组 w【i】。
3.基 于 ARM 系统的 AES加密算法的实现
3.1~CAOS—II操 作 系 统 的 移植 及 初 始 化
所谓移植 ,就是使一个 实时内核能在微处理器或微控制器上运行。
p~JOS-I I是一种免 费但性能稳定 的实时操作系统 ,它是为嵌入式应用
而设计的,它 的绝大部分代码是用 c语言编写的 ,CPU硬件相关部分是
用汇编语言编写的 ,总量约 200行 的汇编语言部分被压缩到最低限度 ,
为的是便 于移植 到任何 一种其 它的 CPU上 。用户 只要有 标准的 ANSI
的 C交叉编译器lq,有汇编器 、连接器等软件工 具 ,就可 以将 tLC/OS—II
嵌人 到开发的产品中。它 的特点是 内核微小 ,结构清晰 ,具有 良好 的扩
展 性 日。
t~C/OS—II实 际上 可 以简单 地看作是 一个多任 务的调度 器 ,它 的
90%的代码都是用 c语言写 的,所 以只要有相应的 c语 言编译器 ,基本
上就可以直接移植 到特定处理器上。移植工作 的绝大部分都集 中在多
任务切换的实现上 ,因为这部分代码主要是用来保存 和恢复处理器现
场 ,因此 不能用 c语言 ,只能使用特定 的处理器 汇编语言完 成。将
p.C/OS—II移 植 到 ARM 处 理 器 上 ,需 要 完 成 的工 作 也 非 常 简 单 ,只 需 要
修改三个 (os_CPU.H文件 、OS_CPU—C.C文件和 OS—CPU—A.S文件 )和
ARM体 系结构相关的文件 即可 ,即它的移植代码结构图如图 5所示。
C/OS—II操作系统的初始化 的主要代码都在 c语 言编写的 main
0i$i数里。main函数是从汇编跳人 c代码 中的第一个函数 ,它首先通过
固件函数初始化(FimInit)SEP3203芯片 ,主要完成 PMU和中断的初始
化。然后调用 OSInit用以完成操作系统的初始化工作 ,最后 以 OSStart
图 5移植代码结构图
3.2AES加密算法实现
AES的加密实现的 AESEncrypt汇编源程序结构如下:
AREA AESEnerypt,CODE,READONLY
定义代码段
ENTRY 程 序 人 口
START
MOV R0,# 0;
LDR R1,=State;取 状 态地 址
LDR R2,=Temp;取 中间 变 量
BL Roundfun
…
…
…
…
…
…
MOV PC,lr
调 用 轮 函 数
从子程序 中返回
程 序 结 束
END
在上述 汇编程序中 ,其参数 的传 递是通过数据栈 来传递 的 ,中间
加密轮 函数的调用步骤如下 :
①BL KeyExpansion—— 进行密钥扩展 ;
②BL AddRoundkey——与扩展密钥进行异或 ,实现子密钥加 ;
③用循环语句 Loop_]i=0to9—— 中间循环 9次轮变化 ;
s盒变换 时调用子程序 SubByte,进行字节替换 ;行变换时调用子程
序 ShifiRow;列变换时调用子程序 MkCdumn,进行列混淆 ;调用于程序
AddRoundkey,进行密钥加 ;
④最后一次轮变换中 ,进行 了 s盒变换 、行变换和子密钥加 。分别
调用了以下程序 。
BL SubByte
BI.ShiftRow
BL AddRoundkey
4.结 论
本文提 出的 AES算法是在 ARM主频率为 75MHz的嵌入式上实现
的,实验结果表明,AES一128、AES一192和 AES一256数据吞吐率分别为
192.5Mbi~、162.9Mbi~ 和 141.5Mbit/s,这 比完全 c程序进行加密的数
据吞吐率要高 。由此可知 ,运用 ARM汇编来加解 密 AES效率 高 ,速度
快 。随着嵌入式系统的 日益广泛应用 ,基于 ARM嵌入式 系统的 AES算
法实现具有一定 的应用价值 。
参 考 文 献
I 1 lI.Nechvatal,et.al,Report Oil the Development of the Advanced En-
crypt'ion Standard (AES)I I J Journal of Research of the Nadonal Imtitute of
Standards and Technology,v.106,Num3,M ay-June2001:11-577
[2]winiamStallings.刘 玉珍,王 丽娜,傅 建明等译.密码编码 学与 网络
安全:原理 与实践[M].第 3版.北京:电子 工业 出版社。2004
[3 Joan Daemen,Vincent R~men著 .谷 大武 ,徐胜 波译 .高级 加 密标
准(AES)算法——Rjjndael的设计[M ].北京 :清华大学出版社,2003
[4]杜 春雷编 著.ARM 体 系结构与编程 [M].北京 :清华大 学 出版
社 .2003
[5]王晓呜 ,王树新 ,张宏伟.实时操作 系统 C/OS-II在 ARM 上
的移植[M].天津大学机械 工程 学院,2007
[6]时龙兴 ,凌明 ,王学香编著.基 于 SEP3203微 处理 器的应 用开发
开始 操 作 系 统 运 行 。
[M].北京 :电子工业出版社 ,2006