2.DES算法的弱密钥
由于算法各轮的子密钥是通过改变初始密钥这种方式得到的,因此有些初始密钥成了弱密钥(weakkey)。初始密钥分成两部分,每部分各自独立的移动。如果每一部分的所有位都是0或1,那么算法的任意一个周期的密钥都是相同的。当密钥是全1、全0、或者一半全1、一半全0时,会发生这种情况。下面以十六进制编码的方式给出了四种弱密钥。
另外,还有一些密钥对明文加密成相同的密文。换句话说,密钥对里的一个密钥能解密另外一个。
密钥加密的信息。这是由DES产生子密钥(subkey)的方式决定的。这些密钥只产生2个不同的子密钥,算法中每个这样的子密钥都使用了8次。这样的子密钥叫半弱密钥(semiweakkey),下表以十六进制编码方式给出它们。
另外,也只有产生4个子密钥的密钥,每个这样的子密钥在算法中使用了4次。下面给出他们的十六进制编码形式
虽然DES有弱密钥,但这张64个密钥的密钥表相对于总数位72,057,594,037,927,936个可能密钥的密钥集只是个零头,如果随机的选择密钥,选中这些弱密钥的可能性可以忽略。而且我们可以在选择密钥时进行检查,以防止产生弱密钥
3.密钥的长度
密钥仅有56位二进制未免太短,多密码学专家力荐使用更长的密钥,理由是穷举攻击的可能性。设已知一段密码文C及与它对应的明码文M,用一切可能的密钥K加密M,直到得到E(M)=C,这时所用的密钥K即为要破译的密码的密钥。穷举法的时间复杂性是T=O(n),空间复杂性是S=O(1)。对于DES密码,n=256≈7×106,即使使用每秒种可以计算一百万个密钥的大型计算机,也需要算106天才能求得所使用的密钥,因此看来是很安全的。
但是密码专家Diffie和Hellman指出,如果设计一种一微秒可以核算一个密钥的超大规模集成片,那么它在一天内可以核算8.64×1010个密钥。如果由一个百万个这样的集成片构成专用机,那么它可以在不到一天的时间内用穷举法破译DES密码。他们当时(1977年)估计:这种专用机的造价约为两千万美元。如果在五年内分期偿还,平均每天约需付一万美元。由于用穷举法破译平均只需要计算半个密钥空间,因此获得解的平均时间为半天。这样,破译每个DES密码的花销只是五千美元。后来,Diffie在1981年又修改了他们的估计,认为以1980年的技术而论,用造价为五千万美元的专用机破译DES密码平均要花两天时间。但是他与Hellman都预计:1990年时,破译DES密码的专用机的造价将大幅度下降。
同时,DES的硬件实现方法逐步接近Diffie和Hellman的专用机所要求每秒百万次的速度。在1993年,MuchaelWiener设计了一个一百万美元的机器,它能在平均3.5小时内,完成DES的穷举攻击,到1990年时,DES是完全不安全的。
4.迭代次数
根据目前的计算技术和DES的分析情况,16-圈DES仍然是安全的,但提醒使用者不要使用低于16-圈的DES,特别是10-圈以下的DES,Bihan和Shamir的差分密钥分析同样也阐述了这一点:对于低于16轮的任意DES的已知明文攻击要比穷举攻击有效,但当算法恰好有16轮时,只有穷举攻击最有效。
5.S盒和P盒的设计
实现替代函数Si所用的S盒的设计原理尚未公开,其中可能留有隐患。更有人担心DES算法中有“陷阱”,知道秘密的人可以很容易地进行密文解密。目前人们仍然不知道DES中是否存在陷门。所谓陷门,通俗地讲,就是在算法的设计中设计者留了一个后门,知道某一秘密的人可进入这一后门获得使用该算法的用户的秘密密钥.DES的设计准则除了极少数被公布外,其余的仍然是保密的。围绕S盒人们讨论了一系列问题包括设计准则和构造等。在差分分析公开后,IBM公布了S盒和P盒的设计准则。
5.1 S盒的设计准则
1)每个S盒均为6位输入,4位输出。(这是在1974年的技术条件下,单个芯片所能容纳的最大尺寸。)
2)没有一个S盒的输出位是接近输入位的线性函数。
3)如果将输入位的最左、最右端的位固定,变化中间的4位,每个可能的4位输出只得到一次.4)如果S盒的两个输入仅有1位的差异,则其输出必须至少有2位不同.5)如果S盒的两个输入仅有中间2位不同,则其输出必须至少有2位不同。
6)如果S盒的两个输入前2位不同,后两位已知,则其输出必不同。
7)对于输入之间的任何非零的6位差分,32对中至多有8对显示出的差分导致了相同的输出差分。
5.2 P盒的设计准则
1)在第i轮S盒的4位输出中,2位将影响S盒第i+1轮的中间位,其余2位将影响最后位;2)每个S盒的4位输出影响6个不同的S盒,但没有一个影响同一个S盒;
3)如果一个S盒的4位输出影响另一个S盒的中间1位,那么后一个的输出位不会影响前一个S盒的中间1位。
在今天看来产生S盒很容易,但在70年代初,这是一个很复杂的工作.Tuchman曾经引述说,他们当时将计算机程序运行几个月来产生S盒。在对DES密码进行鉴定的期间,美国国家保密局和计算机科学技术学会组织各界专家研究了DES密码体制的安全性问题,讨论了破译DES密码体制的一切可能途径。尽管有些专家和学者对它的安全性仍持怀疑态度,但官方却得出了十分乐观的结论。他们宣布:“没有任何可以破译DES密码体制的系统分析法。若使用穷举法,则在1990年以前基本上不可能产生出每天能破译一个DES密钥的专用计算机。即使届时能制造出这样的专用机,它的破译成功率也只会在0.1到0.2之间,而且造价可能高达几千万美元
DES算法的漏洞
由DES算法我们可以看到:DES算法中只用到64位密钥中的其中56位,而第8、16、24、……64位8个位并未参与DES运算。这一点,向我们提出了一个应用上的要求,即DES的安全性是基于除了8,16,24,……64位外的其余56位的组合变化256才得以保证的。因此,在实际应用中,我们应避开使用第8,16,24……64位作为DES密钥的有效数据位,而使用其它的56位作为有效数据位。只有这样,才能保证DES算法安全可靠地发挥作用。如果不了解这一点,把密钥Key的8,16,24,……64位作为有效数据位使用,将不能保证DES加密数据的安全性,对运用DES来达到保密作用的系统将产生数据被破译的危险,这正是DES算法在应用上的误区,是各级技术人员、各级用户在使用过程中应绝对避免的。
基于以上的问题,我们就不能用汉字作为密钥。因为汉字由两个字节组成,每个字节的ASCII码都大于127,转换成二进制就是8位,不能加奇偶校验位,而且如果去掉第8、16、24、……64位,就会丢失密钥,而且不同的汉字可能实际上是相同的密钥.
DES算法的应用误区
DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的,当然,随着科学技术的发展,当出现超高速计算机后,我们可考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度。
由上述DES算法介绍我们可以看到:DES算法中只用到64位密钥中的其中56位,而第8、16、24、。。。。。.64位8个位并未参与DES运算,这一点,向我们提出了一个应用上的要求,即DES的安全性是基于除了8,16,24,。。。。。.64位外的其余56位的组合变化256才得以保证的。因此,在实际应用中,我们应避开使用第8,16,24,。。。。。.64位作为有效数据位,而使用其它的56位作为有效数据位,才能保证DES算法安全可靠地发挥作用。如果不了解这一点,把密钥Key的8,16,24,。。。。。 .64位作为有效数据使用,将不能保证DES加密数据的安全性,对运用DES来达到保密作用的系统产生数据被破译的危险,这正是DES算法在应用上的误区,是各级技术人员、各级领导在使用过程中应绝对避免的,而当今国内各金融部门及非金融部门,在运用DES工作,掌握DES工作密钥Key的领导、主管们,极易忽略,给使用中貌似安全的系统,留下了被人攻击、被人破译的极大隐患。
DES算法应用误区的验证数据
笔者用Turbo C编写了DES算法程序,并在PC机上对上述的DES 算法的应用误区进行了骓,其验证数据如下:
Key: 0x30 0x30 0x30 0x30.。。。。.0x30(8个字节)
Data: 0x31 0x31 0x31 0x31.。。。。.0x31(8个字节)
Mode: Encryption
结果:65 5e a6 28 cf 62 58 5f
如果把上述的Key换为8个字节的0x31,而Data和Mode均不变,则执行DES 后得到的密文完全一样。类似地,用Key:8个0x32和用Key:8个0x33 去加密Data (8 个0x31),二者的图文输出也是相同的:5e c3 ac e9 53 71 3b ba
我们可以得到出结论:
Key用0x30与用0x31是一样的;
Key用0x32与用0x33是一样的,。。。。。。
当Key由8个0x32换成8个0x31后,貌似换成了新的Key,但由于0x30和0x31仅仅是在第8,16,24.。。。。.64有变化,而DES算法并不使用Key的第8,16,。。。。。.64位作为Key的有效数据位,故:加密出的结果是一样的。
DES解密的验证数据:
Key: 0x31 0x31.。。。。.0x31(8个0x31)
Data: 65 5e a6 28 cf 62 58 5f
Mode: Decryption
结果:0x31 0x31.。。。。.0x31(8个0x31)
由以上看出:DES算法加密与解密均工作正确。唯一需要避免的是:在应用中,避开使用Key的第8,16.。。。。.64位作为有效数据位,从而便避开了DES 算法在应用中的误区。
避开DES算法应用误区的具体操作
在DES密钥Key的使用、管理及密钥更换的过程中,应绝对避开DES 算法的应用误区,即:绝对不能把Key的第8,16,24.。。。。.64位作为有效数据位,来对Key 进行管理。这一点,特别推荐给金融银行界及非金融业界的领导及决策者们,尤其是负责管理密钥的人,要对此点予以高度重视。有的银行金融交易网络,利用定期更换DES密钥Key的办法来进一步提高系统的安全性和可靠性,如果忽略了上述应用误区,那么,更换新密钥将是徒劳的,对金融交易网络的安全运行将是十分危险的,所以更换密钥一定要保证新Key与旧Key真正的不同,即除了第8,16,24,。。.64位外其它位数据发生了变化,请务必对此保持高度重视!
评论
查看更多