首页/网络/协议速查/AEAD:加密与认证一体化

AEAD:加密与认证一体化

AEAD(带关联数据的认证加密)一次操作完成「机密性 + 完整性」:GCM、CCM、ChaCha20-Poly1305 都是;TLS 1.3 强制只用 AEAD。

协议速查网络更新于 2026-10-13

AEAD 是干什么的

AEAD(带关联数据的认证加密)把机密性与完整性合成一次操作:输入密钥、nonce、明文和关联数据(AAD),输出密文与认证标签;解密时标签校验失败就整体丢弃,绝不做部分处理。AES-GCM、AES-CCM、ChaCha20-Poly1305 都属于 AEAD。TLS 1.3 强制只使用 AEAD 套件,淘汰了「先加密再单独做 MAC」的旧组合方式。

基本信息

全称Authenticated Encryption with Associated Data
输入密钥 + nonce + 明文 + AAD
输出密文 + 认证标签(常见 16 字节)
常见算法AES-128-GCM、AES-256-GCM、ChaCha20-Poly1305、AES-CCM
典型载体TLS 1.3 记录层、QUIC、IPsec ESP、磁盘加密、API 报文保护
解密失败必须整体丢弃并报错,不得使用已解出的部分明文

典型使用场景

  • TLS/QUIC 记录层:每条记录独立加密并附标签,篡改立即可见
  • IPsec ESP:同时提供加密与完整性保护
  • 落盘数据保护:数据库字段或文件加密,防止内容被悄悄改写
  • API 报文保护:把请求头放进 AAD,正文加密,头部一改即校验失败
  • 安全评审:判断协议是否真的用了 AEAD,而不是自制的加密加校验和

接口与检查

接口与检查
(ct, tag) = AEAD_encrypt(key, nonce, plaintext, aad)
plaintext  = AEAD_decrypt(key, nonce, ct, tag, aad)
# 解密时 tag 校验失败必须整体丢弃,不能返回部分明文
# nonce 在同一密钥下必须唯一,重复使用会彻底破坏安全性
# AAD 不加密但参与认证,适合放包序号、协议版本、请求路径等元数据

本机套件与性能

本机套件与性能
# 查看 OpenSSL 支持的 AEAD 套件
openssl ciphers -v 'AEAD' | head
# 测本机 AES-GCM 与 ChaCha20-Poly1305 的吞吐
openssl speed -evp aes-128-gcm
openssl speed -evp chacha20-poly1305

常见 AEAD 算法对比

算法特点适用场景
AES-128-GCM有 AES-NI 硬件加速时吞吐最高通用服务器与支持 AES-NI 的 CPU
AES-256-GCM密钥更长,合规口径更宽要求 256 位强度的场景
ChaCha20-Poly1305纯软件实现快,抗缓存时序攻击手机与无 AES 加速的设备
AES-CCM适合受限硬件,需两遍处理物联网、无线链路加密
服务端同时提供 AES-GCM 与 ChaCha20-Poly1305,让客户端按自身硬件能力选择,是兼容移动端与老设备的常规做法。
解密失败时不要为了「容错」跳过标签校验或返回已解出的部分数据,这正是 Padding Oracle 一类攻击的入口。

易错点

  • nonce 在同一密钥下重复:AES-GCM 会同时丧失机密性与完整性,NIST 对这类复用有明确的失败案例
  • 把 AAD 当可选项丢弃:元数据未经认证,攻击者可篡改头部而不被发现
  • 标签校验失败仍返回部分明文:既泄露信息,又可能被用来构造解密预言机
  • 自研「加密后再算 MD5」的方案:裸哈希不能提供认证,应改用 AEAD,或至少 Encrypt-then-MAC 且各自独立密钥

数据来源与参考

  • RFC 5116(AEAD 接口)
  • RFC 8446 §5.2

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