Lec 4对称原语 II:PRP、Feistel、DES 与 AES
Lec 4 对称原语 II:PRP、Feistel、DES 与 AES
MIT 6.5610 · Lecture 4 · 关键词:PRP、PRP/PRF 切换引理、三步设计法、Feistel 网络、Luby–Rackoff、DES、AES(迭代 Even-Mansour)、缓存攻击、线性密码分析 来源:课程自家 PRP/AES 讲义(Henry Corrigan-Gibbs),对应 2026"Symmetric-key primitives II"。
TL;DR
- PRP 是带密钥的可逆置换,PRF 是随机外观函数;在查询量远小于生日界时,PRP/PRF Switching Lemma 允许把两者近似替换。
- Feistel 网络用不可逆轮函数构造可逆置换,Luby–Rackoff 给出轮数与安全性的联系;DES 展示了密钥长度和结构老化的风险。
- AES 依靠迭代的非线性代换与线性混合抵抗差分、线性分析,但查表实现仍可能经缓存侧信道泄露密钥。
0. 量子 vs 后量子(先厘清概念)
| 设定 | 诚实方 | 敌手 |
|---|---|---|
| 经典密码 | 经典 | 经典 |
| 后量子密码(本课) | 经典 | 量子 |
| 量子密码(6.S895) | 量子 | 量子 |
🔎 后量子 = 今天就能在经典计算机上运行、却能抵御未来量子计算机的算法(NIST 新标准即此类)。注意:Shor 这类简单量子算法所需电路,远小于"量子零知识证明"这类复杂计算——后者离实用极其遥远。
1. PRP:分组密码的真身
定义
定义(伪随机置换 · Pseudorandom Permutation, PRP) "分组密码"其实是 PRP(而非 PRF)。与 PRF 的区别:
- 输入输出空间相同:;
- 不同输入映到不同输出(无碰撞,是置换);
- 给定密钥有高效逆算法 。 AES、DES 都是分组密码(PRP)。 :::
PRP/PRF 切换引理(Switching Lemma) 看到 对输入输出时,PRP 与 PRF 的可区分优势仅约 故当输出空间够大(如 256 位)时,PRP 实用上可直接当 PRF 用。
🔎 这正是生日界: 次查询里 PRF 可能撞出碰撞而 PRP 永不碰撞,差异即 。
2. 通用三步设计法
几乎所有对称原语(分组密码、哈希)今天都按此设计:
- 假设可访问一个理想原语(如 位上的公开随机置换);
- 用理想原语构造新原语;
- 用"希望行为足够接近理想"的东西实例化理想原语 ← 唯一的"信仰之跃"。
没有第 3 步时,新原语安全可归约到理想原语;第 3 步引入不可归约的假设。换言之,"AES 的 PRF 安全" 实际就建立在 "AES 是安全 PRF" 这一 ad-hoc 假设上。 评估流程:用已知攻击试破 → 办竞赛互相攻击 → 经年审视后认定够好。许多密码学家愿赌 256 位 AES 永无 攻击,却没人敢拿性命赌因子分解/ECDLP 困难。(格假设介于其间——很多人愿赌左手 LWE 困难。)
NIST 三大分组密码:
| 密钥 | 块大小 | |
|---|---|---|
| DES (1975) | 56 | 64 |
| 3DES | 168 | 64 |
| AES (1998) | 128/192/256 | 128 |
⚠️ 小块大小会被某些攻击利用,128 位是下限。
3. DES 与 Feistel 网络
例
Feistel 置换(把随机函数变成可逆随机置换) ,对函数 : 天然可逆——无论 是否可逆, 都是置换。这是 Feistel 的精髓:用不可逆的随机函数搭出可逆的随机置换。
DES 结构:,56 位密钥、64 位块、16 轮, 为固定比特置换(对安全无明显作用,疑似为拖慢软件实现)。
定理
Luby–Rackoff:当 且把 建模为随机函数时,三轮 Feistel 即与随机置换不可区分(强 PRP 需四轮)。但对实际 DES 意义有限( 并不随机,且块太小,渐近结论不适用)。
轮函数:从 56 位密钥导出 16 个 48 位轮密钥;每轮 = 线性混合 → 拆成 6 位块、各过不同 S-盒(查表的非线性替换)→ 比特置换。唯一非线性来自 S-盒;若 S-盒随机选取密码会变弱,DES 的 S-盒经精心设计具备抗攻击的统计性质(如无输出比特接近输入的线性函数)。
教训:多轮简单操作 + 避开所有已知攻击需极度小心,随机选参数行不通。 DES 56 位密钥从发布之初就太短(Diffie–Hellman 当年即指出,建议 128 位);今日最佳攻击为 Matsui 线性密码分析(1993), 已知明文对即可恢复密钥。
4. AES:迭代 Even-Mansour
整体结构与 DES 不同:AES = "迭代 Even-Mansour 密码"(单轮即 Even-Mansour)。密钥 128/192/256,块固定 128。
理想原语:可逆公开置换 (建模为真随机置换)。构造:从密钥线性导出轮密钥 ,then (最后一轮用略不同的 以利硬件优化。)渐近意义下该理想构造行为如 PRF。
实例化公开置换 (三步,128 位密钥时 轮):
- SubBytes:查表 对 16 字节逐一非线性替换(精心设计的 S-盒)。
- ShiftRows:视为 字节矩阵,第 行循环右移 格。
- MixColumns:乘以 上的固定矩阵。
⚠️ 缓存时序攻击:S-盒查表在软件实现中危险——连续查 比查 更快,这点微小时序差泄露内部状态,足以发动毁灭性攻击。设计要小心,实现更要小心(用常时实现 / AES-NI 硬件指令)。
5. 线性密码分析(攻击的味道)
存在线性关系:若有比特位置集合 使 偏置 可察觉(真随机函数 ,具体 PRF 可非零)。
攻击:收集大量 ,对所有 取多数表决作为 的猜测。由 Chernoff 界,猜对概率 ,故约 对即可获得一比特密钥信息(概率远超 )。DES 中一条线性关系依赖 12 位密钥,配合更多关系可恢复全密钥。
6. PRP、Feistel 与 AES 小结
- 分组密码 = PRP;大输出时切换引理()让它可当 PRF 用。
- 设计三步法:理想原语 → 构造 → 实例化(信仰之跃在第 3 步)。
- Feistel 用随机函数造可逆置换;Luby–Rackoff 3/4 轮。
- AES = 迭代 Even-Mansour(SubBytes/ShiftRows/MixColumns);防缓存侧信道。
- 攻击靠统计偏置 + 海量明密文对(线性/差分密码分析)。
我的理解
分组密码的抽象安全与实现安全是两层问题;理想化 PRP 证明不会自动覆盖缓存、功耗和故障侧信道。