【分组密码算法分析,改进】
序:这是我花了近2周的时间写的,可以说比较全面地介绍了各种分组密码、如DES算法、IDEA算法,其中最为宝贵的一部分是最后AES新推荐的算法Rijndael,它是今年10月份美国国家标准和技术研究所刚刚推出的分组密码算法,目前美国官方还没有正式发布此标准,但基本上已有定夺。
前言
数据加密作为一项基本技术是所有通信安全的基石。数据加密过程是由形形色色的加密算法来具体实施,它以很小的代价提供很大的安全保护。在多数情况下,数据加密是保证信息机密性的唯一方法。据不完全统计,到目前为止,已经公开发表的各种加密算法多达数百种。如果按照收发双方密钥是否相同来分类,可以将这些加密算法分为常规密码算法和公钥密码算法,两种算法最有名的代表分别为DES和RSA。粗略地讲,分组密码是用一个固定的变换对一个比较大的明文数组进行操作。本文将对分组密码进行详细的介绍。
分组密码
分组密码即对固定长度的一组明文进行加密的算法。它将明文按一定的位长分组,明文组和密钥组的全部经过加密运算得到密文组。解密时密文组和密钥组经过解密运算(加密运算的逆运算),还原成明文组。
分组密码的特点是:密钥可以在一定时间内固定,不必每次变换,因此给密钥配发带来了方便。但是,由于分组密码存在着密文传输错误在明文中扩散的问题,因此在信道质量较差的情况下无法使用。
分组密码其中最著名的两个分组密码即DES(Data Encryption Standard) 数据加密标准和IDEA(International Data Encryption Algorithm)国际数据加密算法。
术语和符号
一个分组密码有两个重要的参数:一个是密钥的大小,称作密钥长度;另一个是每次操作的组的大小,称作分组长度。
被变换的数据称作明文,变换后的数据称作密文。
将明文变换成密文的过程称作加密,其逆过程,即由密文恢复出原明文的过程称作解密。密钥是由希望通信的双方选择的一些秘密信息。
通信双方的密钥可能一样,也可能不一样,我们把前者称作对称密码,后者称作非对称密码。该报告限于介绍对称的分组密码。将明文变换成密文时所采用的一组规则称作加密算法,由密文恢复出原明文时所采用的一组规则称作解密算法。加密和解密算法通常是在密钥控制下进行的。
在密钥K控制之下的加密算法E记为E_K,明文消息m对应的密文记为E_K(m)。类似地,在密钥K控制之下的解密算法D记为D_K,密文消息c对的明文记为D_K(c)。显然,对所有的明文m,都有D_K(E_K(m))=m。
分组密码-DES
DES密码算法的产生及发展
DES密码是1977年由美国国家标准局公布的第一个分组密码。
20世纪五十年代,密码学研究领域出现了最具代表性的两大成就。其中之一就是1971年美国学者塔奇曼(Tuchman)和麦耶(Meyer)根据信息论创始人香农(Shannon)提出的"多重加密有效性理论"创立的,后于1977年由美国国家标准局颁布的数据加密标准DES。
为了实现同一水平的安全性和兼容性,为此美国商业部所属国家标准局(ANBS)于1972年开始了一项计算机数据保护标准的发展规则。于1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,为了建立适用于计算机系统的商用密码,于1973年5月和1974年8月先后两次向公众发出了征求加密算法的公告。1973年5月13日的联邦记录(FR1973)中的公告,征求在传输和存储数据中保护计算机数据的密码算法的建议,这一举措最终导致了数据加密标准(DES)算法的研制。征求的加密算法要达到的目的(通常称为DES 密码算法要求)主要为以下四点:
提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改;
具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握;
DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础;
实现经济,运行有效,并且适用于多种完全不同的应用。
在征得的算法中,IBM公司提出的算法lucifer中选。DES密码实际上是Lucifer密码的进一步发展。它是一种采用传统加密方法的分组密码。1975年3月17日,ANBS向社会公布了此算法,首次公布在联邦记录中,以求得公众的评论。1977年1月正式向社会公布,采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES-Data Encryption Standard)。成为美国联邦信息处理标准,即FIPS-46,同年7月15日开始生效。
随后DES的应用范围迅速扩大到涉及美国以外的公司、甚至某些美国军事部门也使用了DES,引起了美国国家安全局的忧虑。因此,里根总统曾于1984年9月签署了一项命令,即NSDD-145号命令,下令责成美国防部的国家安全局负责组织、研制一种新的数据加密标准CCEP(CommercialCommunication SecurityEndorsement)商用通信安全保证程序于1988年取代DES。后来由于遭到整个最大的金融界用户以其不符合他们的要求为由的强烈反对,美国政府在其国会的压力下才撤销了里根这个NSDD-145号命令。
DES自1977年由美国国防部采用,它的标准ANSI X.3.92和X3.106标准中都有说明。因为担心这种方法被敌对国使用,美国政府不允许出口此种算法的加密软件,但是要想找到这种软件也不难,在各地的BBS上都会有。
每隔五年由美国国家保密局(NSA)对DES作出评估,并重新批准它是否继续作为联邦加密标准。
DES简介
数据加密标准(DES)是一种世界范围之内广泛使用的以密钥作为加密方法的加密手段,被美国政府确定是很难破译的,因此也被美国政府作为限制出口的一种技术。在此标准下有72,000,000,000,000,000(72Q)多种密钥可供使用。对于每条给定的信息,密钥在这72Q个密钥中随机选择。与其它的加密方法一样,加密方和解密方必须使用相同的密钥,所以DES算法也属于对称算法。它的算法是对称的,既可用于加密又可用于解密。
设计分组密码算法的核心技术是:在相信复杂函数可以通过简单函数迭代若干圈得到的原则下,利用简单圈函数及对合等运算,充分利用非线性运算。DES算法采用美国国家安全局精心设计的8个S-Box和P-置换,经过16圈迭代,最终产生64比特密文,每圈迭代使用的48比特子密钥是由原始的56比特产生的。
DES密码算法输入的是64比特的明文,在64比特密钥的控制下产生64比特的密文;反之输入64比特的密文,输出64比特的明文。64比特的密钥中含有8个比特的奇偶校验位,所以实际有效密钥长度为56比特。
DES算法加密时把明文以64bit为单位分成块,而后用密钥把每一块明文转化成同样64bit的密文块。DES提供72,000,000,000,000,000个密钥,用每微秒可进行一次DES加密的机器来破译密码需两千年。采用DES的一个著名的网络安全系统是Kerberos,由麻省理工学院MIT开发,是网络通信中身份认证的工业上的事实标准。
DES应用
自DES算法颁布之后,引起了学术界和企业界的广泛重视。许多厂家很快生产出实现DES算法的硬件产品,广大用户在市场上买到高速而又廉价的DES硬件产品之后,开始用它加密自己的重要数据,从而大大推广了密码技术的使用。
DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
DES算法是这样工作的:如Mode为加密,则用Key去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。
在通信网络的两端,双方约定了一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。
通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。
在银行金融界及非金融界,越来越多地用到了DES算法,目前美国使用的128位对称密码算法(DES),支持全美的电子商务活动。1998年全美电子商务营业额为160亿美元,尚未发现有安全问题。目前,在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密。如信用卡持卡人的PIN的加密传输、IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。
DES算法
DES使用56比特有效密钥的64-比特分组密码来加密64位数据。它是一个16-圈的迭代型密码。加、解密算法一样,但加、解密时所使用的子密钥的顺序刚好相反。DES的硬件实现的加密速率大约为20 M比特/秒;DES的软件实现的速率大约为400 ~ 500K比特/秒。DES专用芯片的加密和解密的速率大约为1G比特/秒。
DES的圈函数f对32比特的串作如下操作:首先将这32比特的串扩展成48比特的串。其次将这48比特的串和48比特的密钥进行组合并将组合结果作为八个不同S-盒的输入。每个S-盒的输入是6比特,输出是4比特。然后将S-盒的32比特做置换作为圈函数f的输出。
DES有56比特的有效密钥,64比特密钥中的第8位、第16位、…、第64位为校验位。所以对DES最尖锐的批评之一是DES的密钥太短。
DES算法以被应用于许多需要安全加密的场合。(如:UNIX的密码算法就是以DES算法为基础的)。下面是关于如何实现DES算法的语言性描述。
1. 处理密钥:
1-1、变换密钥:取得64位的密钥,每个第8位作为奇偶校验位。
1-2、变换密钥。
1-2-1、舍弃64位密钥中的奇偶校验位,根据下表(PC-1)进行密钥变换得到56位的密钥,在变换中,奇偶校验位以被舍弃。
Permuted Choice 1 (PC-1)
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
1-2-2、将变换后的密钥分为两个部分,开始的28位称为C[0],最后的28位称为D[0]。
1-2-3、生成16个子密钥,初始I=1。
1-2-3-1、同时将C[I]、D[I]左移1位或2位,根据I值决定左移的位数。见下表
I: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
左移位数: 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
1-2-3-2、将C[I]D[I]作为一个整体按下表(PC-2)变换,得到48位的K[I]
Permuted Choice 2 (PC-2)
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32
1-2-3-3、从1-2-3-1处循环执行,直到K[16]被计算完成。
2、处理64位的数据
2-1、取得64位的数据,如果数据长度不足64位,应该将其扩展为64位(例如补零)
2-2、将64位数据按下表变换(IP)
Initial Permutation (IP)
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
2-3、将变换后的数据分为两部分,开始的32位称为L[0],最后的32位称为R[0]。
2-4、用16个子密钥加密数据,初始I=1。 2-4-1、将32位的R[I-1]按下表(E)扩展为48位的E[I-1]
Expansion (E)
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1
2-4-2、异或E[I-1]和K[I],即E[I-1] XOR K[I]
2-4-3、将异或后的结果分为8个6位长的部分,第1位到第6位称为B[1],第7位到第12位称为B[2],依此类推,第43位到第48位称为B[8]。
2-4-4、按S表变换所有的B[J],初始J=1。所有在S表的值都被当作4位长度处理。
2-4-4-1、将B[J]的第1位和第6位组合为一个2位长度的变量M,M作为在S[J]中的行号。
2-4-4-2、将B[J]的第2位到第5位组合,作为一个4位长度的变量N,N作为在S[J]中的列号。
2-4-4-3、用S[J][M][N]来取代B[J]。
Substitution Box 1 (S[1])
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S[2]
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S[3]
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S[4]
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S[5]
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S[6]
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S[7]
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S[8]
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
2-4-4-4、从2-4-4-1处循环执行,直到B[8]被替代完成。
2-4-4-5、将B[1]到B[8]组合,按下表(P)变换,得到P。
Permutation P
16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25
2-4-4-6、异或P和L[I-1]结果放在R[I],即R[I]=P XOR L[I-1]。
2-4-4-7、L[I]=R[I-1]
2-4-4-8、从2-4-1处开始循环执行,直到K[16]被变换完成。
2-4-5、组合变换后的R[16]L[16](注意:R作为开始的32位),按下表(IP-1)变换得到最后的结果。
Final Permutation (IP**-1)
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
以上就是DES算法如何加密一段64位数据块算法的描述。解密时用同样的过程,只需把16个子密钥的顺续颠倒过来,应用的顺序为K[16],K[15],K[14],。。。。K[1]。
DES的安全性
对称的分组密码算法最主要的问题是:由于加解密双方都要使用相同的密钥,因此在发送、接收数据之前,必须完成密钥的分发。因而,密钥的分发便成了该加密体系中的最薄弱因而风险最大的环节。各种基本的手段均很难保障安全地完成此项工作。从而,使密钥更新的周期加长,给他人破译密钥提供了机会。实际上这与传统的保密方法差别不大。在历史战争中,破获他国情报的纪录不外是两种方式:一种是在敌方更换"密码本"的过程中截获对方密码本;另一种是敌人密钥变动周期太长,被长期跟踪,找出规律从而被破获。在对称算法中,尽管由于密钥强度增强,跟踪找出规律破获密钥的机会大大减小了,但密钥分发的困难问题几乎无法解决。如,设有n方参与通信,若n方都采用同一个对称密钥,一旦密钥被破解,整个体系就会崩溃;若采用不同的对称密钥则需n(n-1)个密钥,密钥数与参与通信人数的平方数成正比。这便使大系统密钥的管理几乎成为不可能。
自DES算法1977年首次公诸于世以来,引起了学术界和企业界的广泛重视。
学术界对DES密码进行了深入的研究,围绕它的安全性和破译方法展开了激烈的争论,在一定意义上对密码学的理论研究也起了推动作用。同时人们也一直对DES的安全性持怀疑态度,对密钥的长度、迭代次数及S盒的设计纵说纷纭。从技术上说,对DES的批评主要集中在以下三个方面。
作为分组密码,DES的加密单位仅有64位二进制,这对于数据传输来说太小,因为每个区组仅含8个字符,而且其中某些位还要用于奇偶校验或其他通讯开销。
密钥仅有56位二进制未免太短,各次迭代中使用的密钥K(i)是递推产生的,这种相关必降低了密码体制的安全性。目前,有人认为:在现有的技术条件下用穷举法寻找正确密钥已趋于可行,所以若要安全保护10年以上的数据最好不用DES算法。
实现替代函数Si所用的S盒的设计原理尚未公开,其中可能留有隐患。更有人担心DES算法中有"陷阱",知道秘密的人可以很容易地进行密文解密。
目前人们仍然不知道DES中是否存在陷门。所谓陷门,通俗地讲,就是在算法的设计中设计者留了一个后门,知道某一秘密的人可进入这一后门获得使用该算法的用户的秘密密钥。DES的设计准则除了极少数被公布外,其余的仍然是保密的。围绕S-盒人们讨论了一系列问题包括设计准则和构造等。
Campbell和Wiener于1992年证明了"DES不成群"这个事实。
DES至少有4个弱密钥,12个半弱密钥。
1993年Wiener给了一个详细的设计密钥搜索机的方案,他估计耗资100万美元制造一台机器,搜索一个DES密钥平均大约需花3·5小时。差分分析破译16-圈DES需要2个选择明文,破译8-圈DES需要2个选择明文。线性分析破译16-圈DES需要2个已知明文,破译8-圈DES需要2个已知明文。
根据目前的计算技术和DES的分析情况,16-圈DES仍然是安全的,但提醒使用者不要使用低于16-圈的DES,特别是10-圈以下的DES。
在对DES密码进行鉴定的期间,美国国家保密局和计算机科学技术学会组织各界专家研究了DES密码体制的安全性问题,讨论了破译DES密码体制的一切可能途径。尽管有些专家和学者对它的安全性仍持怀疑态度,但官方却得出了十分乐观的结论。他们宣布:"没有任何可以破译DES密码体制的系统分析法。若使用穷举法,则在1990年以前基本上不可能产生出每天能破译一个DES密钥的专用计算机。即使届时能制造出这样的专用机,它的破译成功率也只会在0.1到0.2之间,而且造价可能高达几千万美元。"
我们先考虑用穷举法破译DES密码的问题。设已知一段密码文C及与它对应的明码文M,用一切可能的密钥K加密M,直到得到E(M)=C,这时所用的密钥K即为要破译的密码的密钥。穷举法的时间复杂性是T=O(n),空间复杂性是S=O(1)。对于DES密码,n=256≈7×1016,即使使用每秒种可以计算一百万个密钥的大型计算机,也需要算106天才能求得所使用的密钥,因此看来是很安全的。但是Diffie和Hellman指出,如果设计一种一微秒可以核算一个密钥的超大规模集成片,那么它在一天内可以核算8.64×1010个密钥。如果由一个百万个这样的集成片构成专用机,那么它可以在不到一天的时间内用穷举法破译DES密码。他们当时(1977年)估计:这种专用机的造价约为两千万美元。如果在五年内分期偿还,平均每天约需付一万美元。由于用穷举法破译平均只需要计算半个密钥空间,因此获得解的平均时间为半天。这样,破译每个DES密码的花销只是五千美元。后来,Diffie在1981年又修改了他们的估计,认为以1980年的技术而论,用造价为五千万美元的专用机破译DES密码平均要花两天时间。但是他与Hellman都预计:1990年时,破译DES密码的专用机的造价将大幅度下降。
计算及科学家Tanenbaum指出,即使没有这种专用机,也可以用穷举法破译DES。
DES对每64位数据块应用一个56位的密钥。整个过程要经历16个加密运算周期(或操作)。在1997年,RSA(数据安全公司)为能够破解DES信息的人提供$10,000奖金,于是在Internet上的一次多达14,000计算机的联合行动最终找到了密钥,这次行动中,总共搜索了72Q个密钥中的18Q个,这也显示了网络分布式计算机的强大威力。能够令我们放心的是,因为人力的关系,对于普通信息不可能受到这样的破译。
据美国(华尔街报)1999年3月8日报导,由Verisign公司(一个信息保密安全公司)经理 AnilPereira分指出,欲破解一个秘密密钥长度为128位的DES加密要比破解一个秘密密钥长度为40位的DES加密要困难300X1042倍(300Septillion倍)。也就是说如以300MC奔腾CPU的PC机破解40位DES加密要花3个小时计,那么用同样的PC机来破解一个128位DES加密就要花去900 X1042小时。这在一个人的有生之年是不可能做到的。
对一个密码算法的安全来说,密钥长度只是密码强度痕量标准之一,对一个密码算法的评价,除密钥长度外,还必须对算法进行详尽、系统的理论分析,对于DES型的分组密码,就需进行算法抵抗所谓的差分攻击和线性密码分析的能力。在国外,商用密码的算法必须是公开的,DES就是这样,因为这样有利于密码算法评价的公开性和公正性,这是我国商用密码管理的必由之路。
DES算法的应用漏洞
DES算法具有极高的安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒钟检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的。当然,随着科学技术的发展,当出现超高速计算机后,我们可考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度。
由上述DES算法介绍我们可以看到
ES算法中只用到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算法在应用上的误区,是各级技术人员、各级领导在使用过程中应绝对避免的。
避开DES算法漏洞安全管理
在DES密钥Key的使用、管理及密钥更换的过程中,应绝对避开DES算法的应用误区,即:绝对不能把Key的第8,16,24......64位作为有效数据位,来对Key进行管理。这一点,特别推荐给金融银行界及非金融业界的领导及决策者们,尤其是负责管理密钥的人,要对此点予以高度重视。有的银行金融交易网络,利用定期更换DES密钥Key的办法来进一步提高系统的安全性和可靠性,如果忽略了上述应用误区,那么,更换新密钥将是徒劳的,对金融交易网络的安全运行将是十分危险的,所以更换密钥一定要保证新Key与旧Key真正的不同,即除了第8,16,24,...64位以外其它位数据发生了变化,须务必对此保持高度重视!
现代密码学的特征是算法可以公开。保密的关键是如何保护好自己的密钥,而破密的关键则是如何能破解得到密钥。
系统的安全主管者,要根据本系统实际所使用的密钥长度与其所保护的信息的敏感程度、重要程度以及系统实际所处安全环境的恶劣程度,在留有足够的安全系数的条件下来确定其密钥和证书更换周期的长短。同时,将已废弃的密钥和证书放入黑库归档,以备可能后用。密钥更换周期的正确安全策略是系统能够安全运行的保障,是系统的安全管理者最重要、最核心的日常工作任务。
DES的变形
DES 算法目前已广泛用于电子商务系统中。随着研究的发展,针对以上DES的缺陷,DES算法在基本不改变加密强度的条件下,发展了许多变形DES。人们提出了解几种增强DES安全性的方法,主要有以下几种。
多重DES
为了增加密钥的长度,人们建议将一种分组密码进行级联,在不同的密钥作用下,连续多次对一组明文进行加密,通常把这种技术称为多重加密技术。对DES,人们建议使用三重DES,这一点目前基本上达成一个共识。
三重DES
虽然DES被认为是一种十分可靠的加密方法,但许多公司仍然采用称为"三重DES"的方法加密,这种方法边连续使用三个密钥进行加密。
因为确定一种新的加密法是否真的安全是极为困难的,而且DES主要的密码学缺点,就是密钥长度相对比较短,所以人们并没有放弃使用DES,而是想出了一个解决其长度问题的方法,即采用三重DES。其基本原理是将128比特的密钥分为64比特的两组,对明文多次进行普通的DES加解密操作,从而增强加密强度。
这种方法用两个密钥对明文进行三次加密,假设两个密钥是K1和K2:
1. 用密钥K1进行DES加密。
2. 用K2对步骤1的结果进行DES解密。
3. 用步骤2的结果使用密钥K1进行DES加密
三重DESDES算法扩展其密钥长度的一种方法,可使加密密钥长度扩展到128比特(112比特有效)或192比特(168比特有效)。此方法为密码专家默克尔(Merkle)及赫尔曼(Hellman)推荐。据称,目前尚无人找到针对此方案的攻击方法。
S-盒可选择的DES(也称带用交换S盒的DES算法)
比哈姆(Biham)和沙米尔(Shamir)证明通过优化S盒的设计,甚至S盒本身的顺序,可以抵抗差分密码分析,以达到进一步增强DES算法的加密强度的目的。
在一些设计中,将DES作如下改进:
使S-盒的次序随密钥而变化或使S-盒的内容本身是可变的。
8个DES的S-盒的改变可使得DES变弱许多,使用某些特定次序的S-盒的16-圈DES仅需要大约2个选择明文就能用差分分析方法被破译。采用随机的S-盒的DES很容易被破译,即使是对DES的一个S-盒的数字稍作改变也会导致DES易于破译。结论:不管怎样随机选择S-盒都不会比DES更安全。
具有独立子密钥的DES
DES的另一种变形是每圈迭代都使用不同的子密钥,而不是由单个的56比特密钥来产生。因为16-圈DES的每圈都需要48比特密钥,所以这种变形的DES的密钥长度是768比特。这一方法可以增强DES的加密强度,大大地增加了实现DES的难度。
但据密码专家比哈姆(Biham)及沙米尔(Shamir)证明利用261个选择明文便可破译这个DES变形,而不是人们所希望的2768个选择明文。所以这种改变并不能使DES变得更安全。
G-DES
G-DES是广义的DES的缩写,设计它的目的是为了提高DES的速度和强度。总的分组长度增加了(分组长度是可变的),但圈函数f保持不变。Biham和Shamir仅使用16个已知明文就能用差分分析破译分组长度为256比特的16-圈G-DES。使用48个选择明文就能用差分分析破译分组长度为256比特的22-圈G-DES。即使是分组长度为256比特的64-圈G-DES也比16-圈DES弱。事实证明,比DES快的任何G-DES也就比它不安全。
IDEA算法
1990年赖学家(XueJiaLai)和梅西(Massey)开发的IDEA密码首次成形,称为PES,即"建议的加密标准"。次年,根据有关专家对这一密码算法的分析结果,设计者对该算法进行了强化并称之为IPES,即"改进的建议加密标准"。该算法于1992年更名为IDEA,即"国际加密标准"。
IDEA算法的密钥长度为128位。设计者尽最大努力使该算法不受差分密码分析的影响,赖学家已证明IDEA算法在其8圈迭代的第4圈之后便不受差分密码分析的影响了。假定穷举法攻击有效的话,那么即使设计一种每秒种可以试验10亿个密钥的专用芯片,并将10亿片这样的芯片用于此项工作,仍需1013年才能解决问题;另一方面,若用1024片这样的芯片,有可能在一天内找到密钥,不过人们还无法找到足够的硅原子来制造这样一台机器。目前,尚无一片公开发表的试图对IDEA进行密码分析的文章。因此,就现在来看应当说IDEA是非常安全的。
IDEA分组密码已在欧洲取得专利,在美国的专利还悬而未决,不存在非商用所需的使用许可证费用问题。
IDEA算法概述
IDEA是一个迭代分组密码,分组长度为64比特,密钥长度为128比特。IDEA的软件实现速度与DES差不多。但硬件实现速度要比DES快得多,快将近10倍。设计者们声称由ETH Zurich开发的一种芯片,采用IDEA算法的加密速率可达到177M比特/秒。
IDEA密码中使用了以下三种不同的运算:
逐比特异或运算;
模2加运算;
模2+1乘运算,0与2对应。
IDEA算法是由8圈迭代和随后的一个输出变换组成。它将64比特的数据分成4个子块,每个16比特,令这四个子块作为迭代第一轮的输出,全部共8圈迭代。每圈迭代都是4个子块彼此间以及16比特的子密钥进行异或,MOD2加运算,MOD2+1乘运算。任何一轮迭代第三和第四子块互换。该算法所需要的"混淆"可通过连续使用三个"不相容"的群运算于两个16比特子块来获得,并且该算法所选择使用的MA-(乘加)结构可提供必要的"扩散"。 I
IDEA现状
IDEA有大量的弱密钥,这些弱密钥是否会威胁它的安全性还是一个迷。IDEA密码能够抵抗差分分析和线性分析。
设计者Lai认为IDEA不是一个群,但目前仍未得到证实。
Eurocrypt'97会议上给出了两种新的攻击低圈IDEA的方法,第一种攻击方法可破译大约3·5-圈的IDEA;第二种攻击方法可破译大约3-圈的IDEA。但从分析结果来看,这两种攻击方法并未对IDEA的安全性构成威胁。
其它分组密码简介
随着DES的逐渐衰老,分组密码的研究也在不断深入。在DES之后,近年来国际上又相继提出了多种新的分组密码体制,在这些分组密码中,有的已被破译,有的仍具有较高的安全性。下面对这此算法作一简介。
近年来出现的一些分组密码体制
分组密码 密钥组位长度(比特) 明、密文组位长度(比特) 迭代次数(次)
DES(美国) 56 64 16
FEAL-8(日本) 64 64 8
LOKI(澳大利亚) 64 64 16
Khufu Khafre(美国)512 64 ...
IDEA(欧洲) 128 64 8
FEAL-8密码
FEAL密码算法家族是日本NTT(日本电报电话公司)的清水(Shimizi)和宫口(Miyaguchi)设计的。作为一种分组密码,与DES相比其主要想法为增加每一圈迭代的算法强度,因此可以通过减少迭代次数而提高运算速度。
FEAL-8即为8圈迭代的FEAL密码算法。FEAL密码算法推出之后,引起有关专家的注意。密码专家比哈姆和沙米尔利用养分密码分析技术发现,可以用比穷举法更快的速度破译FEAL密码。如FEAL-8只需2000个选择明文即可破译,而FEAL-4更只需8个精心选择的明文便可破译。
目前,FEAL已经取得了专利。
LOKI算法
LOKI算法作为DES的一种潜在替代算法于1990年在密码学界首次亮相。LOKI同DES一样以64位二进制分组加密数据,也使用64位密钥(只是其中无奇偶校验位),所有64位均为密钥。LOKI密码公布之后,有关专家对其进行了研究破译并证明不大于14圈的LOKI算法极易受到差分密码分析的攻击等。不过,这仍然优于56位密钥的DES。LOKI较新的成果版本是LOKI-91。
LOKI尚未取得专利,任何人都可以使用该算法。有意在商用产品中使用设计者基准方案的人士,可以与澳大利亚堪培拉国防学院计算机科学系西特拉德主任联系。
Khufu和Khafre算法
1990年由默克尔(Merhie)设计的这对算法具有较长的密钥,适合于软件实现,比较完全可靠。Khufu算法的总体设计同DES,只是拥有512位(64字节)的密钥。Khafre算法与前者类似,预定用于不能预先计算的场合。由于Khufu算法具有可变的S盒,可以抵抗差分密码分析的攻击。据了解目前尚无以该算法为目标的其它密码分析成果。
这对密码算法都已取得专利,算法的原码在专利之中。对使用这对算法感兴趣的人士,可以与施乐(Xerox)公司专利许可证发放部的彼得(Petre)主任联系。
SAFER K-64算法
SAFER K-64是Massey于1993年提出的一种面向字节的迭代分组密码,它的分组长度和密钥长度均为64比特。SAFERK-64既适合于硬件实现又适合于软件实现。1995年Massey将SAFERK-64的密钥长度修改为128比特。设计者建议使用6-圈SAFERK-64,实际上,它可以是任意圈。每一圈都使用了两个面向字节的不同的非线性变换,两个64比特长的子密钥和一个三级线性层的伪Hadamard变换。伪Hadamard变换的作用是实现"扩散"。最后一圈末,再经过一个输出变换形成密文。
SAFER K-64是一种Markov密码,而Markov密码关于能抵抗差分分析的能力的研究已有一些成果。Massey认为6-圈SAFER K-64就能抵抗差分分析。关于该算法的安全性的讨论目前还很少。
SAFER K-64的密钥方案存在着某些弱点,但还未对它的安全性构成威胁。
RC5算法
RC5算法是Rivest于1994年提出的一个新的迭代分组密码,但它不是Feistel型密码。
它的特点是:分组长度W,密钥长度b和圈数r都是可变的。简记为RC5-W/r/b。该密码既适合于硬件实现又适合于软件实现,实现速度非常快。它主要通过数据循环来实现数据的扩散和混淆。每次循环的次数都依赖于输入数据,事先不可预测。
目前只有少数几篇论文对RC5的抵抗差分分析和线性分析的能力作了分析。分析结果表明,12-圈的RC5就可抵抗差分分析和线性分析。
RC5是利用数据循环的观点设计的一种密码算法,那么利用这种观点设计密码算法是否成功还有待于进一步探讨。
Skipjack算法
Skipjack算法是NSA为Clipper和Capstone芯片开发的一个加密算法。该算法从1985年开始设计,于1990年完成,1993年将告知众人,但算法一直保密,没有公开。只知道该算法是一个32-圈的分组密码,分组长度为64比特,密钥长度为80比特。加、解密的运行速度非常快。
Skipjack算法仍未公开,这就引起了人们的强烈不满。尽管NIST声称Skipjack算法比DES多么安全,用穷搜索破译它有多么难,但许多人对Skipjack算法的安全性仍表示怀疑。也有人怀疑Skipjack算法可能有陷门。
其它分组密码算法
除了上面介绍的算法外,还有一些分组算法,诸如,RC2,FEAL-N,REDOC-II,LOKI,COST,Blowfish,Crab,Khufu,Khafre,MMB,3-WAY等。在这里我们不可能作逐一介绍,对这些算法感兴趣的读者可在Schneier所著的《Applied Cryptography:Protocals,Algorithms,and SourceCode in C》一书中找到。
关注新的加密标准(AES)
从分组密码的参数来看,它的两个重要参数即分组长度和密钥长度有增长的趋势。这主要取决于计算机的处理能力和计算能力。
从分组密码的应用来看,它的应用将更加广泛。从国家的重要机构到个人都有使用分组密码的要求。
从分组密码的研究来看,随着美国新的数据加密标准的出现,分组密码的研究将会掀起新的浪潮。
AES发展过程
在DES每隔五年的评估会议中,最后一次在1998年美国政府终于签署了不再继续延用DES作为联邦加密标准,就也就表明了DES将退出加密标准的舞台,而新的标准AES(Advanced Encryption Standard)将粉墨登场。
1997年4月15日,美国国家标准和技术研究所(NIST)发起征集AES (Advanced Encryption Standard)密码算法的活动。
1997年9月7日,NIST公开发表了面向公众、科研机构、工业界以及政府机构的AES侯选算法征集书,请社会各界提供AES的侯选算法,以便从中筛选出符合要求的算法作为AES正式算法使用。NIST发起这次征集的主要目标,是为AES选定一种能在近期内代替DES、公开的、能够很好地保护政府的敏感信息直到下个世纪的算法,强度应不低于3重DES,而且实现效率要比3重DES高。
NIST对AES侯选算法有三条基本要求:
(1)是对称密码体制,也即秘密密钥算法;
(2)算法应为分组密码算法;
(3) 算法明密文分组长度为128比特,应支持128、192、256比特的密钥长度;
由此可见,AES算法的密钥长度比起DES的56比特要长的多,EFF的DES破译机要搜索长度为128比特以上的密钥其能力还远远不够。
1997年9 月12月在联邦登记处(FR)公开发布了征集AES候选算法的通告。并提出了对AES的基本技术要求,即候选算法要比三重DES快,与三重DES一样安全,分组长度为128比特,密钥长度为128、192和256比特。
1998年8月,NIST召开了第一次AES候选会议,宣布对15个候选算法的若干讨论结果。作为第一轮评测的候选算法情况是:其中5个来自美国(HPC、MARS、RC6、SAFERT和TWOFISH);2个来自加拿大(CAST-256和REAL);澳大利亚(LOK197)、比利时(RIJNDAEL)、哥斯达黎加(FROG)、法国(DFC);德国(MAGENTA)、日本(EZ)、韩国(CRYPTON)和挪威(SERPENT)各一个。
第一轮评测1999年4月15日结束,并开始第二轮评测。这次评测将从15个候选算法中选出5个,这5个候选算法为:MARS、RC6、Rijndael、Serpent、Twofish。最后再在这5个优选算法中评选出一个算法作为正式的AES标准,计划在2001年正式出台。
而最新的消息2000年的10月,美国政府通过公开招标选定了新的加密算法Rijndael作为其高级加密标准(AES),该方案是由两位比利时工程师提交。
这两位中标人分别是ProtonWorldInternational的JoanDaemen和天主教大学电子工程系的VincentRijmen。
贸易部负责技术的官员CherylShavers说,新的高级加密标准(AES)可支持128、192和256位的密钥,并且将取代现在的数据加密标准(DES),DES仅支持56位的密钥。
国家标准局的当前任务是在2001年2月前,草拟AES联邦信息执行标准供公众审查和评定。新标准计划将在2001年二季度正式公布施行。
最新的AES标准-Rijndael
NIST已经选择了Rijndael作为推荐的AES算法。这种算法的设计者建议用这样发音来读Rijndael:Reign Dahl、RainDoll、Rhine Dahl。两位开发者都是来自比利时的密码专家:国际质子中心的Joan Daemen (Yo'-ahnDah'-mun)博士和Vincent Rijmen(Rye'-mun)博士一位来自Katholieke大学电子工程系的博士后研究员。这两位在密码学界都有一定的知名度。
NIST的AES标准选择小组撰写了有关AES的开发报告,这是一个很综合涉及面广的报告。报告中对于各种有关AES的版本进行探讨,罗列了一些自公开试行时的分析和评论。总结了五个最后入围的有关算法的特点,对照和比较了他们的优缺点,表明了NIST对于Rijndael的选择。
宣布新的AES标准标志着四年来美国政府与私人企业及来自世界各国学术机构共同合作开加密技术已经达到了顶峰,这些加密技术将有成百上千人使用的潜力。NIST预言将会在国内和国际上更广泛地应用。
为什么NIST选择Rijndael作为AES标准,全面的考虑,Rijndael是将安全、高效、性能、方便的使用及灵活性集于一体,这使它成为AES的合适选择。特别指出的是,Rijndael在不同硬件和软件运行环境下表现出始终如一的良好性能,而无论这些环境是否有反馈模式,它的密钥设置时间相当出色,密钥的灵敏性也不错。Rijndael对于内存要求可以很低,这使得它可以广泛使用与空间上受限制的环境,在这样的环境下它仍然可以表现出出色的性能。Rijndael的操作可以很容易的抵御时间和空间上的攻击。另外,在提供这些保护的同时也并没有影响Rijndael的性能。从分组长度和密钥长度的观点来看,Rijndael设计带有灵活性,同时这种算法也允许一定循环次数的修正,但这个特点还需进一步研究,在现在还不被认同。最后要说的,Rijndael内部循环结构使得它表现出有益于并行水平结构的很好的潜能。
从安全的观点来看,NIST在它的报告中指出,这五种算法作为AES标准都有其合适的安全性能。但这并不表明除Rijndael外的其他四种算法有什么不当之处,当把多种分析小组对它们的评价也作为考虑之列时,NIST小组感觉还是把Rijndael作为AES更为合适。NIST考虑过选择复合函数作为AES的可能性。因为大家曾广泛讨论过复合算法的课题。在公开评审期间评审争论都是有关或赞同或反对把复合算法作为标准。NIST的AES评选小组认为这些评论探讨优先于算法的评估。概括的讲,AES评选小组决定选择一种算法有几个原因,首先,其他赞同的算法如(3-DES)提出了对系统的弹性要求,会因为成为AES而变成一个问题;其次,复合AES的密钥程度对提高安全等级;第三,单一的AES算法会促进共同的操作性来减少应用的复杂性,这种应用也同样遵从于AES的特殊范例,比起复合AES算法也更能在实施中带来较少的花费;第四,考虑到潜在的知识产权问题,费用问题,单一的AES算法也保护了设计者的利益。
NIST对Rijndael算法不会做改动,比如增加循环的次数。早在NIST的AES选择小组对最后的5个入围者评审之前,他们就讨论是否对于某一种或几种算法的循环次数进行改变的问题。这个问题在提交给公众评论期间就提出了。一些公众评议表明了改变循环次数的特别理由,但大多数并没有提出什么理由来。似乎也没有达成有关算法,循环次数应该改变的协议。(即使达成了也没有确切指出应如何改变)。NIST小组认识到改变循环次数可能会削弱大量分析的有效性,而这种分析两年前就已开始。对于一些算法来说,如何用循环次数的不同完全定义一个算法并不十分清楚。同样也不十分清楚这种改变对于完全性的影响。另一个问题是,没有一个算法的研究者打算改变他们算法中的循环次数。而是在1999年夏天曾允许他们对自己的产品进行一些改动。基于这么多原因,NIST的AES小组还是决定在保持5个算法原有风貌上对其评估继而进行选择也许是更合适的。
NIST将会继续对Rijndael的密码分析进行研究、开发,同时对于其他标准密码算法也会进行研究。一旦AES成为官方标准,那么每5年便会对其评估一次,在合适的时候考虑到一些特殊环境,对于标准的修改工作也将会进行。当需要立即引起注意的问题出现时,NIST会迅速行动,并考虑各种可选择的算法。
可以预言在Rijndael公布不久,应用Rijndael的商用产品会很快出现。然而从时间表上看,AES直到2001年才会成为官方标准,当AES成为官方标准,NIST就会对应用Rijndael的产品进行测试。