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

发布者:石头12345最新更新时间:2011-07-14 关键字: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

  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×16字节的S盒矩阵,包含8位值所能表达的256种可能的变换。把Statc中每个字节的高4位作为行值,低4位作为列值,取出S盒中对应行列的元素作为新的字节输出。

  行移位变换ShiftRow:State的第一行保持不变,第2、3、4行分别循环左移1、2、3个字节。

  (2)列混淆变换MixColumn

  可表示为如下基于系数矩阵CoefMix与State的矩阵乘法:

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

  乘积矩阵中的每个元素S'i,j是系数矩阵中一行元素CoefMix[i,k]与State矩阵中对应一列元素State[k,j]的乘积之和。这里的加法与乘法都定义在有限域GF(28)上:加法即按位异或操作,乘法遵循GF(28)上的多项式乘法规则。

  (3)密钥扩展KeyExpanxsion

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

  (4)轮密钥加AddRoundKey

  是基于State列的操作,即把State一列中的4个字节与轮密钥RoundKey的1个字进行“异或”。

  2 ARM汇编编程实现Rijndael算法的要点

  2. 1源程序组成及功能

  源程序包含main.c和ARM汇编程序Rijndael.s。main.c用C语言编写,主要完成调用μC/OS-II函数进行系统初始化及I/O的全部功能,并调用Rijndael.s对明文加密。明文、密钥及密文均在开发板显示屏上输出。

  Rijndael.s用ARM汇编编程语言编写,是实现加密算法的关键程序。

  2. 2 Rijndael.s程序实现加密算法步骤

  Rijndael.s主要通过ARM汇编子程序调用完成加密算法,包括1个代码段和1个数据段。它把算法所使用的所有变换均用同名ARM汇编子程序实现。代码段包括以下几个模块:

  首先,进行明文、密钥预处理。明文可以从开发板键盘上接收,也可以是常量或参数传递过来的变量。

  其次,调用子程序KeyExpansion完成密钥扩展。

  第三,调用子程序AddRoLundKey完成初始轮密钥加。

  第四,轮变换。包括四个步骤:①调用于程序SubByte进行字节代换;②调用子程序ShiftRow进行行移位;③调用子程序MixColumn进行列混淆;④调用子程序Ad-dRoundKey进行轮密钥加。本过程重复9次。

  第五,最后一轮变换。包括三个步骤:①调用子程序SubByte进行字节代换;②调用子程序ShiftRow进行行移位;③调用子程序AddRoundKey进行轮密钥加。

  最后,对生成的密文进行进一步处理,即把密文视为4×4数组,将其行与列对调。

  在数据段中对转换过程中使用到的部分数据或中间变量进行了定义并初始化。如字节代换中的S盒及列混淆变换中的系数矩阵等。

  2.3 ARM汇编子程序代码设计举例[page]

 

  在所有子程序中,列混淆变换和密钥扩展的代码设计难度较高,算法较复杂。下面是列混淆子程序的代码设计:

  MixColumn ;子程序入口

  ldr r0,=State ;取变量地址

  ldr r1,=CoefMix

  ldr r2,=Temp  ;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] ;读取CoefMix[i,k]

  mov r7,r5,lsl #2

  add r7,r7,r4

  ldrb r7,[r0,r7] ;读取State[k,j]

  loop_temp ;此循环用来计算

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

  mov r8,r3,lsl #2

  add r8,r8,r4

  and r9,r6,#1

  cmp r9,#1 ;判断CoefMix[i,k]的最低位是否为1

  bne notequal ;若不为1,转向执行

  ldrb r9,[r2,r8]  ;若为1,则Temp[i,j)+=State[k,j]

  eor r9,r9,r7

  strb r9,[r2,r8]

  notequal

  mov r6,r6,lsr #1 ;CoefMix[i,k]逻辑右移1位

  and r9,r7,#0x80

  mov r7,r7,lsl #1 ;State[k,j]逻辑左移1位

  and r7,r7,#0xff

  cmp r9,#0x80 ;移位后State[k,j]最高位是否为1

  blt littlethan ;如不为1,转向执行

  eor r7,r7,#0xlb ;如为1,则State[k,j]与#0xlb异或littlethan

  cmp r6,#0 ;CoefMix[i,k]与0比较

  bgt loop_temp ;如大于0,转到标号loop_temp处执行,否则读取CoefMix[i,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]

  strb r4[r0,r3]

  add r3,r3,#1

  cmp r3,#16

  blt renew

  MixColumnend

  mov pc,lr ;子程序返回

  3 Rijndael加密算法实现效率比较

  在调用ARM汇编程序实现Rijndael加密算法之余,还在嵌入式微处理器ARM上通过调用C子程序实现了Rijndael算法,同样获得了正确结果。表1、表2是两种实现方式的空间与时间效率比较。

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

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

  由表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验证,本实现算法是正确的。

 

 

关键字:ARM微处理器  Rijndael加密算法 引用地址:在ARM微处理器上实现Rijndael加密算法

上一篇:基于ARM控制器LPC2214的税控收款机系统的设计
下一篇:基于ARM的MPEG4视频解码器

推荐阅读最新更新时间:2024-03-16 12:38

