对称密码指的是用相同的密钥进行加密和解密。

在Feistel网络中,加密的各个步骤称为,整个加密过程就是进行若干次轮的循环。

DES是一种16轮循环的Feistel网络。

基本结构

下图是Feistel网络中的一轮:

图片说明:

  1. 子密钥:在Feistel网络中,每一轮都需要使用一个完全的子密钥。子密钥只能在一轮中使用,是一个局部密钥。
  2. 轮函数:根据“右侧”和子密钥生成对“左侧”进行加密的比特序列。将轮函数的输出与“左侧”进行异或运算,其结果就是“加密后的左侧”。

加密步骤

  1. 将输入的数据等分为左右两部分。
  2. 将输入的右侧直接发送的输出的右侧。
  3. 将输入的右侧发送到轮函数。
  4. 轮函数根据右侧数据和子密钥,计算出一串看上去是随机的比特序列。
  5. 将上一步的到的比特序列与左侧数据进行异或运算,并将结果作为加密后的左侧。

加解密原理

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

在多个轮的情况下,Feistel网络的解密操作只要按照相反的顺序来使用子密钥就可以完成了。

Feistel网络本身的结构,在加解密时都是完全相同的。

3轮加解密

下图展示了3轮的Feistel网络,会对加密结果进行两次左右对调,以解决右侧不加密的问题

下面是feistel的3轮解密示意图:

性质

  1. Feistel网络的轮数可以任意增加。无论经过多少轮的加密,都不会出现无法解密的情况。
  2. 加密时无论使用任何函数作为轮函数都可以正确解密。(即便轮函数是单向哈希函数也无妨)
  3. 加解密可以用完全相同的结构来实现。

无论任何轮数、任何轮函数,Feistel网络都可以用相同的结构实现加密和解密,且加密的结果必定能够正确解密。

DES加密

DES是一种将64bit的明文加密乘64bit的密文的对称加密算法。 它的密钥长度为56bit。

术语说明
分组DES是以64bit的明文(bit序列)为一个单位来进行加密的,这个64bit的单位称为分组。
分组密码一般来说,一分组为单位进行处理的密码算法称为分组密码。DES就是分组密码的一种。
模式DES每次只能加密64bit的数据,如果要加密的明文比较长,就需要对DES加密进行迭代,而迭代的具体方式称为模式。

DES的加解密示意图如下:

差分分析与线性分析

差分分析是一种针对分组密码的分析方法,其思路是改变一部分明文并分析密文如何随之改变。通过分析密文改变中所产生的偏差,可以获得破译密码的线索。

线性分析的思路是将明文和密文的一些对应比特进行异或并计算结果为0的概率。如果密文具备足够的随机性,则任选一些明文和密文的对应比特异或结果为0的概率应该是$\frac{1}{2}$。