一.IDEA算法简介
IDEA(International Data Encryption Alogrithm)是由瑞士苏黎士联邦工业大学的XueJiaLai和James L.Massey 于1991年提出的。IDEA使用128比特密钥,整个算法和DES相似,也是将明文划分成一个个64比特长的数据分组,然后经过几次迭代和一次变换,得出64比特的密文。
IDEA是将两个16比特的值映射为一个16比特的值,这些操作是:
● 半加运算,即“异或”运算,用符号“⊕”表示。所谓的半加运算,就是在进行二进制运算时只加,不进位。
● 模216的加法运算(即mod 65536),用“+”表示。
● 模216+1乘运算用符号“⊙”表示。
实际上,⊙是将两个输入的数进行乘法运算,然后再对此结果按模216+1运算得出的结果。对于这样的运算应该注意的是,参与运算的任何一个二进制数据n位,如果全是0,则用n+1位数据表示,且最高位为1,其余全为0。
为了理解以上三种操作,我们用2位的数来表示以上的三种关系,如表2-3-1所示。
表2-3-1 IDEA三种操作的关系
X
Y
XY
X⊙Y
X⊕Y
十进制
二进制
十进制
二进制
十进制
二进制
十进制
二进制
十进制
二进制
0
00
0
00
0
00
1
01
0
00
0
00
1
01
1
01
0
00
1
01
0
00
2
10
2
10
3
11
2
10
0
00
3
11
3
11
2
10
3
11
1
01
0
00
1
01
0
00
1
01
1
01
1
01
2
10
1
01
0
00
1
01
2
10
3
11
2
10
3
11
1
01
3
11
0
00
3
11
2
10
2
10
0
00
2
10
3
11
2
10
2
10
1
01
3
11
2
10
3
11
2
10
2
10
0
00
0
00
0
00
2
10
3
11
1
01
1
01
1
01
3
11
0
00
3
11
2
10
3
11
3
11
1
01
0
00
3
11
2
10
3
11
2
10
1
01
1
01
1
01
3
11
3
11
2
10
0
00
0
00
二.IDEA算法加密过程
1.IDEA迭代过程
IDEA加密算法采用8次迭代,如图2-3-1所示:
图2-3-1 8次迭代
64比特的密钥生成的数据被分成8个子块,每个子块16比特。每一次迭代过程如图2-3-2所示:
图2-3-2 单次迭代过程
「说明」 图中⊕表示异或运算;表示模216的加法运算; ⊙表示模216+1的乘法运算。
X1,X2,X3和X4作为第一次迭代的输入,每轮的迭代都是4个子块以及16比特子密钥间的异或运算,模216做加法运算和模(216+1)的乘法运算。
迭代步骤如下:
(1)X1和第一个子密钥块做乘法运算。
(2)X2和第二个子密钥块做加法运算。
(3)X3和第三个子密钥块做加法运算。
(4)X4和第四个子密钥块做乘法运算。
(5)(1)和(3)的结果做异或运算。
(6)(2)和(4)的结果做异或运算。
(7)(5)的结果和第五个子密钥块做乘法运算。
(8)(6)和(7)的结果做加法运算。
(9)(8)的结果与第六个子密钥块做乘法运算。
(10)(7)和(9)的结果做加法运算。
(11)(1)和(9)的结果做异或运算。
(12)(3)和(9)的结果做异或运算。
(13)(2)和(10)的结果做异或运算。
(14)(4)和(10)的结果做异或运算。
每轮完成以上的14次运算,共进行8轮,然后进行最后的输出变换,如图2-3-3所示。经过8轮迭代运算后,W81,W82,W83,W84分别与Z48,Z49,Z50,Z51运算得到Y1,Y2,Y3和Y4。其方法如下:
图2-3-3 8轮迭代变换后的输出变换
2.IDEA密钥生成过程
在图2-3-3中可以看出,在加密过程中共有52个子密钥块参与运算,每个块长16比特。这52个密钥块是由128比特密钥产生的,我们将这52个密钥块记为Z0,Z1……,Z51。最初的8个子密钥Z0,Z1,……,Z7是直接来自用户输入,Z0是用户输入密钥的前16比特;Z1是用户输入密钥的第二个16比特,Z7是用户输入密钥的最后16比特。这样从Z0到Z7的密钥共计长度为128比特。
IDEA每一轮迭代使用6个子密钥,每个子密钥有16位,这意味着在一轮迭代中,密钥中只有96位被使用。最初的6个连续的子密钥(Z0到Z5)直接用于第一轮迭代,然后128位的密钥要循环左移25位,之后再取密钥的前96位作为下一轮的6个子密钥。以此类推,直到8轮迭代全部完成。
3.IDEA解密算法与其加密的关系
IDEA的解密处理和其加密处理基本相同,只是解密处理输入的是密文,选择的密钥不大相同,但也有一定的联系。它与加密密钥的关系如下。
解密过程的第i轮前四个密钥是与加密过程中的第(10-i)轮的相同,最后置换作为第9轮。解密过程的第1和第4轮是对应加密处理过程第1轮和第4轮的模(216+1)乘运算,解密过程中的第2轮和第3轮对应与加密过程中的第3轮和第2轮的模216的加运算。
在前8轮运算中,解密的第i轮的最后两个子密钥块等于加密过程中的第9-i轮的最后两个子密钥块。每一轮的加密和解密的子密钥关系如表2-3-2所示。
表2-3-2 加密和解密的子密钥关系
加解密轮次
每轮的加密密钥
原始密钥对应的位
第一轮
Z0Z1Z2Z3Z4Z5
Z48-1-Z49-Z50Z51-1Z46Z47
第二轮
Z6Z7Z8Z9Z10Z11
Z42-1-Z44-Z43Z45-1Z40Z41
第三轮
Z12Z13Z14Z15Z16Z17
Z36-1-Z38-Z37Z39-1Z34Z35
第四轮
Z28Z19Z20Z21Z22Z23
Z30-1-Z32-Z31Z33-1Z28Z29
第五轮
Z34Z25Z26Z27Z28Z29
Z24-1-Z26-Z25Z27-1Z22Z23
第六轮
Z30Z31Z32Z33Z34Z35
Z18-1Z20-Z19Z21-1Z18Z17
第七轮
Z46Z37Z38Z39Z40Z41
Z12-1Z14-Z13Z15-1Z10Z11
第八轮
Z42Z43Z44Z45Z46Z47
Z6-1-Z8-Z7Z9-1Z4Z5
最后的置换
Z48Z49Z50Z51
Z0-1-Z1-Z2Z3-1
以上Zj与Zj-1及-Zj与Zj的关系为:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。