DES 数据加密标准 复习笔记
一、基本属性
- 密码类别:分组密码
- 核心结构:Feistel 结构
- 关键参数
- 分组长度:64 bit
- 原始密钥长度:64 bit(含 8 位校验位,实际有效密钥 56 bit)
- 迭代轮数:16 轮
二、整体加密流程
- 初始置换 IP:对 64 bit 明文按固定规则重排
- 16 轮 Feistel 迭代:数据拆分为左右各 32 bit,逐轮执行轮函数运算
- 左右交换:16 轮结束后互换左右两半数据
- 逆初始置换 $\boldsymbol{IP^{-1}}$:执行 IP 的逆置换,输出 64 bit 密文
1 | flowchart TD |
三、Feistel 轮运算
1. 核心公式
$$
\begin{align*}
L_i &= R_{i-1} \
R_i &= L_{i-1} \oplus F(R_{i-1},\ K_i)
\end{align*}
$$
- $L_i,R_i$:第 $i$ 轮左、右半部分 32 bit 数据
- $F$:轮函数;$K_i$:第 $i$ 轮 48 bit 子密钥
2. 轮函数 F 执行步骤
输入:32 bit 右半数据 $R_{i-1}$;输出:32 bit 运算结果
- 扩展置换(E 表):32 bit → 48 bit,匹配子密钥长度,增强扩散性
- 异或子密钥:48 bit 扩展结果与 48 bit 子密钥 $K_i$ 按位异或
- S 盒代换
- 48 bit 分为 8 组,每组 6 bit 对应 1 个 S 盒
- 单盒规则:6 进 4 出;输入第 1、6 位为行号,第 2~5 位为列号,按行优先查表输出 4 bit
- 8 盒输出拼接为 32 bit
- 置换运算(P 表):对 32 bit 结果重排,强化扩散效果
四、子密钥生成(密钥扩展)
- PC-1 置换:64 bit 原始密钥剔除 8 位校验位,输出 56 bit 有效密钥
- 分组移位:56 bit 拆分为左 $C_0$、右 $D_0$ 各 28 bit;每轮按规则执行左循环移位
- PC-2 置换:移位后的 56 bit 压缩置换为 48 bit,得到当前轮子密钥 $K_i$
- 16 轮共生成 16 个子密钥 $K_1 \sim K_{16}$
五、解密规则
解密算法与加密完全一致,仅需将 16 轮子密钥逆序使用(第 1 轮用 $K_{16}$,最后一轮用 $K_1$),是 Feistel 结构的核心优势。
六、核心常量变换汇总
| 类别 | 变换名称 |
|---|---|
| 明文置换 | 初始置换 IP、逆初始置换 $IP^{-1}$ |
| 轮函数变换 | 扩展 E 表、S 盒代换、置换 P 表 |
| 密钥扩展变换 | 置换选择 PC-1、置换选择 PC-2、左循环移位位数表 |
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 slowbirdie.top@outlook.com