ARM Cortex-A8/A9开发板 | ARM11开发板ARM11开发套件 | ARM9开发板ARM9开发套件 | 飞思卡尔I.MX28I.MX6开发板 |
tiny210/mini210开发板 | mini6410开发板/套餐 | Tiny6410开发板无线套件 | mini2440开发板/套餐 | micro2440开发板带核心板 | 友善开发板配件 模块 | QQ2440 V3 SBC-2410X |
FL2440 OK2440-IV V4 | OK2440-III OK2440V3 | TE2440-II TE2440V2 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | 开发板配件 模块和其他 |
Xilinx开发板/fpga开发套件 | altera开发板/fpga开发套件 | 基于FMC FPGA/DSP子卡 |
BeagleBoard原厂开发板 | PandaBoard原厂开发板 |
TI DM3730 DevKit8500D | TI系列 omap3530开发板 | ATMEL系列 开发板 | Samsung系列 开发板 | 开发板配件-仿真器 模块 | NXP LPC3250 mini3250 |
Tiny210 三星S5PV210 | Mini210/Mini210s开发板 | Tiny4412开发板Cortex-A9 | Tiny6410开发板 ARM11 | mini2440开发板 ARM9 | micro2440开发板 ARM9 | mini6410开发板 ARM11 | 友善ARM开发板配件 模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
FL2440 OK2440-IV V4 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | OK210/-A Cortex-A8 | TE2440-II TE2440V2 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | ARM开发板配件 模块等 |
Real6410开发板/套餐 | Real210开发板/Real2410 | WIFI GPS GPRS模块摄像头 |
Xilinx开发板/开发套件KIT | Altera开发板/开发套件KIT | 配套模块 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | 最小系统模块类(初学者勿选) | 开发工具 仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
DM3730/AM3715/AM3359 | OMAP3530AM1808AM3517 | 飞思卡尔Cortex-A9开发板 | ATMEL系列ARM开发板 | NXP LPC3250 LPC1788 | Samsung系列ARM开发板 | STM32系列F207/F407 | ARM开发板配件-仿真器 模块 |
Realv210 S5PV210开发板 | Real6410开发板 ARM11 | WIFI GPS GPRS模块摄像头 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | ARM小系统模块(初学勿选) | 开发工具 ARM仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
Exynos4412开发板A9四核 | UT-S5PV210 S5PC100 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 |
Xilinx开发板 FPGA开发套件 | altera开发板 FPGA开发套件 | FMC模块 配件 下载线 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
s3c2410 ARM9 FS2410 | s3c2440开发板 ARM9 | s3c44B0开发板 ARM7 | s3c6410 2450 2443/13 | PXA270 PXA320 PXA255 | Atmel 9200 9261 9G20 | Philips NXP开发板YL-LPC | FS-EP9315开发板ARM9 | LCD液晶屏TFT真彩/触摸屏 | ARM仿真器/仿真调试工具 | ARM开发板配套ARM核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯开发板UP-DRAGON-I | 物联网教学科研设备 | EDA/FPGA/SOPC教学科研 |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | YC-ePC-A系列人机界面 | Mars-EDA套件CPLD FPGA | 触摸屏LCD 摄像头 WI-FI模块 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器/仿真系统 | DSP开发板/DSP试验箱 | DaVinci系列多媒体平台 | Xilinx FPGA大学计划产品 | SEED教学实验系统 | FPGA/DSP FPGA开发板 | TI原厂开发板套件/CCS软件 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
广嵌实验室项目产品 | GEC2440/GEC6410开发板 |
泰克Tektronix示波器 | 普源RIGOL示波器 | USB虚拟示波器 |
UT-S5PC100 UT-S5PV210 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 | 开发板模块wifi gps等 |
EMA OMAP3530开发板 | EMA OMAP 3530核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx Altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯系列 UP-DRAGON-I |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | 触摸屏LCD 摄像头 WI-FI模块 | Mars-EDA套件CPLD FPGA | ePC系列工控一体机ARM9 A8 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器 | DSP开发板 | DSP实验箱 | Xilinx FPGA大学计划产品 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
ARM开发板S3C6410等 | Cortex-A8/ARM11仿真器 | ADSP Blackfin开发板 | FPGA Spartan-3E开发板 |
GEC2410开发套件ARM9 | GEC2440开发套件ARM9 |
泰克 示波器 |
引 言
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×16字节的S盒矩阵,包括8位值所能表达的256种大概的更改。把Statc中每个字节的高4位作为行值,低4位作为列值,取出S盒中映射行列的元素作为新的字节输出。
行移位更改ShiftRow:State的第一行保持稳固,第2、3、4行分别循环左移1、2、3个字节。
(2)列殽杂更改MixColumn
可表现为如下基于系数矩阵CoefMix与State的矩阵乘法:
乘积矩阵中的每个元素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]值以十六进制表现。
(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汇编子步伐代码计划举例
在全部子步伐中,列殽杂更改和密钥扩展的代码计划难度较高,算法较巨大。下面是列殽杂子步伐的代码计划:
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 ;此循环用来谋略
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是两种实现方法的空间与时间服从比较。
由表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验证,本实现算法是精确的。
博航网 www.broadon.net 版权所有
京ICP备10051899号-2 京公网安备110108006479号