收藏 分享(赏)

在ARM微处理器上实现Rijndael加密算法.doc

上传人:dreamzhangning 文档编号:2285189 上传时间:2018-09-09 格式:DOC 页数:6 大小:161KB
下载 相关 举报
在ARM微处理器上实现Rijndael加密算法.doc_第1页
第1页 / 共6页
在ARM微处理器上实现Rijndael加密算法.doc_第2页
第2页 / 共6页
在ARM微处理器上实现Rijndael加密算法.doc_第3页
第3页 / 共6页
在ARM微处理器上实现Rijndael加密算法.doc_第4页
第4页 / 共6页
在ARM微处理器上实现Rijndael加密算法.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、引 言2000年 10月 2日,美国国家标准局 NIST宣布,比利时密码学家 Joat Daemen和 Vincent Rijmen设计“RijndaeI 算法”以安全性好、运算速度快、存储要求低、灵活性强最终当选 AES。该算法对目前各种威胁是免疫。这标志着信息技术 有了新安全工具,为计算机网络和电子商务发展提供了强有力保障。在当前数字信息技术和网络技术高速发展后 PC时代,嵌入式系统技术已经广泛地渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术以及人们日常生活等方方面面中,成为目前最热门技术之一。本文使用北京博创兴业科技有限公司研制 UP-NETARM300嵌入式开发板,在 AR

2、M SDT 2.51集成开发环境下,建立基于 COS-Il 操作系统工程文件,分别调用 ARM汇编程序和 C程序在嵌入式微处理器上实现了 Rijndael算法,并 比较了两者效率。下面以分组长度和密钥长度都是 128位为例,介绍调用 ARM汇编程序实现加密算法过程。本实现算法可以将密钥长度扩展到 192位或 256位。 1 Rijndael加密算法简介11 算法流程结构Rijndael加密算法 128位输入分组用以字节为单位正方形矩阵描述。该数组被复制到 State数组。加密过程分为四个阶段:密钥扩展、轮密钥加、 Nr-1(对应 128、192、256 位密钥长度,Nr 分别为 10、12、1

3、4)轮变换及最后一轮变换。轮变换包括字节代换、行移位、列混淆和轮密钥加四 个过程,最后一轮变换包括字节代换、行移位和轮密钥加三个过程。用伪 C代码表示如下: Rijndael (State, CipherKey) KeyExpansion (CipherKey, ExpandKey); /密钥扩展 AddRoundKey (State, RoundKey); /轮密钥加 For (i=1;iNr;i ) Round (State, ExpandKey 4*i); /轮变换 FinalRound (State, ExpandKey 4 * Nr); /最后一轮变换 Round (State, R

4、oundKey) /轮变换 SubByte (State); /字节代换 ShiftRow(State); /行移位 MixColumn(State); /列混淆 AddRoundKey(State, RoundKey); 轮密钥加 FinalRound(State, RoundKey) /最后一轮变换 SubByte(State); ShiftRow(State); AddRoundKey(State,RoundKey); 1. 2算法所使用主要变换(1)字节代换 SubByte用一个简单查表操作代替了基于矩阵乘法复杂仿射变换。Rijndael 定义了一个1616字节 S盒矩阵,包含 8位值

5、所能表达 256种可能变换。把 Statc中每个字节高 4位作为行值,低 4位作为列值,取出 S盒中对应行列元素作为新字节输出。行移位变换 ShiftRow:State 第一行保持不变,第 2、3、4 行分别循环左移1、2、3 个字节。(2)列混淆变换 MixColumn可表示为如下基于系数矩阵 CoefMix与 State矩阵乘法: PC提示请看下图:乘积矩阵中每个元素 Si,j是系数矩阵中一行元素 CoefMixi,k与 State矩阵中对应一列元素 Statek,j乘积之和。这里加法与乘法都定义在有限域GF(28)上:加法即按位异或操作,乘法遵循 GF(28)上多项式乘法规则。(3)密钥

6、扩展 KeyExpanxsion以 4个字密钥为输入,生成 44字扩展密钥数组 44,为初始轮密钥加阶段和后面 10轮变换提供轮密钥。输入密钥直接被复制到扩展密钥数组前 4个字,然 后每次用 4个字填充扩展密钥数组余下部分。在扩展密钥数组中,i值依赖于 i-1和 i-4。 数组中下标不是 4倍数时,i为 i-1和i-4异或。下标为 4倍数时,首先将 i-14 个字节循环左移 1个字节,然后利用 S盒对每个字节进行字节代换,再与轮常量按位异 或。轮常量是 1个字,其最右边 3个字节为 O,最左边 1个字节值 RCj与轮数 j相关。RC1=1,RCj=2RCj-1,乘法定义在 GF(28)上。RC

