4. DES 算法:数据加密标准
DES(Data Encryption Standard)是密码学史上最具影响力的对称分组密码算法之一。1977 年由美国国家标准局(NIST 前身)正式采纳为联邦标准,奠定了现代分组密码设计的基石。DES 使用 56 位密钥对 64 位数据块进行加密,核心结构为 16 轮 Feistel 网络。
4.1 算法总体流程
DES 加密过程分为三个主要阶段:初始置换(IP)、16 轮 Feistel 迭代、逆初始置换(IP-1)。下图展示了 DES 的完整加密流水线:
4.2 初始置换与逆初始置换
IP 置换将 64 位明文按固定置换表重新排列,IP-1 为其逆操作。这两个置换与密码强度无关,仅用于简化硬件布线。
| 置换名称 | 输入长度 | 输出长度 | 作用 |
|---|---|---|---|
| IP(初始置换) | 64 位 | 64 位 | 打乱原始比特顺序,分为 L₀(32 位)和 R₀(32 位) |
| IP-1(逆初始置换) | 64 位 | 64 位 | 恢复 IP 的置换,输出最终密文 |
4.3 16 轮 Feistel 结构与轮函数
DES 的核心是 16 轮 Feistel 迭代。每轮使用 48 位子密钥对右半块(32 位)进行轮函数 F 处理,再与左半块异或。轮函数 F 包含四个步骤:
- 扩展置换(E 盒):将 32 位右半块扩展为 48 位,增加冗余和扩散性。
- 异或子密钥:48 位扩展结果与 48 位子密钥 Kᵢ 逐位异或。
- S 盒替换:将 48 位数据分为 8 组,每组 6 位输入对应 4 位输出。8 个 S 盒(S₁~S₈)是 DES 唯一的非线性组件,提供密码强度核心保障。
- P 盒置换:32 位 S 盒输出按固定置换表重新排列,增强比特扩散。
关键设计点: S 盒是 DES 安全性的基石。每个 S 盒接收 6 位输入(2 位行号 + 4 位列号),输出 4 位。S 盒设计满足严格雪崩准则(SAC)和差分均匀性要求,抵抗差分密码分析。
4.4 S 盒与 P 盒详解
下表列出 8 个 S 盒的基本参数:
| S 盒编号 | 输入位数 | 输出位数 | 行数 | 列数 | 非线性度 |
|---|---|---|---|---|---|
| S₁ ~ S₈ | 6 | 4 | 4(0~3) | 16(0~15) | 高(抵抗线性/差分分析) |
P 盒置换将 32 位输入按固定映射重新排列,确保每个 S 盒的输出比特扩散到下一轮多个 S 盒的输入中。P 盒置换表(十进制索引,1-based):
P 盒置换表(32 位输出顺序):
16, 7, 20, 21, 29, 12, 28, 17,
1, 15, 23, 26, 5, 18, 31, 10,
2, 8, 24, 14, 32, 27, 3, 9,
19, 13, 30, 6, 22, 11, 4, 25
4.5 密钥调度算法
DES 使用 64 位密钥(含 8 位奇偶校验位,有效密钥长度 56 位),通过密钥调度生成 16 个 48 位子密钥。流程如下:
- PC-1 置换:去除 8 位奇偶校验位,将 56 位密钥分为 C₀(28 位)和 D₀(28 位)。
- 循环左移:每轮对 Cᵢ 和 Dᵢ 分别循环左移 1 位或 2 位(第 1、2、9、16 轮左移 1 位,其余左移 2 位)。
- PC-2 置换:从 56 位(Cᵢ + Dᵢ)中选择 48 位作为子密钥 Kᵢ。
注意: 解密时子密钥使用顺序与加密相反(K₁₆ → K₁),循环左移变为循环右移。Feistel 结构保证加解密硬件逻辑完全一致。
4.6 3DES(三重 DES)
由于 DES 的 56 位密钥已不满足安全需求,3DES 通过级联三次 DES 操作提升安全性。最常用的模式为 EDE(Encrypt-Decrypt-Encrypt):
3DES-EDE 加密:C = E_{K₃}(D_{K₂}(E_{K₁}(P)))
3DES-EDE 解密:P = D_{K₁}(E_{K₂}(D_{K₃}(C)))
3DES 支持三种密钥选项:
| 密钥选项 | 密钥长度 | 有效安全强度 | 兼容性 |
|---|---|---|---|
| 选项 1(K₁ ≠ K₂ ≠ K₃) | 168 位(3×56) | 112 位 | 最高安全性 |
| 选项 2(K₁ = K₃ ≠ K₂) | 112 位(2×56) | 80 位 | 兼容 2TDEA |
| 选项 3(K₁ = K₂ = K₃) | 56 位 | 56 位 | 向后兼容单 DES |
安全警告: 3DES 已于 2023 年被 NIST 正式弃用(SP 800-131A Rev.2),推荐迁移至 AES。3DES 的主要问题包括:处理速度慢(约为 AES 的 1/3)、64 位分组大小易受生日攻击(约 2³² 分组后碰撞概率显著)。
4.7 DES 的安全性与局限性
DES 在密码学历史上具有里程碑意义,但现代视角下存在明显不足:
- 密钥长度过短:56 位密钥在 1999 年已被 EFF 的 Deep Crack 在 22 小时内暴力破解。现代 FPGA/ASIC 集群可在数分钟内完成穷举。
- 分组大小不足:64 位分组在 CBC/CTR 等模式下,约 2³² 分组后碰撞概率达到 50%,易受 Sweet32 等攻击。
- 互补性缺陷:DES 具有互补性质:EK(P) = C 时,E¬K(¬P) = ¬C,可将暴力搜索空间减半。
- S 盒设计未公开:S 盒设计准则直到 1990 年代才部分公开,早期引发对后门的担忧(后续分析表明 S 盒对差分密码分析有最优抵抗性)。
- 弱密钥与半弱密钥:存在 4 个弱密钥(子密钥全相同)和 12 个半弱密钥(成对出现),使用时应排除。
下表总结 DES 的主要参数与安全指标:
| 参数 | 数值 | 安全评价 |
|---|---|---|
| 分组大小 | 64 位 | 不足(现代标准至少 128 位) |
| 有效密钥长度 | 56 位 | 不足(暴力破解可行) |
| 轮数 | 16 轮 | 充足(8 轮可抵抗差分分析) |
| S 盒非线性 | 高 | 优秀(抵抗线性/差分分析) |
| 雪崩效应 | 约 50% 比特变化 | 良好(P 盒扩散充分) |
历史地位: DES 的设计思想(Feistel 结构、S 盒/P 盒组合、密钥调度)深刻影响了后续密码算法(如 AES、Blowfish、Camellia)。尽管 DES 已退役,其作为教学案例的价值不可替代。