首页/安全/加密与证书速查/AEAD 认证加密概念
加密算法基础95 条

AEAD 认证加密概念

一次操作同时输出密文与认证标签,任何篡改都会导致解密失败;GCM、CCM、ChaCha20-Poly1305、SM4-GCM 都是 AEAD,关联数据(AAD)参与认证但不加密。

加密与证书速查安全更新于 2026-10-13

AEAD 是什么

AEAD(Authenticated Encryption with Associated Data,带关联数据的认证加密)指一次操作同时输出密文与认证标签:任何对密文或关联数据的篡改都会让校验失败。关联数据(AAD)参与认证但不加密,适合放协议头、序号、租户标识等需要防篡改但不必保密的内容。GCM、CCM、ChaCha20-Poly1305 与 SM4-GCM 都属于 AEAD。

基本信息

核心属性机密性与完整性一次完成,篡改可被检出
AAD参与认证、明文传输、不加密
常见算法AES-GCM、AES-CCM、ChaCha20-Poly1305、SM4-GCM
nonce 要求同一密钥下唯一,通常 96 位
标签通常 128 位,可截断但不建议
失败处理校验失败必须整体丢弃消息,不回显部分结果

典型使用场景

  • 网络协议:TLS 1.3 只保留 AEAD 套件,IPsec ESP 也大量使用 GCM
  • 存储加密:对象与文件加密时需要明确校验完整性
  • 数据库字段加密:把主键与租户放进 AAD 防止密文搬移
  • 消息通信:即时通信与 MQTT 等协议的消息加密与防篡改
  • 自研接口:一次调用即完成加密与校验,减少实现出错概率

TLS 1.3 的三个标准套件

TLS 1.3 的三个标准套件
TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
# 三者都是 AEAD:GCM 与 ChaCha20-Poly1305 自带认证,无需额外 MAC

AAD 的正确用法(示意)

AAD 的正确用法(示意)
# AAD 放上下文信息:协议版本、租户标识、消息序号
ct, tag = aead_encrypt(key, nonce, plaintext, aad=header_bytes)
# 解密时必须原样传入同一份 AAD,否则校验失败
plaintext = aead_decrypt(key, nonce, ct, tag, aad=header_bytes)
# 错误示例:把 AAD 当作「额外加密的数据」,或解密时不传 AAD

常见 AEAD 对照

算法标准nonce标签典型用途
AES-GCMNIST SP 800-38D96 位128 位TLS、IPsec、存储加密
AES-CCMNIST SP 800-38C7-13 字节8 或 16 字节物联网、无线与受限环境
ChaCha20-Poly1305RFC 843996 位128 位TLS 1.3、WireGuard、移动端
SM4-GCMGB/T 38636 相关96 位128 位TLCP 与国密网关
把 AAD 理解成「追加加密数据」是常见误解:AAD 以明文传输,只提供完整性。它的价值在于把上下文绑定到密文上,例如把租户标识放进 AAD,就能让攻击者无法把某租户的密文搬到另一个租户名下解密。
AEAD 解密失败时应整体丢弃消息,不要回显部分解密结果,也不要对「标签错误」与「格式错误」给出不同错误码或明显不同的耗时。细节只应记录在内部日志中,对外统一返回同一种失败。

易错点

  • 把 AAD 当作加密数据:AAD 明文传输,误以为它保密会导致敏感信息泄漏
  • 解密时未传或错传 AAD:校验必然失败,且在跨系统对接时容易被误判为密钥问题
  • 标签被截断或丢弃:完整性保护失效,密文可被静默篡改
  • nonce 管理不当:同一密钥下重复 nonce 会同时破坏机密性与完整性,是 AEAD 最严重的使用错误
  • 不同库的字段拼接顺序不一致:nonce、密文、标签与 AAD 的组装方式需按同一约定,否则跨语言对接必然失败

数据来源与参考

  • NIST SP 800-38D
  • RFC 8446 §9(TLS 1.3 套件)
  • GB/T 38636-2020
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