7、j值以十六进制表示。(4)轮密钥加 AddRoundKey是基于 State列操作,即把 State一列中 4个字节与轮密钥 RoundKey1个字进行“异或”。 2 ARM汇编编程实现 Rijndael算法要点 2. 1源程序组成及功能源程序包含 main.c和 ARM汇编程序 Rijndael.s。main.c 用 C语言编写,主要完成调用 COS-II 函数进行系统初始化及 IO 全部功能,并调用 Rijndael.s对明文加密。明文、密钥及密文均在开发板显示屏上输出。Rijndael.s用 ARM汇编编程语言编写,是实现加密算法关键程序。2. 2 Rijndael.s程序实现加密算法步

8、骤Rijndael.s主要通过 ARM汇编子程序调用完成加密算法,包括 1个代码段和 1个数据段。它把算法所使用所有变换均用同名 ARM汇编子程序实现。代码段包括以下几个模块:首先,进行明文、密钥预处理。明文可以从开发板键盘上接收,也可以是常量或参数传递过来变量。其次,调用子程序 KeyExpansion完成密钥扩展。第三,调用子程序 AddRoLundKey完成初始轮密钥加。第四,轮变换。包括四个步骤:调用于程序 SubByte进行字节代换;调用子程序 ShiftRow进行行移位;调用子程序 MixColumn进行列混淆;调用子程序 Ad-dRoundKey进行轮密钥加。本过程重复 9次。第

9、五,最后一轮变换。包括三个步骤:调用子程序 SubByte进行字节代换;调用子程序 ShiftRow进行行移位;调用子程序 AddRoundKey进行轮密钥加。最后,对生成密文进行进一步处理,即把密文视为 44数组,将其行与列对调。在数据段中对转换过程中使用到部分数据或中间变量进行了定义并初始化。如字节代换中 S盒及列混淆变换中系数矩阵等。23 ARM 汇编子程序代码设计举例在所有子程序中,列混淆变换和密钥扩展代码设计难度较高,算法较复杂。下面是列混淆子程序代码设计: MixColumn ;子程序入口 ldr r0,=State ;取变量地址 ldr r1,=CoefMix ldr r2,=T

10、emp ;Temp 中间变量 mov r3,#0 ;i=0 loop_i ;i 循环入口 mov r4,#0 ;j=0 loop_j ;j 循环入口 mov r5,#0 ;k=0 loop_k ;k 循环入口 mov r6,r3,lsl #2 add r6,r6,r5 ldrb r6,r1,r6 ;读取 CoefMixi,k mov r7,r5,lsl #2 add r7,r7,r4 ldrb r7,r0,r7 ;读取 Statek,j loop_temp ;此循环用来计算 PC提示请看下图:mov r8,r3,lsl #2 add r8,r8,r4 and r9,r6,#1 cmp r9,#

11、1 ;判断 CoefMixi,k最低位是否为 1 bne notequal ;若不为 1,转向执行 ldrb r9,r2,r8 ;若为 1,则 Tempi,j) =Statek,j eor r9,r9,r7 strb r9,r2,r8 notequal mov r6,r6,lsr #1 ;CoefMixi,k逻辑右移 1位 and r9,r7,#0x80 mov r7,r7,lsl #1 ;Statek,j逻辑左移 1位 and r7,r7,#0xff cmp r9,#0x80 ;移位后 Statek,j最高位是否为 1 blt littlethan ;如不为 1,转向执行 eor r7,r7

12、,#0xlb ;如为 1,则 Statek,j与#0xlb 异或 littlethan cmp r6,#0 ;CoefMixi,k与 0比较 bgt loop_temp ;如大于 0,转到标号 loop_temp处执行,否则读取CoefMixi,k 1 add r5,r5,#1 cmp r5,#4 blt loop_k ;执行 k循环 add r4,r4,#1 cmp r4,#4 blt loop_j ;执行 j循环 add r3,r3,#1 cmp r3,#4 blt loop_I ;执行 i循环 mov r3,#0 renew ;用 Temp更新 State ldrb r4,r2,r3 s

13、trb r4r0,r3 add r3,r3,#1 cmp r3,#16 blt renew MixColumnend mov pc,lr ;子程序返回 3 Rijndael加密算法实现效率比较在调用 ARM汇编程序实现 Rijndael加密算法之余,还在嵌入式微处理器 ARM上通过调用 C子程序实现了 Rijndael算法,同样获得了正确结果。表 1、表 2是两种实现方式空间与时间效率比较。PC提示请看下图:PC提示请看下图:由表 1知,ARM 子程序比 C子程序所占用空间明显小得多,前者仅为后者55。由表 2,运行一次 ARM汇编程序 Rijndael.s程序完成加密算法,仅 需约 0.657 tick(此处,1000 tick=1s),而运行一次 c子程序约需 0.996 tick,比前者增加了 52。 结语高级加密标准 Rijndael算法在嵌入式微处理器 ARM上实现具有一定实用价值。经 University of Califor-nia,San Diego 在因特网上提供测试程序Interactive Ri-jndael Test Vectors in JavaScript验证,本实现算法是正确。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报