DES是个经典的算法,从1974年IBM发明DES算法开始,它应经被广泛应用全世界的金融服务和其他工业中,但是它的缺点也是很明显的。下面我们就从它的缺点说起。
DES第一个缺点就是密钥长度过短。
DES的加密单位仅有64位二进制,而且其中某些位还要削于奇偶校验或其他通讯开销,有效密钥只有56位,这种特性必然降低了密码体制的安全性。因此,人们会对56位密钥的安全性产生质疑,那么56位密钥是否足够,已成为人们争论的焦点之一。
不幸的是,随着时间推移,各种能够明显降低,通过暴力破解来发现DES密钥的捷径被发现。并且随着计算机变得越来越快,越来越强大,56位密钥被认为对于高安全性的程序是不够长的。鉴于这些严重的缺点,NIST在1997年放弃了对DES的官方支持,并且开始研究它的替代者,被称为高级加密标准(Advanced Encryption Standard,简称AES)。
为了强调大于56位密钥对高强度安全的重要性,RAS数据安全(RSA Data Security)从1997年早期就发起了一系列的DES攻击竞赛。1998年电子前沿基金会(Electronic Frontier Foundation)在不到三天的时间里攻破了DES,赢得了RSA DES挑战II-2竞赛,EFF(电子前沿基金会缩写)用了一种专门开发的计算机,叫做DES破解者,它的造价不到25万美元。它的加密芯片能够使DES破解者有每秒钟产生880亿密钥的能力。更近一些,在1999年早期,分布式网络(Distributed. Net)创纪录的用22小时15分钟,利用DES破解者和全世界接近10万台电脑组成的网络赢得了RSA DES挑战III竞赛。DES破解者和联网电脑合起来每秒能够测试2450亿的密钥。另外,已经被证实,可以组建花费10万美元的硬件设施,以使其在3.5小时内攻破DES。这恰好验证了现在任何组织,只要利用现代化的资源就可以轻松破解DES。
DES还有一个缺点就是存在弱密钥。
在DES算法中存在12个半弱密钥和4个弱密钥。由于在子密钥的产生过程中,密钥被分成了2个部分,如果这2个部分分成了全0或全l,那么每轮产生的子密钥都是相同的,当密钥是全0或全l,或者一半是l或0时,就会产生弱密钥或半弱密钥,DES算法的安全性就会变弱。在设定密钥时应避免弱密钥或半弱密钥的出现。
说了这么多DES的坏话,其实只要你对DES稍加调教,他还会变成一个听话的孩子的。下面是我对它的改进。
其实对于DES的缺点暴露了也不是一天两天了,也有很多应对的措施,如果3-DES。 受到3-DES的启发,我设计出了N-DES的算法,即密钥的个数是用法自定义的。
3DES使用K1、K2、K3对同一组明文进行多重加密,密钥长度为168(56×3)。具体实现过程如图1所示:
图1 3-DES加解密
(a)加密过程;(b)解密过程
虽然在3-DES中密钥位数为168位,但是对于现在的计算机来说,还是破解的可能。
NES中之所以带有N,意指密钥个数不确定之意,在加密时手动输入密钥的长度,首先就达到了一次一密的效果。只要增加了密钥的位数,就会使破解的难度成指数增长,然而破解者根本就不知道密钥的长度,使穷举的时间愈加延长。此外,此算法使用外部文件来存取密钥,基于此,还可以用来做签名。
N-DES的具体实现过程是这样的:首先密钥分为两种,一种是默认密钥,一种是随机密钥;默认密钥只有64位,在程序中是固定的(当然,也可以是随时更改的,为了实现方便,我把它固定了),随机密钥有(N-1)×64位(确切的说是(N-1)×56位,因为每个密钥中有8个校验位);加密时,用户输入随机密钥个数m,程序进行(m+1)次加密(因为还有一个固定密钥),同时程序生成key.txt来保存密钥;解密时,程序读取固定密钥和key.txt中的密钥进行解密。N-DES的加解密过程如下图:
图2 N-DES加密过程
(a)加密过程 (b)解密过程
这样理论上密钥的个数就是无限大的,当然受制于运算时间,不会设置得太大,在测试中3KB的文本文件,用了11次加密后,加密的时间大概有2秒之久,这在处理大数据肯定会有一个漫长的等待,更不用说我们将密钥的长度增大时。还有对于外部密钥文件的保存也是个需要考虑的问题。