高级 #crypto#symmetric#aes

对称加密(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-128128 位10 轮当前安全
AES-192192 位12 轮当前安全
AES-256256 位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 轮操作就像做包子:

  1. SubBytes = 揉面(改变形状)
  2. ShiftRows = 擀皮(重新排列)
  3. MixColumns = 拌馅(混合成分)
  4. 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, ChaCha20RSA, ECC

实际做法:混合加密——用 RSA 交换对称密钥,用 AES 加密实际数据。SSL/TLS 就是这样做的。


📝 小结

概念一句话
对称加密同一个密钥加密和解密——速度快
DES56 位密钥——已被暴力破解攻破
AES128/192/256 位密钥——当前标准
SPN 结构SubBytes → ShiftRows → MixColumns → AddRoundKey
ECB 模式每块独立加密——不安全(相同明文→相同密文)
CBC 模式每块依赖前一块的密文——安全

🎯 思考题:AES-256 有 2²⁵⁶ 个可能的密钥——这个数字有多大?假设全世界的计算机每秒能尝试 10¹⁸ 个密钥,需要多少年来穷举完?这和”绝对安全”之间有什么关系?

为什么先学这个? 对称加密解决了”加密速度快”的问题,但它有一个根本问题——怎么把密钥安全地传给对方?公钥密码(RSA, ECC)解决了这个密钥分发问题。