IDEA数据加密算法介绍

news/2024/7/3 10:16:58

IDEA数据加密算法及实现

 作者:成晓旭

IDEA对称数据加密算法,是我2000年刚毕业,工作需要进行数据加密时,学习、实现的第一个标准数据加密算法,并且此后就深深地迷上了数据加密这个方面,以后连续两年潜心学习和研究这方面的知识与技术。在此过程中,非常感谢同事李哥对我的大力帮助,并从此成了很好的朋友。

1、   简介

IDEAInternational 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位,这么长的密钥在今后若干年内应该是安全的。

类似于DESIDEA算法也是一种数据块加密算法,它设计了一系列加密轮次,每轮加密都使用从完整的加密密钥中生成的一个子密钥。与DES的不同处在于,它采用软件实现和采用硬件实现同样快速。

由于IDEA是在美国之外提出并发展起来的,避开了美国法律上对加密技术的诸多限制,因此,有关IDEA算法和实现技术的书籍都可以自由出版和交流,可极大地促进IDEA的发展和完善。

2、   算法详解:

2.1产生密钥

算法用了52个子密钥(8轮中的每一轮需要6个,其他4个用与输出变换)。首先,将128-位密钥分成816-位子密钥。这些是算法的第一批8个子密钥(第一轮六个,第二轮的头两个)。然后,密钥向左环移x位后再分成8个子密钥。开始4个用在第二轮,后面4个用在第三轮。密钥再次向左环移25位产生另外8个子密钥,如此进行直到算法结束。具体是:

IDEA总共进行8轮迭代操作,每轮需要6个子密钥,另外还需要4个额外子密钥,所以总共需要52个子密钥,这个52个子密钥都是从128位密钥中扩展出来的。

首先把输入的Key分成816位的子密钥, 1~6号子密钥供第一轮加密使用,7~8号子密钥供第二轮使用,然后把这个128位密钥循环左移25位,这样Key = k26k27k28k24k25

把新生成的Key在分成816位的子密钥,1~4号子密钥供第二轮加密使用(前面已经提供了两个)5~8号子密钥供第三轮加密使用。到此我们已经得到了16个子密钥,如此继续,当循环左移了5次之后已经生成了48个子密钥,还有四个额外的子密钥需要生成,再次把Key循环左移25,选取划分出来的816位子密钥的前4个作为那4个额外的加密密钥.供加密使用的52个子密钥生成完毕。

输入的64-位数据分组被分成416-位子分组:xlX2x3x4。这4个子分组成为算法的第一轮的输入,总共有8轮。在每一轮中,这4个子分组相互相异或,相加,相乘,且与616-位子密钥相异或,相加,相乘。在轮与轮间,第二和第三个子分组交换。最后在输出变换中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密钥对应图

2.4加密过程图

2.5解密过程图

3、   评价:

IDEA算法的密钥长度为128位。设计者尽最大努力使该算法不受差分密码分析的影响,数学家已证明IDEA算法在其8圈迭代的第4圈之后便不受差分密码分析的影响了。假定穷举法攻击有效的话,那么即使设计一种每秒种可以试验10亿个密钥的专用芯片,并将10亿片这样的芯片用于此项工作,仍需1013年才能解决问题;另一方面,若用1024片这样的芯片,有可能在一天内找到密钥,不过人们还无法找到足够的硅原子来制造这样一台机器。目前,尚无一片公开发表的试图对IDEA进行密码分析的文章。因此,就现在来看应当说IDEA是非常安全的。

并且,IDEA数据比较RSA算法加、解决速度快得多,又比DES算法要相对安全得多。

4、   参考文献:

《应用密码学(协议算法与C源程序)》:机械工业出版社

5、   源码:

 



http://www.niftyadmin.cn/n/3649193.html

相关文章

Python+Django+Ubuntu+Apache+Nginx架设服务器成功记

是看一个国外网站一步一步照着来的,复制过来 http://www.ventanazul.com/webzine/tutorials/django-deployment-guide-ubuntu Theres a time when every Django developer has to think about deployment scenarios, when I first did it last year I thought that…

Android实战技术:启动另一个App/apk中的Activity

Android提供了在一个App中启动另一个App中的Activity的能力,这使我们的程序很容易就可以调用其他程序的功能,从而就丰富了我们App的功能。比如在微信中发送一个位置信息,对方可以点击这个位置信息启动腾讯地图并导航。这个场景在现实中作用很…

Android studio的安装和配置

1.下载:到 https://developer.android.com/sdk/index.html 去下载Android Stuido 2.安装步骤1、2、 红色箭头依次说明: Android Studio: 强制选项,为IDE工具部分_ Android SDK: 可选选项,为SDK工具包部分_ Android Virtual De…

nestjs_NestJS入门

nestjs介绍 (Introduction) If you’ve worked on a Node.js application, you may have noticed that it became more difficult to maintain over time. The more you add new features to the application, the larger the codebase becomes. 如果您使用的是Node.js应用程序…

Django 上传文件出现 OSError Permission denied的解决办法

我的服务器在Ubuntu上,使用了ApacheNginx做App Server,DjangoPython开发,今天上传文件时候出现了OSError的错误,具体原因为Permission denied 一看发现是因为上传文件的文件夹可能没有被赋予www-data用户(Apache和Ngi…

[收藏]你就不是我们所需要的那种层次的领导

引用自:21世纪领导者的挑战-多样性(http://www.mindmeters.com/blogind.asp?id4)看了《Ready to Leader》,一个领导力故事。山姆(故事中的公司董事长,领导力典范)说,“如果你想改变这个世界&am…

使用Android系统自带的下拉刷新控件

首先布局: <?xml version"1.0" encoding"utf-8"?> <android.support.v4.widget.SwipeRefreshLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"andro…

Django Admin Site (v1.4) 的Nginx配置

本人写本文是因为发现在使用NginxApache搭建完Django站点后&#xff0c;admin site显示的很丑陋。查看源码后发现&#xff0c;admin的css、js和图片都无法正常显示 baidu了一些资料&#xff0c;操作下来也不成功&#xff0c;可能是Django的版本更新的关系。所以自己写一下配置…