Symmetric-key cryptography

XOR

异或XOR,全称exclusiveor。

XOR

两个相同的数进行XOR运算的结果一定为0。对同一个比特序列进行两次XOR之后就会回到最初的状态,与加密解密的步骤相似。

DES(Data Encryption Standard)

DES是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特。尽管从规格上来说,DES的密钥长度是64比特,但由于每个7比特会设置一个用于错误检查的比特,因此实质上其密钥长度是56比特。(DES已经能够被暴力破解,因此现在不应该再使用DES了。)

  1. DES的结构(Feistel网络)

    Feistel网络中的一轮: Feistel网络中的一轮

上面一轮中“右侧”根本就没有被加密,因此需要用不同的子密钥对一轮的处理重复若干次,并在每两轮处理之间将左侧和右侧的数据对调,如下图的3轮加密计算: Feistel3轮加密

用相同的子密钥运行两次Feistel网络就能够将数据还原

Feistel3轮解密:

Feitel3轮解密

Feistel网络的性质:

  • Feistel网络的轮数可以任意增加
  • 加密时无论使用任何函数作为轮函数都可以正确解密
  • 加密和解密可以用完全相同的结构来实现

三重DES(triple-DES)

三重DES是为了增加DES的强度,将DES重复3次所得到的一种密码算法,通常缩写为3DES。

  1. 三重DES的加密机制: 三重DES加密

当三重DES中所有的密钥都相同时,三重DES就等同于普通的DES了。这是因为在两步加密、解密之后,得到的就是最初的明文。因此,以前用DES加密的密文,就可以通过这种方式用三重DES来进行解密,也就是说三重DES对DES具备向下兼容性。

如果密钥1和密钥3使用相同的密钥,而密钥2使用不同的密钥(也就是只使用两个DES密钥),这种三重就称为DES-EDE2。密钥1、密钥2、密钥3全部使用不同的比特序列的三重DES称为DES-EDE3。

  1. 三重DES(DES-EDE3)的解密: 三重DES解密

  2. 三重DES现状:尽管三重DES目前还被银行等机构使用,但其处理速度不高,而且在安全性方面也逐渐显现出了一些问题。

AES(Advanced Encryption Standard)

AES采用的是Rijndael算法,Rijndel的分组长度为128比特,密钥长度可以以32比特为单位在128比特到256比特的范围内进行选择(不过在AES的规格中,密钥长度只有128、192和256比特三种)。

  1. Rijndael的加密中的一轮: Rijndael加密中的一轮

  2. Rijndael的解密中的一轮: Rijndael的解密中的一轮

对称密钥的选择

  • 今后最好不要将DES用于新的用途,因为随着计算机技术的进步,现在用暴力破解法已经能够在现在的时间内完成对DES的破解。
  • 出于兼容性的因数三重DES在今后还会使用一段时间,但逐渐会被AES所取代。
  • 今后大家应该使用的算法是AES(Rijndael),因为它安全、快速,而且能过在各种平台上工作。此外,由于全世界的密码学家都在对AES进行不断的验证,因此即便万一发现它有什么缺陷,也会立刻告知全世界并修复这些缺陷。