CBC 与 GCM 都是 AES 的工作模式。CBC 是串行链接模式:每块明文先与前一块密文异或再加密,需要随机 IV,但只提供机密性,不提供完整性——密文被篡改后解密不报错,由此催生了填充预言攻击(Padding Oracle,如 POODLE)和密文翻转攻击,必须额外配 HMAC(Encrypt-then-MAC),实现复杂且历史事故频发(Lucky13)。

GCM 是 AEAD(认证加密)模式:基于 CTR 计数器加密 + GHASH 生成认证标签,一次运算同时保证机密性与完整性,密文任何改动都导致标签校验失败;且可并行、支持 AES-NI 硬件加速。TLS 1.3 只保留 AES-GCM 和 ChaCha20-Poly1305 两个 AEAD 套件。

GCM 最大易错点是 nonce 复用:同一密钥下重复 nonce 会泄露明文异或关系并摧毁认证安全性(可伪造标签)。工程上用 96 位随机 nonce 或 XChaCha20-Poly1305(192 位 nonce,可安全随机),并控制单密钥加密数据量。追问方向:GCM-SIV 的抗误用设计、AEAD 的 AAD 附加认证数据用途。