IDEA加解密

一.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的關係爲:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章