6.3 Forward Secrecy (前向保密)
前向保密 (Forward secrecy) (也称为 "完美前向保密" 或 "PFS", 在 [RFC4949] 中定义) 是一种防御措施, 用于对抗记录加密对话的攻击者, 其中会话密钥仅用通信各方的长期密钥加密。如果攻击者能够在稍后的某个时间点获得这些长期密钥, 则可以解密会话密钥, 从而解密整个对话。在 TLS 和 DTLS 的上下文中, 这种长期密钥的泄露并非完全不可信。例如, 它可能由于以下原因而发生:
-
客户端或服务器受到其他攻击向量的攻击, 并且私钥被检索。
-
从已售出或以其他方式退役而没有事先擦除的设备中检索到长期密钥。
-
在设备上使用长期密钥作为默认密钥 [Heninger2012]。
-
由可信第三方 (如 CA) 生成的密钥, 后来通过勒索或泄露从中检索到 [Soghoian2011]。
-
加密突破, 或使用长度不足的非对称密钥 [Kleinjung2010]。
-
针对系统管理员的社会工程攻击。
-
从保护不当的备份中收集私钥。
在这种情况下, 前向保密确保攻击者确定会话密钥是不可行的, 即使攻击者在对话之后的某个时间获得了长期密钥。它还可以防止拥有长期密钥但在对话期间保持被动的攻击者。
前向保密通常通过使用 Diffie-Hellman 方案来导出会话密钥来实现。Diffie-Hellman 方案让双方保持私有秘密, 并在网络上发送参数作为某些循环群的模幂。所谓的离散对数问题 (Discrete Logarithm Problem, DLP) 的性质允许各方导出会话密钥, 而窃听者无法做到这一点。如果选择足够大的参数, 目前没有已知的针对 DLP 的攻击。Diffie-Hellman 方案的一个变体使用椭圆曲线代替最初提出的模运算。
不幸的是, 许多 TLS/DTLS 密码套件被定义为不具有前向保密, 例如 TLS_RSA_WITH_AES_256_CBC_SHA256。因此, 本文档提倡严格使用仅前向保密的密码。