基于ARM微处理器的十回路智能配电监控单元的设计
配电自动化技术正朝着数字化、智能化、网络化、多功能的方向飞速发展。本文以内含ARM7TDMI—STM CPU的微控制器LPC2132芯片作为系统主控制器,针对电力系统数据信号的采集和数据通信,以及电力系统状态监测为研究主题,研究设计出了一种具备智能配电,并可同时监控十个用户回路的终端控制单元,其具备测量各回路中有功功率、无功功率、能量、电压、电流、功率因数等电力参数功能。 1 电力参量的测量原理 对称三相电源通常由三个频率相同、幅值相等和初相角为1200的正弦电压源按一定方式连接而成,三相信号可依次称为A、B、C相,记为uA、uB、uC,它们的瞬时表达式如下:   在交流电路中,电压与电流之间的相位差的余弦
[电源管理]
基于<font color='red'>ARM</font><font color='red'>微处理器</font>的十回路智能配电监控单元的设计
ARM基础篇—ARM微处理器的应用领域及特点
一、ARM微处理器的应用领域 到目前为止,ARM微处理器及技术的应用几乎已经深入到各个领域: 1、工业控制领域:作为32的RISC架构,基于ARM核的微控制器芯片不但占据了高端微控制器市场的大部分市场份额,同时也逐渐向低端微控制器应用领域扩展,ARM微控制器的低功耗、高性价比,向传统的8位/16位微控制器提出了挑战。 2、无线通讯领域:目前已有超过85%的无线通讯设备采用了ARM技术,ARM以其高性能和低成本,在该领域的地位日益巩固。 3、网络应用:随着宽带技术的推广,采用ARM技术的ADSL芯片正逐步获得竞争优势。此外,ARM在语音及视频处理上行了优化,并获得广泛支持,也对DSP的应用领域提出了挑战。 4、消
[单片机]
ARM微处理器中的常量
学习ARM微处理器中的常量时,一直很懵懂,网上查了一下,终于弄明白,记录下来先。 书上的原话是: “常量是一个8位的常数经循环右移偶数位(0、2、4、8、…、26、28、30)得到。ARM指令时固定的32位指令编码,不可能直接用32位表示立即数,采用上述间接方式表示的立即数在指令编码中需要12位(其中8位表示常数,4位表示循环右移)。这样一来,不是每一个32位常数都是合法的立即数,只有通过上面的构造方法得到的才是合法的立即数。 合法常量:0xFF、0×104、0xFF000、0xFF000000、0xF000000F。 非法常量:0×101、0×102、0xFF1、0xFF04、0xFF003、0xFFFFFFFF、0xF0000
[单片机]
服务器市场的变数,ARM仍是最大看点?
近年来智能手机成为处理器技术发展的主要驱动力,一段时间以来我发现Linley 处理器会议中最有趣的部分便是专门针对移动应用的会议。 上周举行的一场会议并不是针对移动市场,而是一场专注于网络和服务器市场的会议。不过,这两类市场都在“移动数据”的推动下迅速增长。 事实上,智能手机发展得如此之快,使得它们已经成为互联网访问的主要方式,而且这种发展趋势只会不断加速,相比之下,台式机和笔记本电脑变得比较小众。 Jag Bolaria(Linley)在主题演讲中介绍了网络和服务器这部分行业的概况。在整体市场份额上,英特尔继续保持领先地位,其次是飞思卡尔。令我意外的是,AMD提升了在这一市场的份额,因为供应商都在寻找可以降低成本和替
[单片机]
基于ARM9微处理器的无线电台网络控制系统的设计
  1、引言   随着无线电台技术的飞速发展,越来越多的行业开始使用无线电。数据传输速率从低速走到高速,传输的信号从简单代码发展到遥控遥测数据、数字化语音、动态图像等。无线电台因其高稳定性和高可靠性适用于各类无线数据采集与监视控制系统,尤其是应用在输油供气管网监测、城市防空报警控制、铁路信号监控、电力负荷监控 、城市路灯监控、铁路供水集中控制、GPS定位系统、地震测报、污水处理、环境监测等工业自动化系统。   2、系统概述   本文把嵌入式技术与无线电台通信技术相结合,研究出一种新型的嵌入式网络控制器。控制器内的电路板是以ARM9嵌入式微处理器为核心,对外提供多个接口,包括3个串口,小型的系统总线接口,以及非常丰富的常用嵌
[单片机]
基于<font color='red'>ARM</font>9<font color='red'>微处理器</font>的无线电台网络控制系统的设计
利用ARM微处理器和ZigBee模块组成无线串口集线器
1 引言 随着21世纪科学技术的不断进步,无线与移动通信相应得到了迅猛的发展。方便快捷的无线接入和无线 互连等新概念和新产品,已逐渐融入人们的工作领域和日常生活中。由于如今对无线频率的大量使用,使无线频率资源日渐匮乏,短距离宽带无线通信技术受到世界许多国家工业界和研究机构的广泛关注。伴随着各种便携式终端通信设备的增加,人们对短距离的无线与移动通信需求也越来越迫切。无处不在的网络世界,使对各种电器设备实行网络化管理已成为必然趋势。目前小范围内如以太网中对终端设备的管理,主要使用有线方式。近来,随着与无线通信相关的新技术如雨后春笋般涌现出来,大量、廉价和高度集成的无线模块的普及,无线联网技术以其安装成本低、使用方便等特点,在一些不便
[单片机]
利用<font color='red'>ARM</font><font color='red'>微处理器</font>和ZigBee模块组成无线串口集线器
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved