在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
IDEA数据加密算法及实现
作者:成晓旭 IDEA对称数据加密算法,是我2000年刚毕业,工作需要进行数据加密时,学习、实现的第一个标准数据加密算法,并且此后就深深地迷上了数据加密这个方面,以后连续两年潜心学习和研究这方面的知识与技术。在此过程中,非常感谢同事李哥对我的大力帮助,并从此成了很好的朋友。 1、 简介
IDEA是International Data Encryption Algorithm 的缩写,是1990年由瑞士联邦技术学院来学嘉X.J.Lai 和Massey提出的建议标准算法称作PES( Proposed Encryption Standard) 。Lai 和Massey 在1992 年进行了改进强化了抗差分分析的能力改称为IDEA 它也是对64bit大小的数据块加密的分组加密算法**长度为128位它基于“相异代数群上的混合运算”设计思想算法用硬件和软件实现都很容易且比DES在实现上快的多。IDEA自问世以来,已经经历了大量的详细审查,对密码分析具有很强的抵抗能力,在多种商业产品中被使用。 这种算法是在DES算法的基础上发展出来的,类似于三重DES。发展IDEA也是因为感到DES具有**太短等缺点,已经过时。IDEA的**为128位,这么长的**在今后若干年内应该是安全的。 类似于DES,IDEA算法也是一种数据块加密算法,它设计了一系列加密轮次,每轮加密都使用从完整的加***中生成的一个子**。与DES的不同处在于,它采用软件实现和采用硬件实现同样快速。 由于IDEA是在美国之外提出并发展起来的,避开了美国法律上对加密技术的诸多限制,因此,有关IDEA算法和实现技术的书籍都可以自由出版和交流,可极大地促进IDEA的发展和完善。 2、 算法详解:
2.1产生**
算法用了52个子**(8轮中的每一轮需要6个,其他4个用与输出变换)。首先,将128-位**分成8个16-位子**。这些是算法的第一批8个子**(第一轮六个,第二轮的头两个)。然后,**向左环移x位后再分成8个子**。开始4个用在第二轮,后面4个用在第三轮。**再次向左环移25位产生另外8个子**,如此进行直到算法结束。具体是: IDEA总共进行8轮迭代操作,每轮需要6个子**,另外还需要4个额外子**,所以总共需要52个子**,这个52个子**都是从128位**中扩展出来的。 首先把输入的Key分成8个16位的子**, 1~6号子**供第一轮加密使用,7~8号子**供第二轮使用,然后把这个128位**循环左移25位,这样Key = k26k27k28…k24k25。 把新生成的Key在分成8个16位的子**,1~4号子**供第二轮加密使用(前面已经提供了两个)5~8号子**供第三轮加密使用。到此我们已经得到了16个子**,如此继续,当循环左移了5次之后已经生成了48个子**,还有四个额外的子**需要生成,再次把Key循环左移25位,选取划分出来的8个16位子**的前4个作为那4个额外的加***.供加密使用的52个子**生成完毕。 输入的64-位数据分组被分成4个16-位子分组:xl,X2,x3和x4。这4个子分组成为算法的第一轮的输入,总共有8轮。在每一轮中,这4个子分组相互相异或,相加,相乘,且与6个16-位子**相异或,相加,相乘。在轮与轮间,第二和第三个子分组交换。最后在输出变换中4个子分组与4个子**进行运算。 2.2加、解密过程
在每一轮中,执行的顺序如下: (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)步的结果相异或。 每一轮的输出是第(11)、(12)、(13)和(14) 步的结果形成的4个子分组。将中间两个分组分组交换(最后一轮除外)后,即为下一轮的输入。 经过8轮运算之后,有一个最终的输出变换: (1) X1和第一个子**相乘。 (2) x2和第二个子**相加。 (3) x3和第三个子**相加。 (4) x4和第四个子**相乘。 最后,这4个子分组重新连接到一起产生密文。 2.3**对应图
<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="[email protected]@[email protected]@[email protected]@[email protected]@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 415.5pt; HEIGHT: 187.5pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CCHENGX~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg" o:title="**对应表"></imagedata></shape>
2.4加密过程图
<shape id="_x0000_i1026" style="WIDTH: 414.75pt; HEIGHT: 252pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CCHENGX~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.jpg" o:title="加密过程"></imagedata></shape> 2.5解密过程图
<shape id="_x0000_i1027" style="WIDTH: 414.75pt; HEIGHT: 231pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CCHENGX~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image005.jpg" o:title="解密过程"></imagedata></shape> 3、 评价:
IDEA算法的**长度为128位。设计者尽最大努力使该算法不受差分密码分析的影响,数学家已证明IDEA算法在其8圈迭代的第4圈之后便不受差分密码分析的影响了。假定穷举法攻击有效的话,那么即使设计一种每秒种可以试验10亿个**的专用芯片,并将10亿片这样的芯片用于此项工作,仍需1013年才能解决问题;另一方面,若用1024片这样的芯片,有可能在一天内找到**,不过人们还无法找到足够的硅原子来制造这样一台机器。目前,尚无一片公开发表的试图对IDEA进行密码分析的文章。因此,就现在来看应当说IDEA是非常安全的。 并且,IDEA数据比较RSA算法加、解决速度快得多,又比DES算法要相对安全得多。 4、 参考文献:
《应用密码学(协议算法与C源程序)》:机械工业出版社 5、 源码:
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1109279 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论