AVR单片机的RC5和RC6算法区别、实现与优化

分享到:

摘要:RC5及RC6是两种新型的分组密码。AVR高速嵌入式单片机功能强大,在无线数据传输应用方面很有优 势。本文基于Atmega128高速嵌入式单片机,实现RC5和RC6加密及解密算法,并对算法进行汇编语言的优化及改进。根据实验结果。对两种算法的优 热点进行比较和分析。

关键词:Atmega128 RC5 RC6 分组密码 混合密钥 Flash

引言

  在无线局域网中,传输的介质主要是无线电波和红外线,任何具有接收能力的窍听者都有可能拦截无线信道中的数据,掌握传输的内容,造成数据泄密。因此,对于无线局域网来说,数据的加密是关键技术之一。

  AVR高速嵌入式单片机是8位RISC MCU,执行大多数指令只需一个时钟周期,速度快(8MHz AVR的运行速度约等于200MHz C51的运行速度);32个通用寄存器直接与ALU相连,消除和运算瓶颈。内嵌可串行下载或自我编程的Flash和EPPROM,功能繁多,具有多种运行 模式。

  依照IEEE1999年发布的802.11无线局域网协议标准,采用Atmel公司的Atmega128高速嵌入式单片机,开发无线数据传输装 置。为了实现无线数据传输时的安全性,同时尽可能节省成本,采用软件进行加密、解密。这就对算法的简法性、高速性及适应性提出了很高的要求。RC5和 RC6两种新型的分组加密算法能够比较好地满足上述的要求。

1 RC5及RC6算法

1.1 RC5及RC6的参数

  RC5及RC6是参数变量的分组算法,实际上是由三个参数确定的一个加密算法族。一个特定的RC5或者RC6可以表示为RC5-w/r/b或者RC6-w/r/b。其中这三个参数w、f和b分别按照表1所列定义。

  表1 RC5及RC6算法参数定义

参  数 定  义 常  用
w 以比特表示的字的尺寸 16,32,64
r 加密轮数 0~255
b 密钥的字节长度 0~255

1.2 RC5及RC6字运算部件

  RC5及RC6均由三部分组成,分别为混合密钥生成过程、加密过程和解密过程。在这两种算法中,共使用了六种基本运算:

  ①模2w加法运算,表示为“+”;

  ②模2w减法运算,表示为“-”;

  ③逐位异或运算,表示为+;

  ④循环左移,字a循环左移b比特表示为“a<<<b”;

  ⑤循环右移,字a循环右移b比特表示为“a>>>b”;

  ⑥模2w乘法,表示为“×”。

  RC5算法运用了上述的①~⑤运算部分,RC6算法使用了上述所有的运算部件。

1.3 RC5算法

  (1)RC5算法混合密钥生成过程的伪代码表示

  S[0]=Pw

  for i=1 to t-1 do

  S[i]=S[i-1]+Qw

  输入比特数大小为8,密钥长度为b的用户密钥K[0]至K[b-1]

  转换K[0]至K[b-1]为数组长度为c,比特数为w的L[]数组

  i=j=0 x=y=0

  do 3×max(t,c)times:

  S[i]=(S[i]+x+y)<<<3;X=S[i];i=(i+1)mod t

  L[j]=(L[j]+x+y)<<<(x,y);X=L[j];j=(j+1)modC

  其中c=[b×8/w]方括号表示上取整运算,t=2r+2,当w分别为16、32、64时,常数Pw、Qw分别如表2所列。

  表2 常数Pw、Qw取值表

W 16 32 64
Pw 0xB7E1 0xB7E15163 0xB7E151628AED2A6B
Qw 0x9E37 0x9E3779B9 0x9E3770B97F4A7C15

(2)RC5加密算法过程的伪代码表示

  Input(A,B)

  A=A+S(0)B=B+S[1]

  for i=1 to r do

  A=((A+B)<<<B)+S[2i]

  B=((B+A)<<<A)+S[2i+1]

  Output(A,B)

  其中初始的A、B分别为要加密的两个比特数为w的数据,最终的A、B分别为加密好的两个比特数为w的数据。

(3)RC5解密算法过程的伪代码表示

  Input(A,B)

  for i=r down to 1 do

  B=((B-S[2i+1])>>>A)+A

  A=((A-S[2i])>>>B)+B

  A=A-S[0] B=B-S[1]

  Output (A,B)

  其中初始A、B中的数据就是已经加密了的比特数为w的数据,最终的A、B中的数据为解密后的比特数为w的数据。

1.4 RC6算法

(1)RC6算法混合密钥生成过程伪代码表示

  RC6混合密钥生成过程与RC5相同,只是t的取值为2r+4。

