跳到主要内容

设想有人在机场、酒店或共用办公室里,悄悄把你笔记本电脑发出的每一个加密数据包都复制下来,存在硬盘里。今天,他一个字也读不出来。可是一年后,你用过的某家公司遭到入侵,一把长期私钥被盗。关键的问题来了:那些存下来的数据包现在能被打开吗?如果有完美前向保密(PFS),答案是不能。如果没有,答案可能是能,而且是一次全部打开。

正是这一个特性,让安全人员在 VPN 的介绍里寻找“ephemeral(临时的)”这个词。本文把“录下流量”的故事从头讲到尾,解释临时密钥怎样提供这一保证,看看常见设计中密钥多久更换一次,并列出完美前向保密做不到的事。想先了解更宽的背景,请看 VPN 加密是什么。如果你想知道你和 VPN 之间的各方到底能看到什么,请读 你的运营商能看到你的 VPN 流量吗。

问题所在:录下流量,等密钥泄露

加密保护传输中的数据,但也留下了一份记录。任何网络运营者、热点所有者或中间方,都能以很低的成本存储加密流量。存储很便宜,复制那天也不需要破解任何东西。唯一的问题是:保护数据的密钥,能否在数据仍有价值的整个期间保持秘密。

用一个时间线把它说具体。

时间 发生的事
第 1 天 你连接 VPN 服务器并浏览一小时,路径上的观察者存下了加密数据包。
第 90 天 你断开连接,把这件事忘了。观察者仍保留着文件。
第 400 天 服务器运营方遭遇入侵,或旧备份外泄,服务器的长期私钥泄露。
第 401 天 观察者拿着泄露的密钥去试那份存档。

第 401 天的结果,完全取决于第 1 天的会话密钥是怎么产生的。

  • 没有前向保密时,会话密钥直接由服务器长期密钥导出,或在传送时由它保护。泄露的密钥能打开存档,同一时期的所有会话也随之全部打开。
  • 有前向保密时,会话密钥来自只在会话期间存在、随后被删除的临时数值。泄露的长期密钥只能证明服务器是谁,却无法重现那些临时数值。存档依然是锁着的。

这就是它叫“前向保密”的原因:早先会话的保密性会向前延续下去,即使之后的密钥被攻破也一样。

长期密钥与会话密钥

VPN 使用两类不同的密钥,把它们混为一谈是最常见的困惑来源。

  • 长期密钥用来标识各方身份。对服务器来说,可以是与证书配对的私钥,或客户端被配置为信任的公钥。它存在几个月甚至几年,保存在磁盘上。它回答的是“我真的在和正确的服务器通信吗”。
  • 会话密钥用来加密实际流量。它在握手时生成,使用一段有限的时间后丢弃。它回答的是“谁能读到这段对话”。

前向保密就是要求这两者必须单向分开:知道长期密钥,不能让人重新算出旧的会话密钥。可以想想酒店。总钥匙证明员工有权限,而每位客人的房间密码在每次入住时重新生成,退房时删除。明年有人偷到总钥匙,也不会知道你去年三月住的那间房用的是什么密码,因为那个密码从来不是由总钥匙推算出来的。

临时密钥是如何起作用的

这种技术叫临时密钥交换(ephemeral key exchange),常写作 DHE 或 ECDHE,其中的“E”代表 ephemeral。一次会话是这样进行的。

  1. 你的设备为这次连接专门生成一对全新的临时密钥。
  2. 服务器也同样生成一对。
  3. 双方把各自的临时公开值发给对方。这些值不是秘密,观察者看得见。
  4. 双方把自己的临时私有值与对方的公开值结合。由于这种交换的数学性质,双方得到相同的共享秘密,而只看到公开值的观察者无法算出它。
  5. 长期密钥只用来为握手签名或认证,证明服务器是它所声称的那一个,并不用来生成或承载共享秘密。
  6. 双方由共享秘密导出会话密钥,然后从内存中删掉临时私有值。

第 6 步正是“前向”二字的来由。临时私有值消失之后,包括服务器运营方在内,没有人能根据磁盘上残留的内容重新算出共享秘密。录下的数据包只有配合这个秘密才有意义,而这个秘密已经不存在于任何地方。共享秘密具体是怎样构造的,是另一个独立的话题,所以这里把重点放在它所提供的保证上。

没有前向保密时是什么样

较早的设计,尤其是早期使用静态 RSA 密钥交换的 TLS,工作方式不同。客户端选一个随机秘密,用服务器的长期公钥加密后发送。任何人日后拿到服务器私钥,就能解开存下来的这个秘密,进而解开所有数据包。2014 年的 Heartbleed 漏洞这类事件,可能暴露服务器内存中的私钥,让这种风险变得非常具体。TLS 1.3 去掉了静态密钥交换,要求使用临时交换(RFC 8446),这是它被视为更安全基线的原因之一。

特性 静态密钥交换 临时密钥交换
会话秘密来自哪里 客户端选定,用服务器长期密钥保护后发送 由双方的临时数值计算得出
日后长期密钥泄露的影响 过去的会话可被打开 过去的会话仍受保护
每次握手的成本 略低 略高
如今是否常见 已从现代 TLS 中移除 现代 TLS、IKEv2 和 WireGuard 的标准做法
某个会话密钥被攻破 可能暴露相关会话 只影响该次会话

每次握手多出的成本,与所得的好处相比微不足道,所以当前的协议把前向保密当作默认项,而不是可选项。

多久换一次密钥

前向保密是按会话生效的,但很长的会话带来一个合理的疑问。假如隧道连续开了八个小时,第七个小时你设备内存里的会话密钥被偷走,前面的七个小时能被打开吗?频繁换钥可以缩小这个窗口。各协议的处理方式不同。

  • WireGuard。 其白皮书中的设计描述:在有数据流动时,大约几分钟后就发起新的握手并替换会话密钥,并拒绝使用超过很短最长寿命的密钥。旧密钥会被删除。
  • OpenVPN。 重新协商计时器(示例配置里常设为约一小时)会在长会话中替换数据通道的密钥。管理员可以把它调短。
  • IKEv2 与 IPsec。 生存期可配置。初始交换使用临时密钥交换,在子安全关联换钥时,由某项设置决定是否再次执行新的交换。NIST 的 IPsec 指南讨论了生存期和群组的选择。

间隔更短,单个密钥保护的数据量就更少,代价是每次多几个很小的数据包。在现代设备上,这个代价根本感觉不到。更实际的问题是 VPN 到底有没有换钥,所以值得去看服务商文档里写了什么,而不是想当然。

前向保密不保护什么

诚实的描述很重要,因为 PFS 有时被说得像一面万能盾牌。其实它的范围要窄得多。

  • 正在进行中的攻破。 如果你设备上的恶意软件从内存读取了会话密钥,或攻击者在会话期间控制了终端,那么对这次会话,前向保密没有任何帮助。相关的限制见 VPN 无法保护你的哪些方面。
  • 本来就可读的流量。 发送到没有自身加密的网站的数据,隧道密钥只保护到隧道为止。流量离开 VPN 服务器后,保护取决于目的地。
  • 会话期间 VPN 运营方看到的内容。 你连接时,服务器持有会话密钥,因此能看到转发你流量所需的内容。前向保密不会改变这一点。VPN 服务商能看到你的哪些信息 一文做了说明。
  • 能破解数学难题的未来计算机。 如果观察者今天存下你的握手,日后获得了能解决底层密钥交换难题的机器,就可能还原共享秘密。传统的临时交换会删除私有值,但保存下来的公开值对这类攻击者来说可能就够了。这种“先存下来,以后再解密”的担忧是另一回事,见 后量子 VPN 加密。
  • 薄弱的身份认证。 如果客户端被骗去信任错误的服务器,临时交换只是和错误的一方建立起一条安全通道。认证依然重要。
  • 弱密码或被盗的账号。 隧道本身可以完美无缺,而攻击者直接以你的身份登录。

阅读 PFS 宣传的检查清单

当某款 VPN 或应用声称有前向保密时,问这五个问题。

  1. 是否说明使用临时交换? 找 ECDHE、X25519 之类的措辞,而不只是“强密钥”。
  2. 是否说明了换钥? 说明会话密钥多久替换一次,表明服务商考虑过长时间会话。
  3. 长期密钥与会话密钥是否分开? 好的描述会说明长期密钥只用于认证。
  4. 说法是否针对具体协议? 前向保密是某个具体设计的特性,在有些配置里可能被关闭。
  5. 表述是否诚实? 如果 PFS 与“完全无法追踪”之类的承诺放在一起,问题出在周边的说法,而不是密码学本身。

想对连接的其他方面做实际检查,比如是否泄露、隧道是否在工作,可以按照 如何检查 VPN 是否在正常工作 中的步骤。

三个场景

担心机场网络的旅行者。 艾莎在机场用 Wi-Fi 发送工作文件,担心有人复制她的流量留待日后阅读。使用临时密钥交换,复制下来的数据包日后打不开,即使明年 VPN 的服务器密钥泄露也一样。她剩下的风险都是 PFS 从来没覆盖的:误连的仿冒网络名称,以及可能点开的钓鱼邮件。

小企业主。 品芝的店铺保存客户订单,每周通过 VPN 导出到后台服务器。她无法预测五年内是否会有密钥泄露,但可以选择让日后泄露与过去导出无关的工具。她还单独加密备份,因为前向保密只覆盖传输中的数据,对磁盘上的文件没有任何作用。

处理敏感访谈的研究者。 李博士录制访谈并通过 VPN 上传。前向保密有帮助,但这些数据几十年后依然有价值,所以她去读了 后量子 VPN 加密,并询问自己用的工具打算采用哪些保护。她把 VPN 当作其中一层,并在文件传输前先对文件本身加密。

局限与注意事项

  • 前向保密是设计层面的特性。 它不是看一眼应用里的绿色图标就能验证的设置。
  • 营销可能随意使用这个词。 只写“PFS”而不提换钥或临时交换,说明不了什么。
  • 它不能替代更新。 带有已知缺陷的旧软件,无论密码学多么巧妙,都可能泄露密钥。
  • 它不会让你匿名。 服务器、网站和你的账号依然知道关于你的一些事。参见 VPN 能让你匿名吗。
  • 连接中断是重新连接的信号,不必担心。 换钥在后台进行。如果在换钥时间点前后反复失败,重新连接会得到一个新的会话。

总结

完美前向保密意味着每次 VPN 会话都由临时数值生成的密钥保护,这些数值用完即删。被盗的长期密钥因此只能证明服务器是谁,而不能还原过去会话中说过什么。临时交换和定期换钥提供了这种保证,TLS 1.3、IKEv2 的配置以及 WireGuard 等现代设计都依赖它。它不能阻止正在进行的攻破,不能在你连接期间对 VPN 运营方隐藏数据,本身也无法回答量子计算的问题。把它看作强而窄的保证,并去核实服务商究竟是怎么描述它的。

如果想在自己的设备上试用隧道,下载页面 有免费应用的链接,价格页面 说明通行证如何运作。

常见问题

完美前向保密用一句话怎么说?

意思是保护每次 VPN 会话的密钥都是临时生成、用完即弃的,所以即使日后有人偷到服务器的长期密钥,也无法解密之前录下的流量。

完美前向保密能阻止别人此刻读取我的流量吗?

不能。它保护的是过去的会话,防的是未来的密钥被盗。对你设备上的恶意软件、会话进行中被攻破的终端,或者你自己选择登录的假网站,它都无能为力。

VPN 的密钥应该多久更换一次?

没有唯一正确的间隔。不同设计会按时间、按数据量或两者结合来换钥。WireGuard 的白皮书描述了使用约几分钟后换钥,许多 OpenVPN 配置则默认约一小时。间隔越短,暴露越少,但会多一些很小的握手开销。

前向保密等于能抵御量子计算机吗?

不等于。前向保密限制的是密钥被盗造成的损失,本身并不能保护已被录下的流量免受未来能破解密钥交换数学难题的计算机攻击。那是另一个话题,由后量子密码学相关工作处理。

我能检查自己的 VPN 有没有前向保密吗?

查看是否明确说明会话密钥来自临时(ephemeral)密钥交换,并且会定期换钥。像“军用级加密”这样的含糊说法回答不了这个问题。

关于作者

Bob Kanokphon Thongdee,XPASS VPN 创始人

Bob Kanokphon Thongdee

  • XPASS VPN 创始人
  • eSIMonline.asia 联合创始人
  • 7 年以上网络营销经验
  • Cojourney Visa 与 Cojourney Travel 创始人

短途出行或忙碌的一个月,需要 VPN?

XPASS 提供按天数计算的预付通行证。一次付款,不会自动续费。

查看通行证

继续阅读

VPN 安全

什么是 VPN 加密?

VPN 加密会把你的设备与 VPN 服务器之间的数据打乱。本文讲解密钥、算法和握手如何运作,以及加密做不到什么。

阅读约 10 分钟

VPN 安全

后量子 VPN 加密:对你意味着什么

量子计算常被描述得令人不安。本文解释 VPN 加密中真正存在风险的部分、后量子安全是什么,以及普通用户可以怎么做。

阅读约 9 分钟

隐私指南

开了 VPN,网络运营商还能看到什么?

开启 VPN 后,网络运营商不能再读到你访问的网站,但仍能看到连接本身。本文列出哪些仍然可见、哪些消失了,以及限速与 VPN 的关系。

阅读约 9 分钟

隐私指南

VPN 服务商能看到你的哪些信息?

VPN 不是消除信任,而是转移信任。本文说明 VPN 服务商在技术上能看到你的账户、支付、连接和流量中的哪些内容,以及如何评估服务商。

阅读约 9 分钟

VPN 安全

WireGuard 与 OpenVPN 有什么区别

WireGuard 和 OpenVPN 都能建立加密隧道,但设计、复杂度和灵活性不同。本文用通俗的方式比较,并说明该怎样选择。

阅读约 9 分钟