对称加密(AES, DES)
对称加密用同一密钥加密和解密——DES 曾是标准但已被破解,AES 是当前标准。Feistel 结构和 SPN 是两种主要的分组密码设计
🔐 一个密钥,两把锁——对称加密
你要给同学发一封私信。最简单的方法:你把信锁进一个箱子,寄过去——同学有同样一把钥匙,打开看。
这就是对称加密(Symmetric Encryption)——加密和解密用同一个密钥。
📐 对称加密的特点:
- 加密:
密文 = encrypt(明文, 密钥)- 解密:
明文 = decrypt(密文, 密钥)- 同一个密钥同时用于加密和解密
和古典密码比,现代对称加密解决了密钥空间的问题——古典密码(凯撒)只有 25 个可能的密钥,而 AES 有 2¹²⁸(≈ 3.4×10³⁸)个——即使全世界的计算机一起算,也需要几十亿年才能试完。
📜 DES——曾经的标准,今天的”玩具”
DES(Data Encryption Standard) 在 1977 年被定为美国联邦标准,统治了密码学界近 30 年。
DES 的问题:密钥太短
DES 使用 56 位密钥——听起来很大,但用现代计算机可以暴力破解。1998 年,EFF(电子前哨基金会)花 25 万美元造了一台”Deep Crack”机器,56 小时内破解了一个 DES 密钥。
1998 年:56 小时 — 25 万美元
2024 年:几秒钟 — 普通云服务器
100 次迭代改进(Triple DES)把密钥扩展到 112 位或 168 位,但速度慢——最终被 AES 完全取代。
🏆 AES——当今的标准
AES(Advanced Encryption Standard) 在 2001 年被 NIST 定为新的标准。
基本参数
| 版本 | 密钥长度 | 轮数 | 安全等级 |
|---|---|---|---|
| AES-128 | 128 位 | 10 轮 | 当前安全 |
| AES-192 | 192 位 | 12 轮 | 当前安全 |
| AES-256 | 256 位 | 14 轮 | 当前安全(最高) |
AES 的构造——SPN 结构
AES 不是简单的替换或置换,而是把数据分成 16 字节(128 位)的块,对每个块做 4 种操作,重复多轮:
128 位数据(16 字节)组织成 4×4 的矩阵:
┌──────────┐
│ a0 a4 a8 a12 │
│ a1 a5 a9 a13 │
│ a2 a6 a10 a14│
│ a3 a7 a11 a15│
└──────────┘
每轮的四步操作
第 1 步:SubBytes(字节替换)
每个字节通过 S 盒(替换表)换成另一个字节
→ 这是"替换"操作——非线性的,阻止数学分析
→ 0x53 → 0xED(S 盒映射)
第 2 步:ShiftRows(行移位)
第 1 行不动、第 2 行左移 1 位、第 3 行左移 2 位、第 4 行左移 3 位
→ 这是"置换"操作——混淆字节列之间的关系
第 3 步:MixColumns(列混淆)
每列的 4 个字节进行矩阵乘法
→ 扩散——改变一个字节会影响整个列
第 4 步:AddRoundKey(加轮密钥)
把数据和本轮密钥做 XOR(异或)
→ 把"密钥"注入数据
整体结构:
明文 → AddRoundKey → [SubBytes → ShiftRows → MixColumns → AddRoundKey] × N 轮 → 密文
↑ 每轮重复 N 次(10/12/14 轮) ↓
最后一轮没有 MixColumns
🏪 **类比:做包子”
AES 的 10 轮操作就像做包子:
- SubBytes = 揉面(改变形状)
- ShiftRows = 擀皮(重新排列)
- MixColumns = 拌馅(混合成分)
- AddRoundKey = 加调料(放入独特配方)
一遍不够——揉面→擀皮→拌馅→加调料——重复 10 遍,做成一个谁也看不出原来是啥样子的包子。
解密
AES 的解密不是”反向操作”那么简单——但细节上是对称的。重要的是:加密和解密使用同一把密钥,只是操作的顺序和方向不同。
🔄 两种工作模式
AES 是”分组密码”——它一次加密 128 位。但实际数据可能很长,怎么加密?
ECB 模式(电子密码本)——不安全
把数据分成 128 位的块,每块独立加密:
明文块 1 → AES → 密文块 1
明文块 2 → AES → 密文块 2
...
问题:相同的明文块产生相同的密文块——暴露了数据的模式。比如加密一张企鹅图片,ECB 模式后的密文仍然能看出企鹅的轮廓。
CBC 模式(密码块链接)——安全
每个明文块先和前一个密文块做 XOR,再加密:
密文块 0(IV,初始向量)→ 明文块 1 → XOR → AES → 密文块 1
↑
密文块 1 → 明文块 2 → XOR → AES → 密文块 2
效果:相同的明文块变成不同的密文块——因为每个块的加密都依赖前一个块的密文。
📊 对称加密 vs 非对称加密
| 对比 | 对称(AES) | 非对称(RSA) |
|---|---|---|
| 速度 | ⚡ 极快(硬件加速) | 🐢 慢 1000-10000 倍 |
| 密钥管理 | ❌ 双方必须共享同一个密钥 | ✅ 公钥公开,私钥保密 |
| 用途 | 加密大量数据 | 密钥交换、数字签名 |
| 典型算法 | AES, ChaCha20 | RSA, ECC |
实际做法:混合加密——用 RSA 交换对称密钥,用 AES 加密实际数据。SSL/TLS 就是这样做的。
📝 小结
| 概念 | 一句话 |
|---|---|
| 对称加密 | 同一个密钥加密和解密——速度快 |
| DES | 56 位密钥——已被暴力破解攻破 |
| AES | 128/192/256 位密钥——当前标准 |
| SPN 结构 | SubBytes → ShiftRows → MixColumns → AddRoundKey |
| ECB 模式 | 每块独立加密——不安全(相同明文→相同密文) |
| CBC 模式 | 每块依赖前一块的密文——安全 |
🎯 思考题:AES-256 有 2²⁵⁶ 个可能的密钥——这个数字有多大?假设全世界的计算机每秒能尝试 10¹⁸ 个密钥,需要多少年来穷举完?这和”绝对安全”之间有什么关系?
为什么先学这个? 对称加密解决了”加密速度快”的问题,但它有一个根本问题——怎么把密钥安全地传给对方?公钥密码(RSA, ECC)解决了这个密钥分发问题。