(2)RC6加密算法过程伪代码表示

  Input(A,B,C,D)

  B=B+S[0]D=D+S[1]

  for i=1 to r do

  t=(B×(2B+1))<<<log2w

  u=(D×(2D+1))<<<1og2w

  A=((A+t)<<<t)+S[2i]

  C=((C+u)<<<u)+S[2i+1]

  (A,B,C,D)=(B,C,D,A)

  A=A+S[2i+2]C=C+S[2i+3]

  Output(A,B,C,D)

  其中初始的A、B、C、D分别为要加密的四个比特数为w的数据,最终的A、B、C、D分别为加密好的四个比特数为w的数据。

(3)RC6解密算法过程的伪代码表示

  Input(A,B,C,D)

  C=C-S[2i+3]A=A-S[2i+2]

  for i=1 to r do

  (A,B,C,D)=(D,A,B,C)

  u=(D×(2D+1))<<<log2w

  t=(B×(2B+1))<<<log2w

  C=((C-S[2(r-i)+3])>>>t)+u

  A=((A-S[2(r-i)+2])>>>u)+t

  D=D-S[1] B=B-S[0]

  Output(A,B,C,D)

  其中初始的A、B、C、D分别为已经被加密的四个比特数为w的数据,最终的A、B、C、D分别为解密后的四个比特数为w的数据。

2 RC5和RC6算法的实现及改进

2.1 AVR单片机的RC5和RC6算法流程

  RC5及RC6算法加密过程实现流程图如图1所示,解密过程实现流程图如图2所示,总体过程流程图如图3所示。

2.2 AVR单片机RC5和RC6算法的改进

  ①在进行算法流程的安排时,考虑到AVR高速嵌入式单片机只有32个8位寄存器,为了节省寄存器的使用,应该在混合密钥生成过程执行后,再把待加密的数据赋予寄存器。这样在混合密钥生成过程以前的寄存器都可以被使用,而不会对整个算法的执行结果造成影响。

  ②在进行RC5及RC6算法参数的选择时,考虑到AVR高速嵌入式单片机指令最多只支持16位数据相加以及程序的简洁化,所以在本程序中选择w为16而没有选择w为32,r和b的值依据Rivest的建议分别取为12和16。

  ③在执行算法中的左循环或者右循环运算时,考虑到循环移位的效果,实际循环移位的位数应该为要执行移位次数的低1log2w位。在本程序中为要执行移位次数的后四位。

  ④在执行算法中的模2w加法运算、模2w减法运算、模2w乘法运算时,由于2w的取值为65536,而2个8位寄存器(0~15位)最高可以表 示数据的值为65535,数据再大就要向高位进位,所以在本程序执行上述的算法只需要考虑到2个8位寄存器所表达的值就得到了上述运算的最终结果,而不用 再进行模2w运算。

  ⑤为了提高数据加密及解密的速率,可以把混合密钥生成过程提前执行,以使之生成一张混合密钥表。把这个表装入发送数据端Atmega128高速 嵌入式单片机和接收数据端Atmega128高速嵌入式单片机的Flash 中,从而在以后的加密与解密过程中直接使用混合密钥。值得注意的是,每当用户输入的用户密钥发生改变时,必须重新执行混合密钥生成过程,并且重新给 Flash装载重新生成后的混合密钥表。在本程序中,RC5混合密钥表共占据52个8位寄存单元,RC6混合密钥表共占据56个8位存储单元。  ⑥在本程序中运用加法运算以及移位运算实现了16位二进制数乘以16位二进制数的无符号运算。该运算的子程序如下:

  chengfa:clr result2

  clr result3

  ldi count1,16

  lsr chengshu1

  ror chengshu0

  chengfa0:

  brcc chengfa1

  add result2,beichengshu0

  adc result3,beichengshu1

  chengfa1:

  ror result3

  ror result2

  ror result1

  ror result0

  dec count1

  brne chengfa0

  ret

3 RC5及RC6算法实验结果及其比较与分析

  RC5及RC6算法实验的混合密钥过程、加密过程、解密过程和总体过程的效果比较如表3、4、5、6所列。

  表3 RC5及RC6算法混合密钥过程效果比较

混合密钥生成过程 周期计数 停止观察/μs 程序大小/字 c t
RC5算法 15 248 1270.67 141 8 26
RC6算法 15 246 1270.50 141 8 28


表4 RC5及RC6算法加密过程效果比较

加密过程(不考虑生成混合密钥的时间) 周期计数 停止观察/μs 程序大小/字 共处理数据的位数 效率/(位/s)
RC5算法 2511 209.25 66 32 约为152 927
RC6算法 62529 5210.75 170 64 约为12 282

  表5 RC5及RC6算法解密过程效果比较

