密码学应用基础 · kp-006
对称加密:AES 与工作模式
一句话定义
对称加密用同一把密钥完成加密与解密,代表算法 AES 以 128 位分组为单位运算,密钥长度 128/192/256 位;"怎么分组地用算法"由工作模式(ECB/CBC/GCM 等)决定,而模式选择决定了安全性。
为什么重要
对称加密承担着世界上绝大部分数据加密量(磁盘、数据库、TLS 会话流量),且是误用重灾区:算法本身(AES)几乎未被攻破,出事的几乎全是用法——用错模式、用错 IV、用错密钥派生。理解"算法 ≠ 用法"这一区分,是用好 kp-010 防误用清单的前提。
前置知识
kp-001(CIA 三元组):对称加密主要服务保密性,配合认证模式可同时保完整性。
核心概念
- 分组密码(Block Cipher):AES 把 128 位明文块映射为 128 位密文块,密钥空间为 2^128,暴力穷举在计算上不可行。
- 工作模式:
- ECB(电子密码本):各块独立加密,相同明文块得到相同密文块,会泄露数据图案——绝不该用于真实数据。
- CBC(密码分组链接):每块与前一密文块异或,首块需要随机 IV;只提供保密性,需另配 MAC。
- GCM:计数器模式加密 + 内建认证标签(GHASH),属于 AEAD(带关联数据的认证加密),是当前默认推荐。
- 填充(Padding):CBC 需要把明文补齐到块边界(如 PKCS#7);计数器类模式将分组密码变成流密码,无填充。
- 密钥派生(KDF):用户口令不能直接当 AES 密钥,需经 PBKDF2/Argon2 等慢哈希派生。
公式、模型或图示
ECB: C1=E(P1) C2=E(P2) C3=E(P3) ← 独立、可泄露图案
CBC: C1=E(P1⊕IV) C2=E(P2⊕C1) ... ← 链式、需随机 IV
GCM: C=P⊕E(nonce),nonce+1,... + Tag ← 加密+认证一体
密钥空间:AES-128 → 2^128 ≈ 3.4×10^38原理与机制
安全性来自两个独立维度:算法强度与模式强度。AES 算法在公开密码分析下仅有理论性弱化,实际攻击几乎都发生在模式与协议层。ECB 的失败模式最直观:加密一张图片,轮廓仍可辨认(著名的"加密企鹅"演示),因为图案即信息。CBC 的要求是 IV 必须不可预测(随机),若 IV 可预测,攻击者可对首块做字典比对。GCM 的铁律是 nonce 绝不可重复:同一密钥下 nonce 重用会同时泄露异或关系并伪造认证标签,灾难性失效——这也是 kp-010 单列"nonce 管理"的原因。AEAD 的本质是把保密性与完整性合并为一次原子操作,消除"先加密后加 MAC 的顺序错误"这一整类人为失误。
实例或案例
用 OpenSSL 加密文件的正确姿势(口令派生 + CBC + 随机盐):
# 加密:-pbkdf2 让口令经慢哈希派生为密钥
openssl enc -aes-256-cbc -pbkdf2 -salt -in plain.txt -out secret.enc
# 解密
openssl enc -d -aes-256-cbc -pbkdf2 -in secret.enc -out plain.txt数据库字段加密与磁盘加密(LUKS/BitLocker)同样是对称加密的应用场景;TLS 记录层最终也用对称算法(AES-GCM / ChaCha20-Poly1305)保护流量(见 kp-018)。
直观类比
算法(AES)是保险柜的锁芯,模式是用法手册:ECB 像给每页文件分别锁进相同型号的小保险柜(排列规律看得见);CBC 是每页和上一页的封条捆在一起;GCM 则是锁完再贴一张一撕即知的防伪贴纸——别人动过你一定看得出来。
常见误区
- "AES 就安全了":ECB 模式下 AES 依然泄露图案;安全性由"算法 + 模式 + IV/nonce 管理"共同决定。
- 用口令直接当密钥:需要 KDF 派生,且派生要慢(对抗离线爆破)。
- 自己发明模式或"双重加密更安全":自创模式几乎必然引入可利用结构,加倍加密不等于加倍强度。
与其他知识点的关系
- kp-007(非对称加密与密钥交换):解释对称密钥如何安全地送到对方手里。
- kp-008(哈希与 HMAC):CBC 模式需另配 HMAC;GCM 内建认证取代了这一步。
- kp-018(TLS 原理与配置加固):对称加密在真实协议中的完整用法。
自测题
- 为什么 ECB 不能用于真实数据?要点:相同明文块→相同密文块,图案即信息泄露(加密企鹅演示)。
- GCM 模式下 nonce 重用的后果是什么?要点:密钥流重用泄露明文异或关系,且认证标签可被伪造,应视为灾难性失效。
- 为什么口令需要 KDF 而不能直接当 AES 密钥?要点:口令熵低、易被离线爆破;KDF 通过加盐与慢函数抬高爆破成本。
延伸阅读
《Serious Cryptography》(Jean-Philippe Aumasson)第 4-5 章:分组密码与工作模式的工程视角讲解。