术语表

前向保密 (Forward Secrecy,完美前向保密(PFS))

最后核实

定义

前向保密是密钥交换的一种安全属性:即使服务器的长期私钥日后泄露,过去连接的会话密钥也不会因此暴露。

前向保密常被称为完美前向保密(PFS),意思是每条连接的密钥都来自用完即删的临时值,事后无法重新算出。TLS 通过临时 Diffie-Hellman 密钥交换(DHE 或 ECDHE)实现它:证书的长期私钥只负责对握手签名,从不直接保护会话秘密。

为什么重要

没有前向保密时(例如 TLS 1.2 的 RSA 密钥传输),攻击者今天录下加密流量,日后只要拿到服务器私钥(入侵、Heartbleed 这类漏洞、备份管理不当都可能导致泄露),就能解密全部历史会话。有了前向保密,被盗的私钥只能用来冒充服务器,无法回头解密。TLS 1.3 的完整握手一律具备前向保密,但仍有两点要注意:会话恢复依赖服务器的会话票据加密密钥,这个密钥长期不轮换会削弱保护;TLS 1.3 的 0-RTT 早期数据和纯 PSK 恢复相对该密钥也不具备前向保密。

例子

只允许具备前向保密的 TLS 1.2 套件;无法定期轮换票据密钥的服务器可以关闭会话票据:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_session_tickets off;

常见误区

  • 有前向保密,私钥被偷也没关系。 它保护的是过去的会话。攻击者持有当前私钥时,仍可在新连接中冒充服务器,直到证书被吊销并更换。
  • 用了 TLS 1.3,所有数据都有前向保密。 0-RTT 数据和纯 PSK 恢复依赖票据密钥。
  • RSA 密钥越长,前向保密越强。 二者无关,前向保密只来自临时密钥交换。

延伸阅读