加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
    IT昆明网专注于云南/昆明企业与政府微信、微信营销与分销、餐饮O2O、移动OA、移动互联网、现有软件系统数据共享集成、已有软件系统功能修改、软件开发/定制、网站防黑、计算机及网络信息安全、数据恢复、网站建设/设计、网络营销、SEO优化的综合性网站。拥有信息管理系统、企业ERP系统、电子商务网站系统、办公自动化/进销存管理系统、人事/财务管理系统、客户/物流管理系统、电子政务系统、无线定位系统等多种软件开发、实施经验。目前各种系统已经广泛应用在省内数十家公司,覆盖省内上万人群。
您当前的位置:首页 > 信息安全 > 计算机信息安全

数据加密标准DES

时间:2014-06-13 20:59:42  来源:  作者:

 

为了建立适用于计算机系统的商用密码,美国商业部的国家标准局NBS19735月和19748月两次发布通告,向社会征求密码算法。在征得的算法中,由IBM公司提出的算法lucifer中选。19753月,NBS向社会公布了此算法,以求得公众的评论。于197611月被美国政府采用,DES随后被美国国家标准局和美国国家标准协会(American National Standard InstituteANSI) 承认。19771月以数据加密标准DESData Encryption Standard)的名称正式向社会公布。

随着攻击技术的发展,DES本身又有发展,如衍生出可抗差分分析攻击的变形DES以及密钥长度为128比特的三重DES等。

DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。与每轮编码时,一个48位的“每轮”密钥值由56位的完整密钥得出来。DES用软件进行解码需要用很长时间,而用硬件解码速度非常快。在1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。所以,当时DES被认为是一种十分强壮的加密方法。

DES受到的最大攻击是它的密钥长度仅有56比特,1990S.Biham A.Shamir提出了差分攻击的方法,采用选择明文247攻击,最终找到可能的密钥,M.Matsui 提出的线性分析方法,利用243个已知明文,成功地破译了16DES算法,到目前为止,这是最有效的破译方法。

1997年开始,RSA公司发起了一个称作“向DES挑战”的竞技赛。在首届挑战赛上,罗克·维瑟用了96天时间破解了用DES加密的一段信息。

19991222日,RSA公司发起“第三届DES挑战赛(DES Challenge III)”。2000119日,由电子边疆基金会组织研制的25万美元的DES解密机以22.5小时的战绩,成功地破解了DES加密算法。DES已逐渐完成了它的历史使命。

很多分组密码的结构从本质上说都是基于一个称为Feistel网络的结构。Feistel提出利用乘积密码可获得简单的代换密码,乘积密码指顺序地执行多个基本密码系统,使得最后结果的密码强度高于每个基本密码系统产生的结果。取一个长度为n的分组(n为偶数),然后把它分为长度为n/2的两部分:LR。定义一个迭代的分组密码算法,其第i轮的输出取决于前一轮的输出:

L(i)= R(i-1)

R(i)= L(i-1)f(R(i-1)K(i))

K(i)i轮的子密钥,f是任意轮函数。

容易看出其逆为:

R(i-1) = L(i)

L(i-1) = R(i)f(R(i-1)K(i))= R(i)f(L(i)K(i))

DES就是基于Feistel网络的结构。假定信息空间都是由{01}组成的字符串,信息被分成64比特的块,密钥是56比特。经过DES加密的密文也是64比特的块。设用m表示信息块,k表示密钥,则:

m=m1m2…m64 mi = 01 i = 12…64

k=k1k2…k64 ki = 01 i = 12…64

其中k8k16k24k32k40k48k56k64是奇偶校验位,真正起作用的仅为56位。

加密算法为Ek(m) = IP-1·T16·T15……T1·IP(m)。其中IP为初始置换,IP-1IP的逆,Tii = 12…16是一系列的变换。解密算法为m=Ek-1 [Ek(m)]= IP-1·T1·T2……T16·IP[Ek(m)]

DES的每一密文比特是所有明文比特和所有密钥比特的复合函数。这一特性使明文与密文之间,以及密钥与密文之间不存在统计相关性,因而使得DES具有很高的抗攻击性。整个算法如下:

图4.9 DES算法

图4.10 一轮DES

1)初始变换

这是移位操作,用IP表示。移位时不用密钥,仅对64比特明文进行操作。输入64个二进制位明码组,m= m1m2…m64。按初始换位表IP进行换位,得到区组B0B0=b1(0)b2(0)…b64(0)= m58m50…m7。初始变换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)选择运算

选择运算E,输入32位数据,产生48位输出。

Bi=b1(i)b2(i)…b64(i)是第i+1次迭代的64个二进制位输入区组,将Bi分为左右两个大小相等的部分,每部分为一个32位二进制的数据块:

Li= l1(i)l2(i)…l32(i)= b1(i)b2(i)…b32(i)

Ri= r1(i)r2(i)…r32(i)= b33(i)b34(i)…b64(i)

Ri视为由84位二进制的块组成

r1(i)r2(i)r3(i)r4(i)

r5(i)r6(i)r7(i)r8(i)

r29(i)r30(i)r31(i)r32(i)

把它们再扩充为86位二进制的块(左右各增加一列)

