一、简介
DES 算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是 1972 年美国 IBM 公司研制的对称密码体制加密算法。DES 是一种对称密码,即其加密过程和解密过程使用相同的密钥,与几乎所有现代分组加密一样,DES 也是一种迭代算法。DES 对明文中每个分组对加密过程都包含 16 轮,且每轮都操作完全相同
二、资料来源
《深入浅出密码学》–Christof Paar,Jan Pelzl 著
三、实现原理(主要流程
一、了解几个概念
1.初始置换/逆初始置换
按照一定的规则,将原来的 64 位二进制位重新排序
表中数字的意思是。第一个格子中是 58,意味着将 64 位二进制码中第 58 位的值,放到第一个格子的位置中,以此类推
初始置换表
逆初始置换表
2.f 函数
1)f 函数首先将输入经过扩展置换,将 32 位的输入扩展为 48 位。
2)将 48 位结果与第 i 轮第密钥 ki 进行 XOR(异或)操作
3)将异或操作第结果送入 S 盒进行压缩,压缩成 32 位
4)将 32 位的结果送入 P 盒置换
4.黑盒压缩
黑盒压缩,也称 S 盒压缩
就是把’48 位与 ki 异或之后‘的结果,进行压缩,压缩成为 32 位
使用的方法是将 48 位二进制码 每 6 个分成 1 组,一共 8 组,对应 8 个黑盒
下面以第一组为例,假设第一组中的二进制数为 100101 经过黑盒压缩,得到了 1000
以下是 8 个黑盒
5.P 盒置换
和上面初始置换的用法一样,表不同而已
6、密钥编排
密钥编排从原始的 56 位密钥中得到 16 个轮密钥 k,其中每个轮密钥 ki 都是 48 位,轮密钥的另一个术语叫子密钥。
PC-1
PC-2
二、具体流程
明文输入后,经过 初始置换,打乱了顺序。
经过初始置换被分成了 L0 和 R0 两部分
R0 经过 f 函数 得到的输出与 L0 进行 异或 操作,得到的输出作为下一轮的 R1
R0 作为下一轮的 L1
经过很多轮之后,将 L16 与 R16 交换左右之后,再进行一个 逆初始置换
则得到密文
f 函数中
Ri-1 经过 扩展置换 得到了 48 位的输出
将 48 位输出与 ki 进行异或,
将***异或***后的输出进行 S 盒压缩成 32 位
再进行 P 盒置换,得到输出,作为 f 函数的输出
密钥编排中
DES 输入的密钥通常是 64 位,其中每第 8 个位都作为前面 7 位的一个奇校验位。
所以将 64 位密钥进行 PC-1 得到 56 位,是将校验位全部去掉了
PC-1 的置换 和初始置换思路一样
将 PC-1 的输出分成长度均为 28 位的两部分
将两部分周期性地向左移动一或两位(即 循环移位 ),移动的具体位数取决于轮数 i
- 在第 i=1,2,9,16 轮中,左右两部分向 左移动一位
- 在 i != 1、2、9、16 轮时候,左右两部分向 左移动两位
经过 PC-2 后得到的 48 位输出作为 ki