DES加密的自我总结

341次阅读
没有评论

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,依次类推。

DES 加密的自我总结

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

大体步骤如下文:

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

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

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

DES 加密的自我总结

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

DES 加密的自我总结

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

循环左移表:

DES 加密的自我总结

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

P 盒压缩如下图:

DES 加密的自我总结

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

DES 加密的自我总结

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

DES 加密的自我总结

扩展置换表:

DES 加密的自我总结

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

DES 加密的自我总结

S 盒置换表如下图:

DES 加密的自我总结

S 盒运算举例:

DES 加密的自我总结

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

DES 加密的自我总结

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

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

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

P 盒置换表:

DES 加密的自我总结

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

如总图最后一步:

DES 加密的自我总结

DES 算法的安全强度:

DES 加密的自我总结

正文完