密码学应用基础 · kp-006

对称加密:AES 与工作模式

核心 约 20 分钟 状态:reviewed #密码学#对称加密#AES#GCM

一句话定义

对称加密用同一把密钥完成加密与解密,代表算法 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 等慢哈希派生。

公式、模型或图示

text
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 + 随机盐):

bash
# 加密:-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 原理与配置加固):对称加密在真实协议中的完整用法。

自测题

  1. 为什么 ECB 不能用于真实数据?要点:相同明文块→相同密文块,图案即信息泄露(加密企鹅演示)。
  2. GCM 模式下 nonce 重用的后果是什么?要点:密钥流重用泄露明文异或关系,且认证标签可被伪造,应视为灾难性失效。
  3. 为什么口令需要 KDF 而不能直接当 AES 密钥?要点:口令熵低、易被离线爆破;KDF 通过加盐与慢函数抬高爆破成本。

延伸阅读

《Serious Cryptography》(Jean-Philippe Aumasson)第 4-5 章:分组密码与工作模式的工程视角讲解。