(六)对称密钥算法

前言

关于对称加密,前面也已经大概的了解过了。所谓的对称加密,也叫共享加密。实际上就是,发送端发送的信息,用加密的密钥进行加密,而接收端要进行解密,用的解密密钥和发送端加密的密钥是同一把钥匙。

对称密钥的算法,比较经典的,比较重要的有这么几种:

  1. DES(数据加密标准)
  2. 3DES(三重DES)
  3. AES(高级加密标准)
  4. IDEA(国际数据加密算法)
  5. RC4、RC5(流加密算法)

在这里,我们着重学习一下DES。

DES算法的原理:

1、DES算法属于对称密码体制,加密和解密使用的是相同的密钥

2、DES算法加密的原理是:把明文串进行分组,每64位一组对数据加密,所以,按理来说,对每一组进行加密的密钥也应该是长64位。但是,实际上密钥的长度并不是64位,而是只有其中的56位参与运算,密钥序列的第8、16、24、32、40、48、56、64位不参与运算,这几位是校验位。为什么要这样做呢,待会儿咱们再解释清楚。

3、DES算法的整体流程:

 

(六)对称密钥算法_第1张图片

 

下面按照这个流程,我们仔细的叙述一遍。

4、第一步,把明文先要分成每64位一组,紧接着进行IP初始置换

IP初始置换的目的是,把64位数据块重新排列组合。  置换的规则,如下表:

(六)对称密钥算法_第2张图片

这个表就指明了IP初始置换的规则,意思是把原来数据的第58位放到第1位,把原来数据的第50位放到第2位………,依次类推,把原来第7位数据放到第64位。每一组64位明文都像这样置换,这样就完成了初始置换,打乱了原来数据的顺序。

5、IP初始置换完成之后,紧接着,就是把置换完成之后的数据,分成左右两半部分,每一半的长度是32位

6、然后就要进行一套运算,这一套运算一共要进行16轮。这一套运算是:刚才我们已经把置换完成之后的64位数据分成了左右各32位的两半部分,因为一共要进行16轮这样的运算嘛,它每一轮运算的时候,都会把上一轮的右半部分直接作为下一轮新的左半部分,那么,上一轮的左半部分就会和F函数先进行异或运算,把异或得到的结果作为下一轮新的右半部分。

7、上一步中,提到一个F函数,这个F函数又是怎么出来的呢?它是上一轮的右半部分数据和密钥进行运算得出来的。我们上面说到了,参与运算的密钥的位数是56位,那么,每一轮计算F函数的时候,都会从这56位密钥当中,产生出不同的48位子密钥

现在读者们可能会想,既然F函数是由右半部分数据和子密钥运算得出来的,那么,右半部分数据是32位,子密钥是48位,这怎么运算的?

现在我给各位解释一下,其实,F函数内部是这样构成的:

(六)对称密钥算法_第3张图片

先把32位的右半部分进行扩展变换,扩展成48位的,再和48位的子密钥进行异或运算,再经过S盒替换,P盒置换。最终得到的结果再和原来的左半部分进行异或运算,才得到了下一轮新的右半部分数据。

8、扩展变换是怎么扩展的?

如下表:

(六)对称密钥算法_第4张图片

这左右两边的黄色的两列,就是扩展出来的两列。可以发现一个规律,每一行中间的四位是原本的数据,每一行左边的扩展位是此行的上一行的最后一位;每一行右边的扩展位是此行的下一行的开始位。

9、S盒替换

上面那一步,32位右半部分扩展变换成48位和48位密钥进行异或,得出来肯定还是48位。但是我们F函数还要和32位左半部分进行异或呢,这时候就需要把上一步得出来的48位进行压缩,S盒就具有这个功能。

S盒一共有8个,48位数据进入8个S盒,每个盒存6位,经过S盒内部压缩运算之后,输出的时候,是每个盒输出4位,8个盒一共32位。也就是说,S盒的功能就是数据压缩,48位输入变成32位输出

8个S盒里面也都是固定的,不需要我们记忆,我们只需要会观察它就可以了。

(六)对称密钥算法_第5张图片

(六)对称密钥算法_第6张图片

(六)对称密钥算法_第7张图片

(六)对称密钥算法_第8张图片

(六)对称密钥算法_第9张图片

(六)对称密钥算法_第10张图片

(六)对称密钥算法_第11张图片

(六)对称密钥算法_第12张图片

例如,假设S盒8的输入为110011,第1位和第6位组合为11,对应于S盒8的第3行;第2位到第5位为1001,对应于S盒8的第9列。S盒8的第3行第9列的数字为12,因此用110011就压缩成了1100。注意,S盒的行列计数都是从0开始。

10、P盒置换

经过S盒变换之后,再把得到的结果进行P盒置换,P盒置换也是固定的程式,和IP初始置换是一样的计算方法。

P盒内部如下:

(六)对称密钥算法_第13张图片

原数据块的第16位放到新数据的第1位,第7位放到第2位,……依此类推,第25位放到第32位。

11、IP逆置换

经过以上的16轮相同的步骤,得到的加密的结果,进行IP逆置换,就可以得到最终经过DES加密算法算出来的密文。

IP逆置换,就是IP初始置换的逆运算

在IP初始置换中,把原数据的第58位放到了第1位,第50位放到了第2位……第7位放到了第64位。那么,逆运算就是,把1位放到第58位,第二位放到第50位……第 64位放到第7位。

如下图:

(六)对称密钥算法_第14张图片

 

以上就是DES加密算法的全过程。  因为是对称密钥,所以解密的算法和加密的算法是一样的,只不过就是48位子密钥的使用次序和加密的时候相反。

然后,我们再简单的介绍一下,其他几个加密算法:

1、3DES,就是三重DES,简单的说,就是把DES算法执行三遍。这三遍的执行,又分两种情况。

第一种情况,用三把密钥,分别是K1、K2、K3,加密过程为:C=Ek3(Dk2(Ek1(P))),解密过程为:P=Dk1(EK2(Dk3(C)))。

第二种情况,用两把密钥K1和K2,加密过程为:C=Ek1(Dk2(Ek1(P))),解密过程为:P=Dk1(EK2(Dk1(C)))。

因为DES的密钥长度是56位,所以,3DES算法的密钥长度是168位(3X56)或112位(2X56)

2、AES,明文分组是每128位一组,密钥长度有三种:128位或192位或256位

3、IDEA,明文分组是每64位一组,密钥长度是128位

4、RC4和RC5就不是分组密码了,它俩属于流密码。一般来说,流密码的密钥长度会与明文的长度相同,把明文序列与密钥序列进行逐位的加密。流密码的密钥,是通过一个种子密钥和一个随机数产生器来生成的,随机数产生器的随机性越高,流密码就越能达到一次一密的效果。

你可能感兴趣的:(计算机网络(网络安全))