# AEAD（带关联数据的认证加密）是什么？定义、例子与常见误区

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

Source: https://ssl.sh/zh/glossary/aead/
Last updated: 2026-11-10

AEAD 是 RFC 5116 规定的一种加密接口：输入密钥、随机数（nonce）、明文和可选的关联数据，输出密文和一个认证标签。解密时只要密文或关联数据有一个比特被改动，就会直接失败，而不是输出错误的明文。常见的 AEAD 算法有 [AES-GCM](https://ssl.sh/zh/glossary/aes-gcm/)、[ChaCha20-Poly1305](https://ssl.sh/zh/glossary/chacha20-poly1305/) 和 AES-CCM。

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

## 例子
两个名称相近、性质不同的真实 TLS 1.2 套件：

```text
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 额外提供的保障。

## 相关术语

- [AES-GCM](https://ssl.sh/zh/glossary/aes-gcm/): AES-GCM 是以伽罗瓦/计数器模式运行的 AES 分组密码，属于 AEAD 算法，用计数器模式加密、用 GHASH 认证标签保证完整性。
- [ChaCha20-Poly1305](https://ssl.sh/zh/glossary/chacha20-poly1305/): ChaCha20-Poly1305 是把 ChaCha20 流密码与 Poly1305 认证算法组合而成的 AEAD 算法，专为纯软件实现时的高速和恒定时间而设计。
- [密码套件](https://ssl.sh/zh/glossary/cipher-suite/): 密码套件是 TLS 客户端和服务器协商使用的一组命名的加密算法组合，例如 TLS_AES_128_GCM_SHA256，决定连接用什么算法保护数据。
- [TLS 1.3](https://ssl.sh/zh/glossary/tls-1-3/): TLS 1.3 是当前最新的传输层安全协议版本（2018 年的 RFC 8446，现行规范为 RFC 9846），完整握手只需一个往返，且只保留 AEAD 加密算法。
- [TLS 1.2](https://ssl.sh/zh/glossary/tls-1-2/): TLS 1.2 是 2008 年由 RFC 5246 定义的 TLS 版本，引入了基于 SHA-256 的密钥派生和 AES-GCM 等 AEAD 加密算法，至今仍被广泛使用。
- [BEAST](https://ssl.sh/zh/glossary/beast/): BEAST 是 2011 年公布的攻击（CVE-2011-3389），利用 SSL 3.0 和 TLS 1.0 中 CBC 模式可预测的 IV，逐字节解密 Cookie 等秘密。
- [POODLE](https://ssl.sh/zh/glossary/poodle/): POODLE 是 2014 年公布的攻击（CVE-2014-3566），利用 SSL 3.0 不校验 CBC 填充的缺陷，从加密连接中逐字节还原 Cookie 等秘密。
