Atmega128单片机的RC5和RC6算法比较与改进
引言
在无线局域网中,传输的介质主要是无线电波和红外线,任何具有接收能力的窍听者都有可能拦截无线信道中的数据,掌握传输的内容,造成数据泄密。因此,对于无线局域网来说,数据的加密是关键技术之一。
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比特表示为“ab”;
⑤循环右移,字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加密算法过程伪代码表示
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中,从而在以后的加密与解密过程中直接使用混合
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)