解密过程(不考虑生成混合密钥的时间) 周期计数 停止观察/μs 程序大小/字 共处理数据的位数 效率/(位/s)
RC5 算法 2509 209.08 68 32 约为153 051
RC6 算法 62527 5210.58 176 64 约为12 283

  表6 RC5及RC6算法总体过程效果比较

总体算法过程(考虑生成混合密钥的时间,不考虑数据传输所用的) 周期计数 停止观察/μs 程序大小/字 共处理数据的位数 效率/(位/s)
RC5算法 20 260 1688.33 267 32 约为18 594
RC6算法 140 274 11 689.50 455 64 约为5475

  由表3可以发现,RC6算法和RC5算法在混合密钥生成时程序的大小相同,但量RC6算法却比RC5算法省时。这是因为根据混合密钥生在方法在 执行循环,最终生成混合密钥时要执行比较操作。当超出了比较范围t时,要对指针地址重新复位。RC6算法t的取值大于RC5算法中t的取值,因此RC6算 法执行了较少的复位操作。从而节省了运行周期,故RC6算法比RC5算法在生成混合密钥时省时。

  以上所有实验结果均是在AVR Studio4.07仿真软件上选用Atmel公司的Atmega128高速嵌入式单片机为实验设备平台。选取参数w=16、r=12、b=16,并根据 计算公式求得c=8,t=26(RC5算法)或者t=28(RC6算法)在12MHz运行速度下模拟所得。

  从实验结果所得的表3、表4、表5、表6可以明确得出以下结论。

  ①从程序的执行效率来看,无论在加密还是在解密过程中,RC5算法都要比RC6算法执行效率高。

  因此,在一些非常注重程序执行效率,而对数据安全性要求不是非常高的情况下,应该采用RC5算法。

  ②从程序的执行时间来看,无论在加密过程不是在解密过程中,RC5算法都要比RC6算法省时。因此,在一些对程序执行时间长短要求很高,对数据安全性要求不是非常高的情况下,可以采用RC5算法。

  ③从程序的大小来看,无论在加密过程中还是在解密过程中,RC5算法都要比RC6算法更简洁。因此,在一些对程序所用空间大小要求很高,对数据安全性要求不是非常高的情况下,可以采用RC5算法。

  ④从安全性角度考虑,RC6算法是在RC5算法基础之上针对RC5算法中的漏洞,主要是循环移位的位移量并不取决于要移动次数的所有比特,通过 采用引入乘法运算来决定循环移位次数的方法,对RC5算法进行了改进,从而大大提高了RC6算法的安全性。因此,在一些对数据安全性要求很高的情况下,应 该采用RC6算法。

结语

  RC5及RC6算法是两种新型的分组密码,它们都具有可变的字长,可变的加密轮数,可变的密钥长度;同时,它们又只使用了常见的初等运算操作, 这使它们有很好的适应性,很高的运算速度,并且非常适合于硬件和软件实现。两种算法各有其优缺点,在工程应用中应该根据实际需要选择最适合的方法,以得到 最优的效果。

继续阅读
SKT之AVR硬件I2C的操作函数

STK600 之 Atmega128硬件I2C 读写高精度时钟芯片DS3231函数,STK600 用于程序的下载 连接JTAG口至mega128目标板即可,分享给大家参考。

紫光扛起中国存储器大旗

长江存储科技有限责任公司成立,清华紫光成为武汉新芯的新东家,正式扛起中国发展存储器产业的大旗。市场换不来技术,资本也换不来技术,不过中国高铁的崛起已经说明,核心技术可以通过合作获得,只要愿意分享,不过需要决策人够智慧。

ATMEGA128熔丝位配置详解

本文以AVR系列的ATmega128单片机为例,详细介绍熔丝位的配置以及在配置过程中常出现的一些问题,并给出相应的解决办法,成功地解决了因熔丝位配置不当而引起的单片机不能正常工作和死锁等一系列问题。

Atmega128中文资料

ATmega128是ATMEL公司的 8位系列单片机的最高配置的一款单片机,应用极其广泛。

基于ATmega128的16路遥控单元设计及应用

本文介绍一款具有16路遥控接点输出的ARTU-J16,该装置通过RS485总线与上位机相连,作为远程继电器输出模块,用于接收计算机指令,执行系统的遥控操作或自动控制,继电器输出共16路,装置拥有1600组操作事件记录,带GPS校时功能,在外部电源掉电后可以保证SOE事件记录一个月内不丢失,相对以往控制方式,本设计在简化控制网络结构的同时,提供了一种低成本,高可靠性的替代方案。

©2018 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss