密码算法应用实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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比特从左到右依次记为p31p30、…、p1p0,按下列规律将32比特扩展成40比特,从左到右记为4个10比特的字,即E1E2E3E4

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时,tltr的相应比特进行交换,可用下面的公式来表示。

t=SK3&(tltr)

tr=trt

tl=tlt

SK1tl进行模2加后作为前两个S盒的输入,SK2tr进行模2加后作为后两个S盒的输入。

3.S

ICE加密算法有4个S盒,每个S盒的输入为10比特,输出为8比特。同DES加密算法相比,虽然ICE加密算法的S盒在数量上是减少了,但是每个S盒都不是固定不变的,而是依据输入数据的变化而变化的,而且变化量相当大。记S盒的10比特为X,则CX的中间8比特组成的十进制数;RX的最高比特和最低比特合成的十进制数;OR为每个S盒第R行的偏移量;PR为每个S盒第R行上的Galois域素数,则每个S盒可由公式(C^OR)7 mod PR生成。ICE加密算法S盒的ORPR值如表1.11.1所示,表中,OR的值是十六进制的;PR的值是十进制的。

表1.11.1 ICE加密算法S盒的ORPR

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加密算法的密钥移位表