IDEA加密过程的初始输入是64bit的明文分组X和128bit的种子密钥Z,64bit的明文分组X被分成4个16bit的子段X1,X2,X3,X4作为输入。IDEA的加密过程由连续的8轮迭代和一个输出变换组成,每轮迭代以4个16bit的子段作为输入,输出也为4个16bit的子段。最后的输出变换也产生4个16bit的子段Y1,Y2,Y3,Y4,连接起来后形成64bit的密文分组,如图4-10所示。每轮迭代还需使用6个16bit的子密钥,最后的输出变换需使用4个16bit的子密钥,所以子密钥总数为52。图4-10的右半部分表示由初始的128bit种子密钥生成52个子密钥的子密钥生成器。
图4-10 IDEA整体加密过程结构框图
1.IDEA加密过程
图4-11的上半部分是IDEA第1轮细化后的结构示意图,以后各轮也都是这种结构,但所用的子密钥和轮输入不同,图的下半部分是最后的输出变换,与其他8轮相比,没有使用MA结构。从结构图可见,IDEA没有采用Feistel结构。每轮开始是两个乘法和两个加法运算,输出的4个子段两两异或得到的两个16bit子段作为MA结构的输入,MA结构也有两个输入的子密钥,输出是两个16bit的子段。具体运算过程如下:
1)由Z形成52个长度为16bit子密钥Z(1)1,…,Z(1)6,…,Z(8)1,…,Z(8)6,Z(9)1,…,Z(9)4。64bit明文X从左到右分成4个16bit的子段X1,X2,X3,X4。
2)第1轮的运算过程如下,其他2~8轮类似。
3)输出变换。
输出X的密文(Y1,Y2,Y3,Y4),其中Yi(1≤i≤4)均为16bit的子段。
图4-11 IDEA加密算法轮结构
注意,由X2产生的输出子段和由X3产生的输出子段交换位置后形成W12和W13,目的在于进一步增加混淆效果,使得算法更易抵抗差分密码分析。
2.子密钥的产生
加密过程中52个16bit的子密钥是由128bit的种子密钥按如下方式产生的:前8个子密钥Z(1)1,Z(1)2,…,Z(1)6,Z(2)1,Z(2)2直接从加密密钥中取,即Z(1)1取前16bit(最高有效位),Z(1)2取下面的16bit,依此类推。然后加密密钥循环左移25bit,再依次取8个子密钥得到Z(2)3,…,Z(2)6,Z(3)1,…,Z(3)4,取法与Z(1)1,Z(1)2,…,Z(1)6,Z(2)1,Z(2)2的取法相同。这一过程重复下去,直到52个子密钥都产生为止。
【例4-10】 假设IDEA的初始密钥
(www.xing528.com)
试确定由初始密钥产生的子密钥。
IDEA算法要求由初始密钥Z产生52个加密子密钥,每个16bit。前8个子密钥如下:
接下来将Z向左循环左移25bit,然后依次按16bit为一组进行选取,分别得到:
再将Z继续循环左移25bit,还是每次按16bit为一组进行选取,产生8个子密钥;如此重复,每次循环左移25bit,产生8个子密钥,直至产生出所需的52个16bit的子密钥。
3.IDEA解密过程
解密过程和加密过程基本相同,但子密钥的选取不同。解密子密钥K1,K2,…,K52由加密子密钥按如下方式得到(将加密过程最后一步的输出变换当做第9轮):
其中,K(i)j是解密子密钥;Z(i)j是加密子密钥;Z(i)j的模216+1乘法逆元为(Z(i)j)-1,满足
Z(i)j☉(Z(i)j)-1≡1mod(216+1)
因216+1是一素数,所以每一个不大于216的非0整数都有一个唯一的模216+1乘法逆元。
Z(i)j的模216加法逆元为-Z(i)j,满足
在解密过程中,输入4个16bit的密文子段Y1,Y2,Y3,Y4,解密子密钥K(i)j按如上方式选取,经过9轮变换,得到4个16bit的明文子段X1,X2,X3,X4,输出明文X=X1X2X3X4。由此可以得知,整个解密过程的输出等于整个加密过程的输入。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。