介绍
rc5分组密码算法是1994由麻萨诸塞技术研究所的ronald l. rivest教授发明的,并由rsa实验室分析。它是参数可变的分组密码算法,三个可变的参数是:分组大小、密钥大小和加密轮数。在此算法中使用了三种运算:异或、加和循环。
正文
rc5分组密码算法是1994由麻萨诸塞技术研究所的ronald l. rivest教授发明的,并由rsa实验室分析。它是参数可变的分组密码算法,三个可变的参数是:分组大小、密钥大小和加密轮数。在此算法中使用了三种运算:异或、加和循环。
rc5是种比较新的算法,rivest设计了rc5的一种特殊的实现方式,因此rc5算法有一个面向字的结构:rc5-w/r/b,这里w是字长其值可以是16、32或64对于不同的字长明文和密文块的分组长度为2w位,r是加密轮数,b是密钥字节长度。由于rc5一个分组长度可变的密码算法,为了便于说明在本文中主要是针对64位的分组w=32进行处理的,下面详细说明了rc5加密解密的处理过程:
1、创建密钥组,rc5算法加密时使用了2r+2个密钥相关的的32位字: ,这里r表示加密的轮数。创建这个密钥组的过程是非常复杂的但也是直接的,首先将密钥字节拷贝到32位字的数组l中(此时要注意处理器是little-endian顺序还是big-endian顺序),如果需要,最后一个字可以用零填充。然后利用线性同余发生器模2初始化数组s:
对于i=1到2(r+1)-1: (本应模 ,本文中令w=32)
其中对于16位字32位分组的rc5,p=0xb7e1 q=0x9e37
对于32位字和64位分组的rc5,p=0xb7e15163 q=0x9e3779b9
对于64位字和128位分组,p=0xb7151628aed2a6b q=0x9e3779b97f4a7c15
最后将l与s混合,混合过程如下:
i=j=0
a=b=0
处理3n次(这里n是2(r+1)和c中的最大值,其中c表示输入的密钥字的个数)
2、加密处理,在创建完密钥组后开始进行对明文的加密,加密时,首先将明文分组划分为两个32位字:a和b(在假设处理器字节顺序是little-endian、w=32的情况下,第一个明文字节进入a的最低字节,第四个明文字节进入a的最高字节,第五个明文字节进入b的最低字节,以此类推),其中操作符<<<表示循环左移,加运算是模 (本应模 ,本文中令w=32)的。
输出的密文是在寄存器a和b中的内容
3、解密处理,解密也是很容易的,把密文分组划分为两个字:a和b(存储方式和加密一样),这里符合>>>是循环右移,减运算也是模 (本应模 ,本文中令w=32)的。
rsa试验室花费了相当的时间来分析64位分组的rc5算法,在5轮后统计特性看起来非常好。在8轮后,每一个明文位至少影响一个循环。对于5轮的rc5,差分攻击需要 个选择明文;对10轮需要 个;对于12轮需要 个;对15轮需要 个。而对于64位的分组只有 个可能的明文,所以对于15轮或以上的rc5的差分攻击是失败的。在6轮后线性分析就是安全的了,rivest推荐至少12轮,甚至可能是16轮。这个轮数可以进行选择。
rfc 2040文档中列出了rc5算法密钥生成和加密实现的c代码,在此笔者参照文档中定义的算法结构,编写了用于对密文解密的程序代码(此代码经多次测试运行良好),供读者参考。