Symmetric-key cryptography
XOR
异或XOR,全称exclusiveor。
两个相同的数进行XOR运算的结果一定为0。对同一个比特序列进行两次XOR之后就会回到最初的状态,与加密解密的步骤相似。
DES(Data Encryption Standard)
DES是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特。尽管从规格上来说,DES的密钥长度是64比特,但由于每个7比特会设置一个用于错误检查的比特,因此实质上其密钥长度是56比特。(DES已经能够被暴力破解,因此现在不应该再使用DES了。)
DES的结构(Feistel网络)
Feistel网络中的一轮:
上面一轮中“右侧”根本就没有被加密,因此需要用不同的子密钥对一轮的处理重复若干次,并在每两轮处理之间将左侧和右侧的数据对调,如下图的3轮加密计算:
用相同的子密钥运行两次Feistel网络就能够将数据还原
Feistel3轮解密:
Feistel网络的性质:
- Feistel网络的轮数可以任意增加
- 加密时无论使用任何函数作为轮函数都可以正确解密
- 加密和解密可以用完全相同的结构来实现
三重DES(triple-DES)
三重DES是为了增加DES的强度,将DES重复3次所得到的一种密码算法,通常缩写为3DES。
- 三重DES的加密机制:
当三重DES中所有的密钥都相同时,三重DES就等同于普通的DES了。这是因为在两步加密、解密之后,得到的就是最初的明文。因此,以前用DES加密的密文,就可以通过这种方式用三重DES来进行解密,也就是说三重DES对DES具备向下兼容性。
如果密钥1和密钥3使用相同的密钥,而密钥2使用不同的密钥(也就是只使用两个DES密钥),这种三重就称为DES-EDE2。密钥1、密钥2、密钥3全部使用不同的比特序列的三重DES称为DES-EDE3。
三重DES(DES-EDE3)的解密:
三重DES现状:尽管三重DES目前还被银行等机构使用,但其处理速度不高,而且在安全性方面也逐渐显现出了一些问题。
AES(Advanced Encryption Standard)
AES采用的是Rijndael算法,Rijndel的分组长度为128比特,密钥长度可以以32比特为单位在128比特到256比特的范围内进行选择(不过在AES的规格中,密钥长度只有128、192和256比特三种)。
Rijndael的加密中的一轮:
Rijndael的解密中的一轮:
对称密钥的选择
- 今后最好不要将DES用于新的用途,因为随着计算机技术的进步,现在用暴力破解法已经能够在现在的时间内完成对DES的破解。
- 出于兼容性的因数三重DES在今后还会使用一段时间,但逐渐会被AES所取代。
- 今后大家应该使用的算法是AES(Rijndael),因为它安全、快速,而且能过在各种平台上工作。此外,由于全世界的密码学家都在对AES进行不断的验证,因此即便万一发现它有什么缺陷,也会立刻告知全世界并修复这些缺陷。