一.IDEA算法簡介
專注于為中小企業(yè)提供網站設計制作、網站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)歙縣免費做網站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網行業(yè)人才,有力地推動了近1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網站建設實現(xiàn)規(guī)模擴充和轉變。
IDEA(International Data Encryption Alogrithm)是由瑞士蘇黎士聯(lián)邦工業(yè)大學的XueJiaLai和James L.Massey 于1991年提出的。IDEA使用128比特密鑰,整個算法和DES相似,也是將明文劃分成一個個64比特長的數(shù)據(jù)分組,然后經過幾次迭代和一次變換,得出64比特的密文。
IDEA是將兩個16比特的值映射為一個16比特的值,這些操作是:
● 半加運算,即“異或”運算,用符號“⊕”表示。所謂的半加運算,就是在進行二進制運算時只加,不進位。
● 模216的加法運算(即mod 65536),用“+”表示。
● 模216+1乘運算用符號“⊙”表示。
實際上,⊙是將兩個輸入的數(shù)進行乘法運算,然后再對此結果按模216+1運算得出的結果。對于這樣的運算應該注意的是,參與運算的任何一個二進制數(shù)據(jù)n位,如果全是0,則用n+1位數(shù)據(jù)表示,且最高位為1,其余全為0。
為了理解以上三種操作,我們用2位的數(shù)來表示以上的三種關系,如表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比特的密鑰生成的數(shù)據(jù)被分成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個連續(xù)的子密鑰(Z0到Z5)直接用于第一輪迭代,然后128位的密鑰要循環(huán)左移25位,之后再取密鑰的前96位作為下一輪的6個子密鑰。以此類推,直到8輪迭代全部完成。
3.IDEA解密算法與其加密的關系
IDEA的解密處理和其加密處理基本相同,只是解密處理輸入的是密文,選擇的密鑰不大相同,但也有一定的聯(lián)系。它與加密密鑰的關系如下。
解密過程的第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的關系為: