# 前向保密是什么？定义、例子与常见误区

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

Source: https://ssl.sh/zh/glossary/forward-secrecy/
Last updated: 2026-11-10

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

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

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

```nginx
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 密钥越长，前向保密越强。** 二者无关，前向保密只来自临时密钥交换。

## 相关术语

- [ECDHE](https://ssl.sh/zh/glossary/ecdhe/): ECDHE 是椭圆曲线上的临时 Diffie-Hellman 密钥交换，TLS 双方每次握手都生成新的椭圆曲线密钥对，并据此协商出共享密钥。
- [Diffie-Hellman](https://ssl.sh/zh/glossary/diffie-hellman/): Diffie-Hellman 是 1976 年提出的密钥协商方法，让通信双方在公开信道上各自算出相同的共享秘密，而无需传输这个秘密本身。
- [密钥交换](https://ssl.sh/zh/glossary/key-exchange/): 密钥交换是 TLS 握手中客户端与服务器建立共享秘密的步骤，保护连接的对称密钥都由这个共享秘密派生而来。
- [Session Ticket](https://ssl.sh/zh/glossary/session-ticket/): Session Ticket 是服务器交给客户端保管的加密会话状态，客户端下次连接时出示它即可恢复会话，服务器无需保存任何状态。
- [TLS 1.3](https://ssl.sh/zh/glossary/tls-1-3/): TLS 1.3 是当前最新的传输层安全协议版本（2018 年的 RFC 8446，现行规范为 RFC 9846），完整握手只需一个往返，且只保留 AEAD 加密算法。
- [私钥](https://ssl.sh/zh/glossary/private-key/): 私钥是非对称密钥对中保密的那一半，TLS 服务器用它证明自己拥有证书里的那把公钥。
- [Heartbleed](https://ssl.sh/zh/glossary/heartbleed/): Heartbleed 是 2014 年公开的 OpenSSL 漏洞（CVE-2014-0160），出在 TLS 心跳扩展上，任何人都能借此读取服务器内存片段，甚至包括私钥。
