- 密碼算法應用實踐
- 文仲慧等
- 1040字
- 2020-04-03 12:46:59
1.11 ICE加密算法
ICE(Information Concealment Engine)是由澳大利亞的Matthew Kwan于1997年提出的一個標準的Feistel分組密碼。ICE加密算法的結構和DES加密算法完全相同。DES加密算法自1977年問世以來,已經被廣泛用于國際標準,許多專家對它進行了專門攻擊研究,它的許多弱點已經逐漸暴露出來,如可以被差分攻擊和線性攻擊等。ICE加密算法在層函數F的設計中采取了一些新的手段來克服DES加密算法的不足,并在運行速度和安全兩方面進行了折中考慮。
ICE加密算法的分組長度為64比特,密鑰長度為64比特,迭代層數為16。64比特的輸入被平分成32比特的左右兩部分,右半部分和60比特的層密鑰作為F函數的輸入,層函數F的輸出同左半部分進行模2加,然后交換左、右兩部分,重復該過程至第16層,最后一層左、右兩部分不交換。同DES加密算法相比,ICE加密算法只是缺少輸入和輸出的變換。
ICE加密算法的F函數結構同DES加密算法的層函數F的結構非常相似。
1.E擴展
將輸入的32比特從左到右依次記為p31、p30、…、p1、p0,按下列規律將32比特擴展成40比特,從左到右記為4個10比特的字,即E1、E2、E3、E4。
E1=p1p0p31p30p29p28p27p26p25p24
E2=p25p24p23p22p21p20p19p18p17p16
E3=p17p16p15p14p13p12p11p10p9p8
E4=p9p8p7p6p5p4p3p2p1p0
2.由密鑰控制的置換和加亂
層密鑰為60比特,記為3個20比特的字SK1、SK2、SK3;記tl=(E1<<10)|E2, tr=(E3<<10)|E4。SK3用于密鑰置換,當SK3的某些比特為1時,tl和tr的相應比特進行交換,可用下面的公式來表示。
t=SK3&(tl⊕tr)
tr=tr⊕t
tl=tl⊕t
SK1和tl進行模2加后作為前兩個S盒的輸入,SK2和tr進行模2加后作為后兩個S盒的輸入。
3.S盒
ICE加密算法有4個S盒,每個S盒的輸入為10比特,輸出為8比特。同DES加密算法相比,雖然ICE加密算法的S盒在數量上是減少了,但是每個S盒都不是固定不變的,而是依據輸入數據的變化而變化的,而且變化量相當大。記S盒的10比特為X,則C為X的中間8比特組成的十進制數;R為X的最高比特和最低比特合成的十進制數;OR為每個S盒第R行的偏移量;PR為每個S盒第R行上的Galois域素數,則每個S盒可由公式(C^OR)7 mod PR生成。ICE加密算法S盒的OR和PR值如表1.11.1所示,表中,OR的值是十六進制的;PR的值是十進制的。
表1.11.1 ICE加密算法S盒的OR和PR值

4.P置換
4個S盒的輸出經一個固定的P置換后合成一個新的32比特輸出,并作為層函數F的輸出。ICE加密算法的P置換表如表1.11.2所示。
表1.11.2 ICE加密算法的P置換表

將64比特的密鑰從左到右均分成4個16比特的分組,記為KB[0]、KB[1]、KB[2]、KB[3],根據表1.11.3所示的密鑰移位表從4個分組中選出某個分組,取出其低比特,依次合成16個60比特的層密鑰,用C語言表示的偽代碼如下:
for n=1 to 16 do { SK=0; for j=1 to 3 do for t=1 to 5 do for i=0 to 3 do { z=(i+KR[n])mod 4; B=KB[z]&1; SK=(SK<<1)|B; KB[z]=(KB[z]>>1)|(~B<<19); } kn=SK; }
表1.11.3 ICE加密算法的密鑰移位表
