Contents
简介
DES(Data Encryption Standard)是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称密码。DES一直以来被许多国家政府和银行广泛使用。
DES是一种能将64比特的明文加密成64比特密文的对称加密算法,加密和解密密钥相同。密钥长度为56比特,但是每隔7比特会设置一个错误检查比特,所以总长度有64比特。如果加密的明文比较长,DES以64比特为一组进行加密,所以DES也是“分组密码”的一种。
随着信息技术的发展,DES已经能够被计算机暴力破解,所以相对来说DES已经不是那么安全,现在大多数使用的对称加密算法是AES算法。
Feistel网络
DES采用了Feistel网络结构,这个结构不仅用于DES,有一些别的加密算法也使用到了这种结构。按照外国人取名的惯性,这个名字当然是来自于某个大神的名字啦,它的设计者是Horst Feistel。
DES是一种16轮循环的Feistel网络,Feistel网络的整个加密过程就是若干次轮(round)的循环。接下来,我们看一下每一轮到底是什么样子的。先上图:
如图所示,输入64比特的明文,会被左右两部分,每部分都是32比特。右侧直接向下,成为输出的一部分。同时,右侧部分与子密钥输入轮函数,轮函数的输出再与左侧部分进行异或,异或后的结果,即为加密后的左侧,左侧输出与右侧输出结合起来,就是经过一轮后的输出。在Feistel网络的每一轮中,都需要使用不同的子密钥。这一轮加密的核心是轮函数。
所以,一轮的步骤为:
- 将输入的数据等分为左右两部分
- 将输入的右侧直接发送到输出的右侧
- 将输入的右侧发送到轮函数
- 轮函数根据右侧数据和子密钥输出一段比特序列
- 将第4步中得到的比特序列与左侧数据进行XOR异或运算,将结果作为输出的左侧
这样来看,经过每一轮,右侧的32比特根本就没有进行加密,Feistel网络结构当然不会就这么简单。在Feistel网络中,每完成一轮,就会将左右两侧进行对调,然后使用不同的子密钥再继续进行一轮的运算,如此循环往复,经过多轮循环后,就得到最后的加密结果。DES就是经过16轮循环的Feistel结构加密算法。
解密的时候,只需要按照相反的顺序使用子密钥,按照与加密同样的方式进行处理,就能够完成解密过程。加密和解密实际上就是改变子密钥的顺序,实际处理相同。
Feistel网络的性质:
- 轮数可以任意增加
- 加密时使用任何函数作为轮函数都可以正确解密
- 加密和解密使用完全相同的结构来实现
三重DES
三重DES,通常缩写为3DES,是将DES重复三次,从而增加了加密算法的强度。值得注意的是,3DES不是用DES加密了3次,而是使用DES进行“加密→解密→加密”这样的过程,可以表示为EDE(Encryption→Decryption→Encryption)。这样做的目的是为了使三重DES能够兼容普通的DES,因为当三次DES加密使用的密钥相同时,三重DES就等同于普通的DES。
加密、解密和加密这三个过程使用不同的密钥,这样的三重DES称为DES-EDE3。如果两个加密过程使用同一个密钥,中间的解密过程使用不同的密钥,这样的三重DES称为DES-EDE2。
同理,三重DES的解密过程也是和加密正好相反,按照密钥3、密钥2、密钥1的顺序分别执行“解密→加密→解密”这样的顺序进行操作。
有一点需要注意:三重DES的处理速度不高,效率较低。
参考资料:《图解密码技术》 [日] 结城浩 著;周自恒 译