DES加密算法原理简介


从自己整的密码学笔记里单独摘录出来的。

一知半解,有误欢迎提醒。


3.1 数据加密标准DES

DES算法将明文按64位分组,使用的**长度为64位(实际参与加密的有56位)。

**的第8、16、24、…、64位作为校验位,不参与加密

DES的加密思想是对**和明文都进行一系列复杂变换处理,中间分为多个小段单独异或加密,最后再合成变换得到最终密文。符合所谓的混淆原则扩散原则

混淆原则:密文与其对应的明文与**的关系足够复杂。

扩散原则:密文中的每一位都受到明文和**中的尽可能多位的影响,以隐蔽明文

的统计特性和结构规律。

3.1.1 子**

DES中的**不是直接使用的,要经过一系列变换才能拿去跟明文做异或。

  1. 提取有效位(56位)

    DES中**的转换表(DesTransform[56])

    DES加密算法原理简介

    把64位**提取出56位。(去除校验位)

    后续会用到各种转换表,这里简单解释一下,比如第一行第一列的“57”,意思就是把原本数据表中第57个数据填到转换后的新表中的第一行第一列这个位置。

  2. 旋转左移,16种结果

    针对DES子**每一轮的旋转次数(Round轮,Rotations旋转次数)(DesRotations)

    DES加密算法原理简介

    为了得到16个不同的子**,先将上一步得到的56位**分为两组各28位,接着根据该旋转表,分别旋转左移对应位数,旋转完再合并,这样就得到一组新子**,而下一组是在前一组的基础上再次对半分并旋转左移获得的。最终生成16组子**。

  3. 置换选择

    DES子**的置换选择(Despermuted[48])

    DES加密算法原理简介

    其实就是进一步缩小**位数。把上一步获得的16组子**分别通过该转换表。

于是,我们得到了16组各48位的子**。

3.1.2 加密解密

明文按照64位一组分组。以下操作针对一组64位的明文。

  1. 初始置换

    DES中数据的初始置换(DesInitial[64])

    DES加密算法原理简介

    先将明文按转换表打乱初始化,并将处理后的数据分为两组各32位,记为L0和R0。

  2. 扩展置换

    DES中数据块的扩展置换(DesExpansion[48])

    DES加密算法原理简介

    将Ri由32位转换扩展到48位。

    目的是在加密数据的过程中制造一些雪崩效应

    使用数据块中的1位,将在下一步操作中影响更多位,从而产生扩散效果

  3. XOR

    一旦扩展置换完成,便将所得48位数据Ri与先前的子**Ki做XOR异或运算。

    迭代16次,每次使用对应次序的子**。

  4. S盒替换

    S盒替换表一共有8个。主要作用是重新把48位数据压缩为32位。

    S盒为数据增加了不确定性,从而提升了安全性。

    将上一步扩展后获得的48位数据Ri按6位一组,分成8组。

    例:

    DES加密算法原理简介

    假设我们取第一组数据按上图处理,得到第三行,第15列,则在第一张S盒替换表中找到对应位置的数,这里我们假设找到的数是13,便再将其转换为二进制数1101,这样,便完成了6位数据压缩为4位数据的过程。

  5. P盒置换

    DES中数据块的P盒置换

    DES加密算法原理简介

    将上一步获得的32位数据经过P盒置换表。

  6. 两组异或

    从第2步到第5步的操作定义为一个函数f。假设我们回到一开始获得的R0R_0,经过函数f后,输出的应该是一组32位的数据,我们设其为R0R_0'。接下来的操作就是将一开始的另一组数据L0L_0R0R_0'进行XOR异或操作,结果值设为L0L_0'

  7. 交换

    现在,经过一系列变换,我们有了新的左右分组L0L_0'R0R_0',于是,我们交换两组的位置,即设R1=L0R_1=L_0'L1=R0L_1=R_0'

  8. 迭代

    分组LiL_iRiR_i重复第2步到第7步的操作,总共要完成16轮的迭代。其中,最后一轮中左右分组不用交换

    第16轮的R16R_{16}在左边,L16L_{16}在右边。

  9. 连接

    将最后得到的左分组和右分组重新合并,得到一组64位数据。

  10. 最终置换

    DES中数据块的最终置换

    DES加密算法原理简介

    最终置换其实就是初始置换的逆转换。数据经过该转换表得到最终结果。

总结:

对于这第1步到第10步,如果输入的是明文,输出就是密文;如果输入的是密文,输出就是明文。

整个流程其实可以用下图表示:

DES加密算法原理简介

参考资料:

数据加密算法–详解DES算法原理与实现

DES加密算法-《信息安全技术》课程微课设计