认识
以前,要实现保密和认证,通常采用组合模式:
- Encrypt-then-MAC (EtM):先加密数据,然后为密文计算一个消息认证码(MAC)。这是最安全、最常见的传统组合。
- Encrypt-and-MAC (E&M):同时生成密文和明文的 MAC。
- MAC-then-Encrypt (MtE):先计算明文的 MAC,然后将“明文 +MAC”一起加密。
针对该类传统方式,其存在的问题:
- 复杂性:需要选择和组合两个独立的密码学原语(一个加密算法,如 AES;一个认证算法,如 HMAC-SHA256)。
- 性能开销:分别调用加密和认证两个功能,计算开销相对较大。
- 安全风险:某些组合方式(如 E&M 和 MtE)本身可能存在安全漏洞,或者在实际实现中容易出错。
AEAD 将加密和认证功能紧密地整合到一个单一的、高效的算法中,其解决了这些问题。AEAD 是种同时提供保密性(加密)、完整性、数据源认证的加密操作模式,并且允许对一部分不需要加密但必须认证的“关联数据”进行保护。总而言之,AEAD 代表对称加密发展的未来方向,它通过整合功能、提升性能和简化使用,为现代应用程序提供了更强大、更高效的安全保障。
组成
核心组成部分
一个 AEAD 算法在一次操作中处理 3 种输入,并产生 2 种输出:
#### 输入:
- 密钥 (Key):加密和解密所使用的秘密密钥。
- 明文 (Plaintext):需要被加密和认证的原始数据。
- 关联数据 (Associated Data, AD):这是 AEAD 概念中的关键。
- 是什么:需要被认证但不需要被加密的数据。
- 为什么需要:在很多通信协议中,数据包头部(如 IP 头、TCP 头)必须保持明文以便路由器进行转发,但这些头部的完整性至关重要。如果攻击者篡改了 IP 地址,数据就会被发往错误的目的地。
- 如何工作:AEAD 算法会计算一个认证标签(Tag),这个标签的生成同时依赖于明文、密文和关联数据。任何对关联数据的篡改都会导致整个验证失败。
#### 输出:
- 密文 (Ciphertext):加密后的明文。
- 认证标签 (Authentication Tag):一个用于验证密文和关联数据完整性的短字节序列(类似于 MAC)。
工作流程:加密与解密
#### 加密过程 (Seal)
给定 `(密钥 K, 随机数 Nonce, 明文 P,关联数据 A)`,AEAD 加密算法输出:
- 密文 C = 加密(P)
- 认证标签 T = MAC(C, A) // 注意:标签是基于密文 C 和关联数据 A 计算的
最终发送的消息是 `(Nonce, C, T, A)`。其中 `A` 以明文形式传输。
#### 解密过程 (Open)
接收方收到 `(Nonce, C, T, A)`。
给定 `(密钥 K, Nonce, 密文 C, 认证标签 T,关联数据 A)`,AEAD 解密算法:
- 首先,使用 `K`, `Nonce`, `C`, `A` 重新计算认证标签。
- 将新计算的标签与收到的标签 `T` 进行恒定时间比较。
- 如果标签匹配:说明密文 `C` 和关联数据 `A` 在传输过程中都未被篡改。算法随后解密 `C` 得到原始明文 `P` 并输出。
- 如果标签不匹配:说明数据或头部已被破坏,算法会立即抛出错误而不输出任何明文。这是一个关键的安全特性,防止了选择密文攻击。
性质
- 高性能:将加密和认证整合,减少了计算开销和通信延迟。许多 AEAD 算法(如 AES-GCM)还有专门的硬件指令优化。
- 高安全性:设计上避免了传统组合模式可能存在的陷阱,提供了强大的安全性证明。
- 简化设计与实现:开发者无需再纠结于“该用 Encrypt-then-MAC 还是 MAC-then-Encrypt”的问题,只需选择一个标准的 AEAD 算法即可。
- 关联数据 (AD) 支持:完美解决了网络协议中数据包头部的完整性认证问题,而无需对其加密。
构建
常见的 AEAD 算法:
AES-GCM:基于 AES 的伽罗瓦 / 计数器模式。这是目前最流行、最广泛支持的 AEAD 算法,在 CPU 中有硬件加速。
AES-CCM:基于 AES 的 CCM 模式(Counter with CBC-MAC)。
ChaCha20-Poly1305:由 ChaCha20 流密码和 Poly1305 消息认证码组成。由 Google 推广,作为 AES-GCM 的替代方案,尤其在缺乏 AES 硬件加速的移动设备上性能优异。
应用
AEAD 已成为现代安全和通信协议的事实标准。
- TLS 1.2/1.3:TLS 1.3 强制使用 AEAD 密码套件(如`TLS_AES_128_GCM_SHA256`)。
- IPsec (ESP):正如在 strongSwan 中看到的,`aes256gcm`等模式被广泛使用。
- WireGuard VPN:全程使用 ChaCha20-Poly1305 作为其 AEAD 算法。
- 磁盘加密:保护数据机密性的同时,确保元数据(如扇区号)不被篡改。
参考
DeepSeek / 介绍 AEAD Authenticated Encryption with Associated Data