DES加密的自我总结

  信息安全

DES加密的几个要点或者说是知识点:

1:DES处理的明文需要分组,分组长度为64位一组。加密秘钥长度也是64位,但是只有56位被用到,其他8位用作奇偶校验或者完全随意设置。

2:DES的加密和解密时用的算法相同,只不过子密钥的使用次序要反过来。

3:DES的整个体制是公开的,系统的安全性完全靠密钥的保密。

关于加密过程的几个知识点:

DES的加密与解密互逆。

加密过程有三个阶段构成:

1.首先是64位的初始置换 (initial permutation)IP,置换根据初始置换表来进行,置换表是DES给定的。置换表特征为:8行8列,最右一列从上到下为24681357,右2列为每个数+8,右3列为右2列+8以此类推。逆初始置换表依旧为8行8列,其中左2列从上到下为87654321,间隔一列+8,依次类推。

64位明文(2进制)在经过IP初始置换后被分成左右两个部分,每部分32位。

大体步骤如下文:

1.分成32位后要进行16次Feistel循环,这16轮(最开始是8轮但是后来发现8轮比较脆弱后加强为16轮)迭代被称为乘积变换,其中涉及轮函数F,这个函数本身既包含换位又包含代替,将数据和密钥结合起来,出去最后一轮外,每一轮变换后得到的左右两部分进行交换,最后一轮不交换,直接进行逆初始置换得到64位的密文。

2.DES算法子密钥输入长度为64位,但是只有48位是有效的,所以需要对密钥K进行变换得到每一轮所需的子密钥。16轮迭代就需要16个48位的子密钥来进行加密。

3.下面看一下16个密钥的生成:

64位的密钥去掉8位的效验位(即第8,16,24,32,40,48,56,64共8位)剩余56位按照置换表1进行分组置换得到C0与D0两组每组28位密钥。如下图:

得到的C0与D0分别按照循环左移位数表进行循环左移。

循环左移表:

循环左移之后按照置压缩型P盒将得到的56位输入压缩成48位输出就得到了一轮的密钥K,其中左移轮序16轮也是对应的16轮加密。

P盒压缩如下图:

4.在得到密钥K之后要与右部的R32位(扩展后)进行异或运算。

5.下面R(32位)就需要用扩展性P盒(上图中的扩展变换E)来进行32位到48位的变换。扩展到48位后才可以与秘钥进行异或运算。具体扩展过程如图所示:

扩展置换表:

6.在与48位秘钥异或运算后得到48位的输出,在进行S盒压缩处理,S盒一共有8个,每个S盒里面的数都是定义好的。48位输出数据按照8个S盒分成6组,每一个S盒是6进4出,8个S盒就得到32位。如下图:

S盒置换表如下图:

S盒运算举例:

得到行数盒列数,就到相应的S盒中找到对应的数。如下图:

7.这样就完成了6位到4位的S盒压缩。

S盒的设计机密一直以来没有公开,DES中的S盒有一下这几个属性:1.S盒的每一行都是0~15的一个排列;2.S盒是非线性的,输出不是输入的一个仿射变换;3.改变S盒的1位输入,至少有2位输出会发生改变。

8.在得到S盒的32位输出后,直接进行一轮P盒置换(非压缩)就得到最后的32位输出。

P盒置换表:

9.最后用L32位盒R32位进行逆初始置换IP(第一张图右半部分),就得到了最终输出的密文。

如总图最后一步:

DES算法的安全强度: