随着信息技术的飞速发展,人们对信息系统的安全性,信息传输的保密性要求越来越高。伴随着通信和计算机技术发展起来的现代密码学,不仅在解决信息的机密性、而且在解决信息的完整性、可用性和抗抵赖性方面发挥着不可替代的作用。密码技术使得两个在不安全信道中通信的人,以一种使其敌手不能明白和理解通信内容的方式进行通信,保证了信息的安全。就密码体制而言,一般分为两类,对称密码体制和公钥密码体制。

对称密码体制其特点是发送和接收的双方使用同一密钥,且该密钥必须保证不被泄露;加密算法的安全性依赖于密钥的秘密性,而非算法的秘密性。DES加密算法就是对称加密体制中的佼佼者。1977年1月,美国政府采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES)。DES被授权用于所有公开的和私人的非保密通信场合,后来它又曾被国际标准组织采纳为国际标准。

虽然现在DES已不作为数据加密标准,但至今它仍然被广泛的应用,而且它是一种最有代表性的分组加密体制。因此,研究这一算法的基本原理、设计思想、安全性分析以及实际应用中有关问题,对于掌握分组密码理论和当前的实际应用都是很有意义的。

一、 DES算法原理

DES是一种分组加密算法。明文分组长度为64位。加密得到的密文分组长度为64位。密钥长度64位,8个字节。每一个字节的最高位用于奇偶效验,所以有效密钥长度为56位。其分组加密过程描述如下:①子密钥Ki的生成。②64位的明文经过一个初始置换IP后,被分成左右两半部分,每个部分32位,以L0和R0表示。③进行16轮迭代变换:第i 轮变换将上一轮变换所得到的结果的右半部分与第i个子密钥Ki结合,这个过程称为f函数。第i轮变换结果的左半部分为上一轮变换结果的右半部分(即:Li=Ri-1),其右半部分为上一轮变换结果的左半部与上一轮变换结果的右半部经过F函数处理所的结果的异或:Ri=Li-1⊕F(Ri-1,Ki)。④16轮变换之后左右两部分再连接起来,经过一个初始逆置换IP-1得到密文。 其加密过程如图1所示。

DES的解密算法与加密算法完全相同,只需要将密钥的应用次序与加密时相反应用即可。即解密过程是初始置换函IP数接受长度为64比特的密文输入, 将16个子密钥按照K16到K1的顺序应用与F函数的16轮迭代运算中, 然后将迭代的结果经由末置换函数IP-1得到64位的明文输出。

二、 两个密钥的三重DES

由于DES密钥只有56bit,易于遭受穷举时攻击。作为一种替代加密方案,Tuchman提出使用两个密钥的三重DES加密方法,并在1985年成为美国的一个商用加密标准。该方法使用两个密钥,执行三次DES算法,如图2所示。加密的过程是加密-解密-加密,解密的过程是解密-加密-解密。

采用两个密钥进行三重加密的好处有:①两个密钥合起来有效密钥长度有112bit,可以满足商业应用的需要,若采用总长为168bit的三个密钥,会产生不必要的开销。②加密时采用加密-解密-加密,而不是加密-加密-加密的形式,这样有效的实现了与现有DES系统的向后兼容问题。因为当K1=K2时,三重DES的效果就和原来的DES一样,有助于逐渐推广三重DES。③三重DES具有足够的安全性,目前还没有关于攻破三重DES的报道。

三、Java语言编程实现DES算法

1、 子密钥的生成

1) PC-1变换。

将原密钥的各位按照PC-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

2) 将排好的密钥分成两部分,前面28位为C0,后面28位为D0。

3) 从i=1开始,循环执行16次以下步骤得到16个子密钥。

① 对Ci-1和Di-1进行相同位数的循环左移,得到Ci和Di

左移的位数为:

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 22 221

② 连接Ci和Di,按照矩阵PC-2排列选择合适的位,构成子密钥Ki,该过程将56位压缩到48位,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

知识点:

三重DES就是对明文使用两个以上不同的密钥利用相同的加解密算法分别加解密处理三次。