2024年4月25日发(作者:)
实现基于IDEA算法的加密工具
算法的相关背景
1990年XueJia Lai和Massey开发出IDEA加密算法雏形,称为PES,即"建议的加密标准"。第二年,根据
有关专家对这一密码算法的分析结果,设计者对该算法进行了强化并称之为IPES,即"改进的建议加密标
准"。该算法于1992年更名为IDEA,即"国际加密标准"。
IDEA算法的密钥长度为128位,针对64位的数据进行加密或解密操作.设计者尽可能使该算法不受差分密
码分析的影响,XueJia Lai已证明IDEA算法在其8轮迭代的第4圈之后便不受差分密码分析的影响了。
假定穷举法攻击有效的话,那么即使设计一种每秒种可以试验10亿个密钥的专用芯片,并将10亿片这样
的芯片用于此项工作,仍需1013年才能解决问题;另一方面,若用1024片这样的芯片,有可能在一天内
找到密钥,不过人们还无法找到足够的硅原子来制造这样一台机器。目前,尚无一片公开发表的试图对IDEA
进行密码分析的文章。因此,就现在来看应当说IDEA是非常安全的。
IDEA有大量的弱密钥,这些弱密钥是否会威胁它的安全性还是一个迷。IDEA密码能够抵抗差分分析和线性
分析。 设计者Lai认为IDEA不是一个群,但目前仍未得到证实。
Eurocrypt'97会议上给出了两种新的攻击低圈IDEA的方法,第一种攻击方法可破译大约3·5-圈的IDEA;
第二种攻击方法可破译大约3-圈的IDEA。但从分析结果来看,这两种攻击方法并未对IDEA的安全性构成
威胁。
算法概述
IDEA是一个迭代分组密码,分组长度为64比特,密钥长度为128比特。
IDEA密码中使用了以下三种不同的运算:
逐位异或运算;
模216加运算;
模216+1乘运算,0与216对应。
IDEA算法是由8轮迭代和随后的一个输出变换组成。它将64比特的数据分成4个子块,每个16比特,令
这四个子块作为迭代第一轮的输出,全部共8轮迭代。每轮迭代都是4个子块彼此间以及16比特的子密钥
进行异或,模216加运算,模216+1乘运算。除最后一轮外把每轮迭代输出的四个子块的第二和第三子块
互换。该算法所需要的"混淆"可通过连续使用三个"不相容"的群运算于两个16比特子块来获得,并且该算
法所选择使用的MA-(乘加)结构可提供必要的"扩散"。
算法的具体描述
3.1密钥生成
用户输入128位长密钥
Key = k1k2k3…k127k128
IDEA总共进行8轮迭代操作,每轮需要6个子密钥,另外还需要4个额外子密钥,所以总共需要52个子密钥,
这个52个子密钥都是从用户输入的128位密钥中扩展出来的.
首先把输入的Key分成8个16位的子密钥, 1~6号子密钥供第一轮加密使用,7~8号子密钥供第二轮使用,
然后把这个128位密钥循环左移25位,这样Key = k26k27k28…k24k25
把新生成的Key在分成8个16位的子密钥,1~4号子密钥供第二轮加密使用(前面已经提供了两个)5~8号子
密钥供第三轮加密使用 ,到此我们已经得到了16个子密钥,如此继续,当循环左移了5次之后已经生成了
48个子密钥,还有四个额外的子密钥需要生成,再次把Key循环左移25位,选取划分出来的8个16位子密
钥的前4个作为那4个额外的加密密钥.供加密使用的52个子密钥生成完毕.
K[0]
K[1]
K[2]
K[3]
K[4]
K[5]
…
K[48]
K[49]
K[50]
K[51]
第一轮
…
额外密钥
3.2加密明文
64-位数据分组被分成4个16-位子分组:D0,D1,D2,D3。这4个子分组成为算法的第一轮的输入,总共有8
轮。
在第i轮中,假定输入的为:
明文(4组):D0,D1,D2,D3
密钥(6组) K1, K2, K3, K4, K5,K6
执行的顺序如下:
D0和第一个子密钥(K1) 模216+1乘。
D1和第二个子密钥(K2) 模216加。
D2和第三个子密钥(K3) 模216加。
D4和第四个子密钥(K4) 模216+1乘。
第(1)步和第(3)步的结果相异或。
将第(2)步和第(4)步的结果相异或。
将第(5)步的结果与第五个子密钥(K5) 模216+1乘。
将第(6)步和第(7)步的结果模216加。
将第(8)步的结果与第六个子密钥(K6) 模216+1乘。
将第(7)步和第(9)步的结果模216加。
将第(1)步和第(9)步的结果相异或。
将第(3)步和第(9)步的结果相异或。


发布评论