术语表

AEAD (带关联数据的认证加密)

最后核实

定义

AEAD 是带关联数据的认证加密算法,一次运算同时完成数据加密和完整性认证,并能保护不加密的附加数据不被篡改。

AEAD 是 RFC 5116 规定的一种加密接口:输入密钥、随机数(nonce)、明文和可选的关联数据,输出密文和一个认证标签。解密时只要密文或关联数据有一个比特被改动,就会直接失败,而不是输出错误的明文。常见的 AEAD 算法有 AES-GCM、ChaCha20-Poly1305 和 AES-CCM。

为什么重要

在 AEAD 之前,TLS 采用"先算 MAC 再 CBC 加密"的方式保护记录,这种结构引出了一连串填充预言和 IV 类攻击,包括 BEAST、Lucky Thirteen 和 POODLE。AEAD 去掉了单独的填充和 MAC 步骤,从根上消除了这类问题。TLS 1.2 把 AEAD 套件作为可选项引入,TLS 1.3 则只允许 AEAD,并把明文传输的记录头作为关联数据一起认证。安全扫描报告里常见的"CBC 模式套件"提示,处理方向就是只保留 AEAD 套件。

例子

两个名称相近、性质不同的真实 TLS 1.2 套件:

ECDHE-RSA-AES128-GCM-SHA256   AEAD(AES-GCM),SHA-256 只用于密钥派生
ECDHE-RSA-AES128-SHA256       AES-CBC 加 HMAC-SHA256,不是 AEAD

用 openssl ciphers -v 查看时,AEAD 套件会标注 Mac=AEAD。

常见误区

  • GCM 套件名里的 SHA256 是 MAC 算法。 在 AEAD 套件中,哈希只用于 PRF 或 HKDF 密钥派生,完整性由 AEAD 标签负责。
  • 用了 AEAD 就不用管 nonce。 同一密钥下重复使用 nonce,会同时破坏 AES-GCM、ChaCha20-Poly1305 的保密性和认证性;TLS 用记录序号派生每条记录的 nonce 来避免重复。
  • 加密了就等于防篡改。 CBC、CTR 等不带认证的模式可以被悄悄修改,认证标签才是 AEAD 额外提供的保障。

延伸阅读