1.14 RC5和RC6加密算法
RC5是RSA公钥密码体制的发明者Ron Rivest于1994年提出的一种分组密码体制,它可看成一种DES型的迭代分组密码,以平衡的Feistel结构作为算法的基本框架。该算法有三个突出特点:
① 可变性,即分组长度可变、迭代层数可变、密钥长度可变;
② 采用依赖于数据的循环移位;
③ 算法的描述特别简单。
RC5加密算法将明文和密文分组长度的一半称为字,算法的运算是以字为单位进行的。用w表示字的比特数、用r表示迭代层数、用b表示密钥的字节数,则RC5-w/r/b表示分组长度为2w比特、密钥长度为b 字节的 r 层迭代RC5算法。选择不同的参数,可以得到不同的RC5加密算法。不同的字长适用于不同字长的处理器,不同的迭代层数可以使用户在速度和安全性两方面进行折中,不同长度的密钥能适应不同安全等级以及美国密码出口控制的要求。
RC6加密算法是AES的候选算法之一,它是RSA公司的Ron Rivest等人在RC5加密算法的基础上改进而生成的,其分组长度为128比特,迭代层数和密钥长度可变。和RC5加密算法一样,RC6加密算法也是用RC6-w/r/b来表示的,推荐的参数为w=32、r=20、b=16、24或32字节。
1.14.1 RC5加密算法
b字节的密钥可通过密钥扩展算法得到密钥扩展表,密钥扩展表由2r+2字,即S[0], S[1], …, S[2r+1]组成。RC5加密算法对输入的、由两个字组成的明文分组(A, B)进行以下加密:
A=A+S[0]
B=B+S[1]
对于i=1到r,进行以下运算:
A=[(A⊕B)<<<B]+S[2i]
B=[(B⊕A)<<<A]+S[2i+1]
式中,“<<<X”表示循环左移X mod w位。当w为2的幂次方时,循环移位数为X的低log2w比特的数值。经上述变化得到的(A, B)即输出的密文。
密钥扩展算法由两个常数,以及三部分变化和计算组成。
两个常数是由自然对数的底数e=2.718281828459…,以及黄金分割比例ϕ=1.618033988749…来定义的两个字Pw和Qw,即
Pw=Odd[(e-2)2 w]
Qw=Odd[(ϕ-1)2 w]
式中,Odd(X)是最接近X的奇整数。其实Pw和Qw就是由自然对数的底数e和黄金分割比例ϕ小数点后的w比特构成的整数。当其为偶数时,加1或减1后可变成奇数。具体地讲,当小数点后第w+1比特为1时加1,反之,减1。w=16、32、64时的常数(用十六进制表示)分别为:
P16=b7e1
Q16=9e37
P32=b7e15163
Q32=9e3779b9
P64=b7e151628aed2a6b
Q64=9e3779b97f4a7c15
密钥扩展表是通过以下三部分变化和计算生成的。
(1)将密钥由字节转换成字。设u=w/8,则u为每个字的字节数,将b字节的密钥K[0],K[1], …, K[b-1]从低比特到高比特排列成字,记为 L[0], L[1], …, L[c-1],其中 c=[b/u]。当 u 不能整除b时,则在高比特填补0。
用计算机语言来描述,即先对 L[0], L[1], …, L[c-1]置0,再对 i=b-1至0进行L[i/u]=(L[i/u]<<<8)+K[i]运算。
(2)用常数Pw和Qw生成S数组。令S[0]=Pw,对于i=1到2r+1计算S[i]=S[i-1]+Qw mod 2w,可得S数组,即S[0], S[1], …, S[2r+1]。对于给定的字长w, S数组是固定的以字为单位的常数数组。
(3)将常数数组S与密钥数组L混乱,生成密钥扩展表。密钥扩展表是由S数组和L数组经反复累加、移位生成的,累加、移位的次数为两个数组中较长数组字数的3倍。具体描述如下:
令i=j=0, A=B=0,进行3×max[(2r+2), c]次下列运算:
A=S[i]=(S[i]+A+B)<<<3
B=L[j]+(L[j]+A+B)<<<(A+B)
i=(i+1)mod(2r+2)
j=(j+1)mod c
计算结束后的S[0], S[1], …, S[2r+1]就是加密所用的密钥扩展表。
1.14.2 RC6加密算法
RC6加密算法需要2r+4个层密钥,由b字节的密钥通过密钥扩展算法得到2r+4个层密钥的过程同RC5加密算法完全一样。
加密的过程如下。
将128比特的明文分组分成4个32比特的字(A, B, C, D)后,进行如下运算。
B=B+S[0]
D=D+S[1]
对于i=1到r,进行如下伪代码所示的运算。
{ t=(B×(2B+1))<<<lgw; u=(D×(2D+1))<<<lgw; A=((A⊕t)<<<u)+S[2i]; C=((C⊕u)<<<t)+S[2i+1]; (A, B, C, D)=(B, C, D, A); } A=A+S[2r+2]; C=C+S[2r+3];
(A, B, C, D)即输出的密文。