TLS 密码套件是什么?AEAD 算法为什么在现代 TLS 中常见?
简化版
TLS 密码套件是一组加密通信所需算法的组合,通常涉及密钥交换、身份认证、对称加密和消息认证。
在 TLS 1.2 中,密码套件名称可能像 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256;现代 TLS 更偏向 ECDHE、AES-GCM、ChaCha20-Poly1305 这类组合。
AEAD 算法能同时提供加密和完整性校验,避免早期“加密算法 + MAC”组合中的一些设计和实现风险。
详细版
密码套件可以拆成几个部分:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
ECDHE:密钥交换,提供前向安全。RSA:证书签名认证算法。AES_128_GCM:对称加密和认证加密模式。SHA256:相关哈希算法。
TLS 1.3 简化了密码套件,密钥交换和认证算法从密码套件名称中拆出去。
AEAD 的代表是 AES-GCM 和 ChaCha20-Poly1305,它们把机密性和完整性绑定在一起,更适合现代安全实践。
完整版教学
1. 先解释密码套件的作用
TLS 握手的目的之一,是让客户端和服务端协商后续通信使用哪些算法。
这些算法不是单一算法,而是一组组合。
这组组合就叫密码套件。
密码套件决定了密钥怎么协商、身份怎么认证、数据怎么加密、完整性怎么保护。
2. TLS 1.2 密码套件如何拆解
看这个例子:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
可以拆成:
| 部分 | 含义 | 作用 |
|---|---|---|
| ECDHE | 椭圆曲线临时密钥交换 | 协商会话密钥并提供前向安全 |
| RSA | 证书签名认证 | 验证服务端身份 |
| AES_128_GCM | 对称加密算法和模式 | 加密应用数据并认证 |
| SHA256 | 哈希算法 | 用于相关派生或认证过程 |
面试中不一定要背所有名称,但要能拆出每一段的职责。
3. AEAD 是什么
AEAD 全称 Authenticated Encryption with Associated Data。
它同时提供:
- 机密性:别人看不到明文。
- 完整性:数据被改会被发现。
- 认证性:确认密文和附加数据没有被篡改。
常见 AEAD 算法包括:
AES-GCM
ChaCha20-Poly1305
TLS 记录层会把部分上下文作为附加认证数据参与校验。
4. 为什么 AEAD 更受欢迎
早期 TLS 可能使用 CBC 加密再配合 HMAC。
这种组合如果实现不谨慎,容易出现填充 oracle、MAC-then-encrypt 等历史问题。
AEAD 把加密和认证作为一个整体设计,减少组合错误。
它的工程优势包括:
- 安全边界更清晰。
- 性能更好,尤其 AES-GCM 有硬件加速。
- 协议设计更简单。
- 更符合现代 TLS 1.3 的方向。
5. AES-GCM 和 ChaCha20-Poly1305 怎么选
两者都是常见现代选择。
| 算法 | 优势 | 常见场景 |
|---|---|---|
| AES-GCM | 有 AES-NI 时性能很好 | 服务器、桌面 CPU |
| ChaCha20-Poly1305 | 软件实现性能稳定 | 移动端、无 AES 加速设备 |
许多客户端会按硬件能力和服务端支持情况协商。
安全配置通常会禁用 RC4、3DES、弱 CBC 套件等旧算法。
6. TLS 1.3 的变化
TLS 1.3 简化了密码套件。
例如:
TLS_AES_128_GCM_SHA256
TLS_CHACHA20_POLY1305_SHA256
密钥交换组和签名算法通过其他扩展协商。
这让密码套件更聚焦在 AEAD 算法和哈希算法上。
TLS 1.3 也移除了大量历史不安全算法,降低配置错误概率。
7. 常见误区与追问
- 误区:密码套件只是一个加密算法。 它是一组算法组合,职责包括密钥交换、认证、加密和完整性。
- 误区:RSA 出现在套件里就表示用 RSA 加密全部数据。 业务数据通常用对称加密,RSA 更多用于认证或旧式密钥交换。
- 误区:AES-GCM 只负责加密。 它是 AEAD 模式,同时做加密和完整性认证。
- 追问:为什么 ECDHE 重要? 它提供前向安全,长期私钥泄露后也难以解密历史流量。
- 追问:TLS 1.3 为什么简化密码套件? 为了移除旧算法和减少组合复杂度。
- 追问:为什么移动端常偏好 ChaCha20? 没有 AES 硬件加速时,它的软件性能通常更稳定。
8. 加强记忆
密码套件记成“TLS 的算法菜单”。
AEAD 记成“加密和防篡改打包做”,现代 TLS 喜欢这种一体化方案。