【 络安全】数据加密标准(DES算法)详细介绍( 分组密码、Feistel密码结构、轮函数、子密钥生成算法)

文章目录

    • 1 分组密码
    • 2 Feistel密码结构
      • 2.1 什么是Feistel密码结构
      • 2.2 Feistel密码结构流程图
      • 2.3 Feistel密码设计要素
    • 3 数据加密标准(DES)
      • 3.1 什么是数据加密标准(DES)
      • 3.2 DES介绍
        • 初始置换
        • 轮函数
          • 扩展运算
          • 压缩运算
        • 子密钥生成算法
        • 逆初始置换

1 分组密码

将被加密明文划分成一个一个的分组,输入n比特明文分组,输出n比特密文分组。

若映射可逆,具有 x n ! x^n! xn! 种替换可能性。

如以下示例,每个4比特输入唯一映射为另一个4比特输出。

用流程图画出来就是这样的:

接下来介绍每一个操作的具体实现

初始置换

DES会有标准的置换矩阵,在实现算法的时候不要改动这些标准的矩阵,虽然改动了也可以完成加解密,但是与其他人通信的时候别人使用标准的置换矩阵就解密不出来了。

初始置换其实是一个矩阵置换(不是映射,这里只是改变了位置)的过程,这里左边是64比特明文输入,下边是标准的置换矩阵,我们需要对明文通过置换矩阵进行初始置换得到右边的矩阵(这里先称为密文矩阵,但其实不是最终的密文矩阵,只是第一步加密得到的)。

比如,置换矩阵的第一行第一列是58,我们在明文矩阵中找到第58个比特,然后放到密文矩阵的第一行第一列;置换矩阵的第一行第二列是50,所以在明文矩阵中找到第50个比特,然后放到密文矩阵的第一行第二列。按照这种方式,一一置换,得到第一次置换的矩阵。

扩展运算

我们说整个加密过程会先分组为64比特明文的输入,每个64比特再分为左右两部分,每个部分32比特,在论函数的第一步是对32比特进行扩展运行 E E E,将32比特通过扩展矩阵变为48比特。

具体过程如下图所示,其实就是添加冗余。可以看到生成的扩展矩阵(48比特)第2列到第5列的值是原封不动加入进来的,第1列和第6列再从原来的32比特矩阵对应取出。(跟前面讲过的初始置换矩阵原理是一致的)

这里需要思考从48比特置换回32比特的操作(多到1)是可逆的吗实是可逆的,只需要将冗余去掉就得到原来的矩阵了。

那具体的映射规则是怎么样呢/p>

前面说的分成8个6比特的小组,我们称为S_1 . . . … ...S_8$一共8个S-BOX,每个S-BOX之下都有一张标准化的表(做算法的时候不要改动这些表,表中最大的值是15,因为最后要转化为4比特),且每个S-BOX的表都是不一样的。这里的规则是这样的:

  • 输入的是6比特: b 1 b 2 b 3 b 4 b 5 b 6b_1b_2b_3b_4b_5b_6 b1?b2?b3?b4?b5?b6?,比如这里输入110011
  • b 1 b 6b_1b_6 b1?b6?提取出来当作行,将 b 2 b 3 b 4 b 5b_2b_3b_4b_5 b2?b3?b4?b5?提取出来当作列,那么提取出来的行是11(转为十进制是3),列是1001(十进制是9)
  • 根据十进制的行是3,列是9,在S-BOX中找到第3行第9列的数字是14
  • 再将14转化为二进制,是1100,这个1110就是压缩后的4比特。

如此,将全部8个6比特的小组都转化4比特。这里因为S-BOX表中有重复的值,所以逆操作是不唯一的,所以是压缩操作是不可逆的运算。

逆初始置换

逆初始置换的概念其实跟前面讲过的初始置换是有联系的,我们前面通过置换矩阵将M1…M64的明文矩阵打乱为密文矩阵,这里的逆初始置换操作跟初始置换是一样的,只是使用的是的逆置换矩阵。

【 络安全】数据加密标准(DES算法)详细介绍( 分组密码、Feistel密码结构、轮函数、子密钥生成算法)

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览33834 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年3月2日
下一篇 2022年3月2日

相关推荐