信安读书笔记04-DES算法详解

前言时刻:

大名鼎鼎的 DES (data encryption standard)加密算法,第一代的标准加密算法,虽然被后来的 AES 取代,但是思路还是可以学习下的。它是典型的分组加密算法,同时也是对称加密。

加密过程真的很复杂,看第一遍的时候,很懵逼,又读了一遍终于搞明白了,大致过程就是先置换然后分组代换,之后逆置换就得到密文,最重要的就是分组那一块。下面开始总结,要是有时间,手写下加密算法也不错。

1、初识DES

DES 加密算法主要分为:

  1. 处理明文,将其分为每64位一组,对每组进行下面的处理。
  2. 对每组进行初始置换操作,
  3. 子秘钥生成器
  4. 16次迭代加密
  5. 逆置换
  6. 完毕

1、初始置换

首先做初始置换,明文先按照1到64进行排序,然后按照下面表中的序号进行排序置换,就变成了58 50 42 ……

看下面图需要注意的是,红色方框标出的序号虽然标是1 2 3……,但是其实58 50 42 ……,因为作者是为了和后面做迭代变换的序号相统一。

初始置换.jpg

将置换后的64为数据分开,分为左32位L0L_0,和右32位R0R_0

2、16次迭代变换

秘钥(64位)对明文进行16次的迭代,分为左32位 L 和右32位 R,每次迭代都是对右 R 进行处理,在每次迭代之后,让 L 与 R 进行模2相加得到 R1 然后赋给 R,将之前没处理的 R 赋给 L,参与下一次的迭代运算中。

16次迭代变换流程图.png

其中最重要的就是子秘钥加密那一块。

2.1 选择扩展运算

核心思想是将 R 的32位变成48位,其变换规则如下:虽然不知道为啥要这样变换,但是肯定有其道理的,搞不懂。

选择扩展位规则.png

2.2 子秘钥生成

超重点,是AES的精髓,请看下面的介绍。

  1. 首先初始化的秘钥 K 是64位,去除其中的奇偶校验位(8位)8、16、24、32、40、48、56、64,得到剩下的56位 K0。

  2. 进行第一次的PC-1置换操作,56位秘钥按照下方的置换规则,之后对半分为左 C0C_0 和右 D0D_0 ,然后参与下面的PC-2的置换操作。

子秘钥生成pc-1.png

  1. 对上面第一次置换得到的 C0C_0D0D_0 ,进行移位操作,规则是:第 ii 次迭代,就左移 kik_i 位,具体规则如下:

子秘钥生成pc-1移位表.png

例如:C1=c1c2c28C_1 = c_1c_2…c_{28}D1=d1d2d28D_1 = d_1d_2…d_{28},则 C2C_2 是第二轮,就在 C1C_1 的基础上左移一位C2=c2c3c28c1 C_2 = c_2c_3…c_{28}c_1D1=d1d2d28D_1 = d_1d_2…d_{28}

C3C_3 是第三轮,就在 C2C_2 的基础上左移一位C3=c3c4c28c1c2 C_3 = c_3c_4…c_{28}c_1c_2

C4C_4 是第三轮,就在 C2C_2 的基础上左移两位C3=c5c6c28c1c2c3c4 C_3 = c_5c_6…c_{28}c_1c_2c_3c_4

  1. 进行第二次的 PC-2 置换操作,首先删掉 C 中的9、18、22、25和 D 中的7、9、15、26,然后进行以下规则的置换操作,就可得到参与第 ii 次加密的子秘钥 kik_i

子秘钥生成pc-2.png

  1. **最后:**就是用子秘钥 kik_i 和之前选择扩展得到的48位明文进行模2相加,最终得到的就是子秘钥加密后的密文

2.3 选择压缩运算

使用子秘钥加密后的48密文进行压缩,分成8组,每组6位,按照压缩规则变成4位,最后输出32位。压缩规则如下:

设每组的数据是 b1b2b3b4b5b6b_1b_2b_3b_4b_5b_6 ,取其中的 b1b6b1b6 作为行数,取剩余的 b2b3b4b5b_2b_3b_4b_5 作为列数,然后在 S 盒中找到对应的值的二进制数,就是要要输出的4位数。

s盒.png

2.4 置换运算

置换规则如下,将上面压缩完毕得到的数据 RiR_i与左边 LiL_i 进行模2相加得到的值赋给 Ri+1R_{i+1},而 RiR_i 则赋给 Di+1D_{i+1}。之后进入下次的循环从 2.1 选择扩展运算 开始,一直循环16次才结束迭代置换操作。

置换运算.png

16次迭代全部结束后,拼接左右R和L变成64位,进行最后的逆置换,就可得到最终的密文。

3、逆置换

逆置换和初始置换值相反的,规则如下:

逆置换.png

这样就得到最终的密文,结束。

手写算法:

后补

总结:

有点复杂,多看看就好,接下来写AES的加密以及序列密码。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享