国际数据加密算法(IDEA)简介

1. 背景与历史

国际数据加密算法(International Data Encryption Algorithm,IDEA)是最强大的加密算法之一。
尽管IDEA很强大,但不想DES那么普及,原因有两个:第一,IDEA受专利的保护,而DES不受专利的保护,IDEA要先获得许可证之后才能在商业应用程序中使用;第二,DES比IDEA具有更长的历史和跟踪记录。

2. IDEA的工作原理

2.1 基本原理
IDEA是块加密,与DES一样,IDEA也处理64位明文块。但是,其密钥更长,共128位。和DES一样,IDEA是可逆的,即可以用相同的算法加密和解密。IDEA也用扩展与混淆进行加密。下图显示了IDEA的工作方法:
在这里插入图片描述
64位输入明文块分成4个部分(各16块)P1~ P4。P1~ P4是算法的第一轮输入,共8轮。密钥为128位,每一轮从原先的密钥产生6个子密钥,各位16位。这个6个子密钥作用于4个输入块P1~ P4。第一轮,有6个密钥K1~ K6;第二轮,有6个密钥K7~ K12;最后,第8轮,有6个密钥K43~ K48。最后一步是输出变换,只用4个子密钥(K49~ K52)。产生的最后输出是输出变换的输出,为4个密文块C1~ C4(各为16位),从而构成64位密文块。
2.2 轮次
IDEA中有8轮,每一轮位6个密钥对4个数据块的一系列操作。广义上看这些步骤如下图所示:
在这里插入图片描述
我们对上图进行符号化,描述的步骤与前面一样,输入块表示为P1~ P4,子密码表示为K1~ K6,这个步骤的输出表示为R1~ R4,而不是C1~ C4,因为这不是最终密文,只是中间输出,要在后面的各轮和输出变换中处理。其示意图如下:
在这里插入图片描述
注意,在Add和Multiply后面加上星号,使其变成Add ∗ * 和Multiply ∗ * ,因为这不只是加和乘,而是加后用 2 16 2^{16} 216求模,乘后用 2 16 + 1 2^{16}+1 216+1求模。IDEA采用求模算法,保证即使两个16位数加或者相乘的结果超过17位,也能缩减到16位。
2.3 子密钥生成
IDEA每一轮需要6个子密钥(因此8轮共需要48个子密钥),最后输出变换使用4个子密钥(共需要52个子密钥)。从128位的输入密钥得到52位子密钥,其前两轮的做法如下(根据前两轮的做法,可以得到后面各轮的子密钥表):

  • 第一轮
    原始密钥为128位,可以产生第一轮的6个子密钥K1~ K6。由于K1~ K6各为16位,因此用到128位中的前96位(6个子密钥,各为16位)。这样,第一轮结束时,97~ 128位密钥还没有使用,如下图所示:
    在这里插入图片描述
  • 第二轮
    第二轮首先使用第一轮没有使用过的32位(97~ 128位)密钥,我们一共需要96位密钥,因此IDEA采用了密钥移位技术,在这个阶段,原始密钥循环左移25位,即原始密钥的第26位移到第1位,称为移位后的第1位,原始密钥的第25位移到最后一位,称为移位后的第128位。其整个过程如下图所示:
    在这里插入图片描述
    可以看到,第二轮使用了第一轮的97~ 128位,以及经过25位移位后的1~ 64位。然后,第三轮其余的部分,即65~ 128位(总共64位)。再次进行25位的移位,移位后,在第三轮使用1~32位,以此类推,如下表所示:
轮次子密钥生成过程
1使用原始128位密钥的1~ 96位,从而在第一轮中有6个子密钥K1~ K6。97~ 128位留给下一轮用
2第一轮未用的97~ 128位用作本轮的K1和K2。原始密钥进行25位移位,如上面所述。移位后,前64位用作本轮的子密钥K3~ K6。剩下的65~ 128位留给下一轮用
3上一轮未用的65~ 128位用作本轮的K1~ K4。密钥用完后,再进行一次25位移位,移位后的密钥的1~ 32位用作本轮的子密钥K5和K6。剩下的33~ 128位留给下一轮用
4上一轮未用的33~ 128位正好用作本轮的6个子密钥。此时没有未用的位了。然后,对当前密钥再进行移位
5本轮类似于第一轮。本轮使用当前密钥的1~ 96位。97~ 128 位留给下一轮用
6上一轮未用的97~ 128位用作本轮的K1和K2。原始密钥进行25位移位,如上面所述。移位后,前64位用作本轮的子密钥K3~ K6。剩下的65~ 128位留给下一轮用
7上一轮未用的65~ 128位用作本轮的K1~ K4。密钥用完后,再进行一次25位移位,移位后的密钥的1~ 32位用作本轮的子密钥K5和K6。剩下的33~ 128位留给下一轮用
8上一轮未用的33~ 128位正好用作本轮的6个子密钥。此时没有未用的位了。然后,对当前密钥再进行移位,用作输出变换

2.4 输出变换
输出变换只进行一次,在第8轮结束时发生。当然输出变换的输入是第8轮的输出。64位值分为四个子块(R1~ R4,各16位),另外,这里采用四个子密钥,而不是六个。其过程如下图所示:
在这里插入图片描述
对上图进行符号化,可以得到输出变换的框图,如下图所示:
在这里插入图片描述
这个过程得到最终的64位密文,是由4个密文块C1~ C4组合而成的。
2.5 输出变换的子密钥生成过程
输出变换的子密钥生成过程与上面8轮的密钥生成过程差不多。第8轮结束时,刚好用完密钥,因此输出变换过程首先要对密钥进行25位循环左移。第8轮的结束位为125,经过25位移位后,新的开始位置位23,结束位置为22。由于输出变换过程只要四个密钥,各16位,共64位,因此使用23到86位。其余的87~ 128和1~ 22位不用,将其放弃。
2.6 IDEA解密
解密过程与加密过程完全相同,只是子密钥的生成与模式有所不同。解密子密钥实际上是加密子密钥的逆。
2.7 IDEA的强度
IDEA使用128位密钥,是DES密钥长度的两倍,因此破译IDEA,纪要进行 2 128 2^{128} 2128次加密运算,去的正确的密钥只要平均搜索一半的密钥空间,每微秒执行一次IDEA加密的计算机也要5 400 000 000 000 000 000 000 000年才能破解IDEA。

  • 17
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhInen丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值