r32(i)r1(i)r2(i)r3(i)r4(i) r5(i)

r4(i)r5(i)r6(i)r7(i)r8(i) r9(i)

r28(i)r29(i)r30(i)r31(i)r32(i) r1(i)

E(Ri)表示这个变换,称为选择函数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

3)使用密钥

在第i+1次迭代中,用48位二进制的密钥(由56位密钥生成)

Ki+1=k1(i+1)k2(i+1)…k48(i+1)

E(Ri)按位相加(逻辑异或),输出仍是48位,共8行,每行6位。

Z 1 r32(i)+ k1(i+1) r1(i) +k2(i+1) … r5(i) +k6(i+1)

Z 2 r4(i)+ k7(i+1) r5(i) +k8(i+1) … r9(i) +k12(i+1)

Z 8 r28(i)+ k43(i+1) r29(i) +k44(i+1) … r1(i) +k48(i+1)

4)选择函数(S盒)

S1S2...S8为选择函数,其功能是把6bit数据变为4bit数据。下面给出选择函数Si(i=12......8)的功能表:

S1:

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

S2:

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

S3:

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

S4:

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

  1. 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

S5:

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

S6:

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

  1. 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13

S7:

4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1

  1. 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

S8:

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

将以上第j(1j8)6位二进制的块(记为Z j=zj1 zj2 zj3 zj4 zj5 zj6)输入第j个选择函数Sj。各选择函数Sj的功能是把6位数变换成4位数,做法是以zj1zj6为行号,zj2 zj3 zj4 zj5为列号,查找Sj,行列交叉处即是要输出的4位二进制数。

在此以S1为例说明其功能,我们可以看到:在S1中,共有4行数据,命名为0123行;每行有16列,命名为0123......1415列。

现设输入为: D101100,令列=0110,行=10,坐标为(26),然后在S1表中查得对应的数为2,以4位二进制表示为0010,此即选择函数S1的输出。由此可见,选择函数实现了代换。

5)选择函数输出的拼接与换位

八个选择函数Sj(1j8)的输出拼接为32位二进制数据区组

y1(i)y2(i)…y32(i)

把它作为换位函数P的输入,得到输出

X(i)= x1(i)x2(i)…x32(i) = y16(i)y7(i)…y25(i)

X(i)=f(R(i)K(i+1))

换位表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

6)每轮输出

L(i)X(i)按位相加,形成R(i+1),且令R(i)L(i+1),即得到经第i+1次迭代加密后的输出L(i+1)R(i+1),其中:

L(i+1)= R(i)

R(i+1)= L(i)f(R(i)K(i+1)) (i=01215)

可以看出,DES密码体制的每一次迭代都用替代法和换位法对上一次迭代的输出进行加密变换。用硬件实现DES算法时,实际上用替代盒实现替代函数Sj(1j8),用换位盒实现换位函数P。为了使最后输出的密码文与原始输入的明码文没有明显的函数关系,DES算法采用16次迭代。在前15次迭代中,L(i)表示左32位,R(i)表示右32位。对最后一次迭代,L(16)表示右32位,R(16)表示左32位,即在最后一次迭代时不再左右交换,以保证加密和解密的对称性。

7)逆初始变换

IP-1 表示,它和IP互逆。例如,第1位经过初始置换后,处于第58位,而通过逆置换,又将第58位换回到第1位。

逆初始变换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

8)子密钥K(i)(48bit)的生成算法

密钥计算的目的在于产生加密和解密时所需要的16个子密钥,记作K(i)。初始密钥Key值为64位,但DES算法规定,其中第816......64位是奇偶校验位,不参与DES运算。故Key实际可用位数便只有56位。即:经过子密钥换位表PC-1的变换后,Key的位数由64位变成了56位,此56位分为C0D0两部分,各28位。子密钥换位表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

以上为C0

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

以上为D0

然后分别进行第1次循环左移,得到C1D1,将C128位)、D128位)合并得到56位,再经过子密钥换位表PC-2,便得到了密钥K148位)。子密钥换位表PC-2给出了选择及选择后的次序,可以看出去掉了第918222535384354位。

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

CiDi的产生由Ci-1Di-1移位得到,依此类推便可得到K(2)K(3)......K(16)16次循环左移对应的左移位数要依据下述规则进行:1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1

DES算法的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥K15,第二次K14......,最后一次用K0,算法本身并没有任何变化。

图4.11 DES算法的主要过程

为了增加密钥的长度,人们建议将一种分组密码进行级联,在不同的密钥作用下,连续多次对一组明文进行加密,通常把这种技术称为多重加密技术。对DES,建议使用3DES增强加密强度。3DES算法是扩展DES密钥长度的一种方法,可使加密密钥长度扩展到128比特(112比特有效)或192比特(168比特有效)。

3DES可以用两个密钥对明文进行三次加密,假设两个密钥是K1K2

1)用密钥K1进行DES加密。

2)用K2对步骤1的结果进行DES解密。

3)对2)的结果使用密钥K1进行DES加密。

3DES的缺点是加、解密速度比DES慢。

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
相关文章
    无相关信息
栏目更新
栏目热门