VPN 密钥交换是如何进行的
手机和 VPN 服务器如何在所有人都能看到消息的情况下约定同一个密钥?本文用小数字演示 Diffie-Hellman,说明认证的作用,以及真实协议怎样生成会话密钥。
阅读约 10 分钟更新于 2026年10月15日作者:XPASS Editorial Team

你按下“连接”的那一刻,你的手机和 VPN 服务器从未见过面。它们没有共同的秘密,彼此之间的每条消息都要穿过陌生人运营的网络。可是不到一秒钟,它们就在发送没有任何陌生人能读懂的数据。让这件事成为可能的技巧,叫做密钥交换,是实用密码学中最精巧的想法之一。
本文用通俗的话讲解 VPN 密钥交换是如何工作的:混合颜料的比喻,一个可以用计算器验证的小数字真实计算,同样的思路怎样放大到现代椭圆曲线,为什么没有身份认证的交换是不够的,以及共享秘密怎样变成真正加密流量的密钥。想知道加密算法如何使用这些密钥,请读 VPN 加密是什么。这里我们只关注秘密是怎样诞生的。
问题:在公开场合约定秘密
加密需要共享密钥。如果你和服务器持有同一个密钥,就可以加密和解密。困难在于怎样把这个密钥送到双方手里。通过网络明文发送,等于交给所有观察者;加密发送,又需要一个你还没有的密钥。
历史上,这靠当面交换或可信的信使解决。但对于数十亿次、彼此素不相识的连接来说,这行不通。1976 年,Whitfield Diffie 和 Martin Hellman 发表了解决这一问题的方法:它让双方通过任何人都能偷听的公开对话,建立起一个共享秘密。
要记住的词是约定。在经典的交换里,没有哪一方选好最终密钥再发送出去。每一方贡献一个私有的部分,密钥由两者结合而产生。没有任何秘密真正穿过线路。

混合颜料的比喻
经典的比喻用颜料。假设爱丽丝和鲍勃想得到一个共同的秘密颜色,而伊芙在观察他们交换的一切。
- 两人公开约定从黄色开始。伊芙看见了。
- 爱丽丝私下选了红色作为自己的秘密颜色,混进黄色里。鲍勃私下选了蓝色,做同样的事。
- 两人公开交换混好的颜料罐。伊芙看见了两罐混合物。
- 爱丽丝把自己的秘密红色加进鲍勃的罐子,鲍勃把自己的秘密蓝色加进爱丽丝的罐子。
- 现在两个罐子里都是黄加红加蓝,颜色相同。
伊芙手里只有黄色和两罐混合物。把混合好的颜料再分开非常困难,所以她还原不出红色或蓝色,也做不出最终的颜色。数学版本里,“混合”被换成一种正向容易、反向极难的运算。
用小数字做一次真实计算
下面用真实的数字演示同一思路。数字很小,方便你手算验证;真实系统使用的数值要大得多。
用到的运算叫“模幂”:先把一个数乘方,再只保留除以某个固定数后的余数。
公开值(所有人可见):模数 p = 23,底数 g = 5。
| 步骤 | 爱丽丝 | 鲍勃 |
|---|---|---|
| 选择私有数字 | a = 6 | b = 15 |
| 计算公开值 | A = 5^6 mod 23 = 8 | B = 5^15 mod 23 = 19 |
| 通过网络发送 | 发送 8 | 发送 19 |
| 与对方的值结合 | 19^6 mod 23 = 2 | 8^15 mod 23 = 2 |
双方最后都得到 2,而过程中从未发送过 6、15 或 2。伊芙看到的是 23、5、8 和 19。要得到秘密,她必须从公开数字中算出爱丽丝的 6 或鲍勃的 15。模数只有 23 时,她只要逐个试指数,几次就能找到 6,因为一共只有 22 种可能。
现在把规模放大。真实的有限域交换中,模数是一个约 2,048 位的数,私有指数大小相仿。试错变得不可能,已知最巧妙的方法也远远够不到。这种单向性质,即正向容易、反向不可行,就是整个交换安全性的全部来源。
从小数字到椭圆曲线
大多数现代 VPN 和网站并不使用 2,048 位的版本,而是使用椭圆曲线 Diffie-Hellman(ECDH):其中的“数字”是数学曲线上的点,“乘方”变成了重复的点加法。
重要的是它在实践中的影响。
- 密钥短得多。 流行的曲线 X25519 使用 32 字节的公开值,而同等强度的有限域交换需要 256 字节以上的公开值。
- 握手更快。 数字更小,意味着计算更少、数据更少,对手机、路由器和慢速链路有帮助。
- 设计简洁,不易用错。 X25519 的设计让实现者犯错的机会更少。
- 形式相同。 每一方生成私有值,推出公开值,交换,再结合得到一个共享秘密。混合颜料的比喻依然适用。
使用 VPN 并不需要掌握曲线运算。知道 ECDH、ECDHE 和 X25519 这些缩写指的是上述在曲线上进行的交换,就够了。
为什么只有交换还不够
到目前为止的故事假设爱丽丝确实在和鲍勃通话。现实中,网络攻击者(我们叫她马洛里)可能坐在中间截获消息。这就是经典的中间人问题,也说明每次密钥交换之上都必须有身份认证。
看看对裸交换的攻击是怎样进行的。
- 你把公开值发向服务器,马洛里截获并留下。
- 马洛里假装是你,和服务器单独做一次交换;又假装是服务器,和你做另一次交换。
- 你和马洛里得到一个共享秘密,服务器和马洛里得到另一个不同的共享秘密。
- 你发送的一切,马洛里解密、阅读、重新加密再转发。两端都以为通道是私密的。
数学运作得很完美,只是建立了一条通向错误对象的安全通道。解决办法是让服务器在交换过程中证明自己的身份,方式有几种。
| 方式 | 原理 | 常见用途 |
|---|---|---|
| 证书 | 服务器出示有签名的证书,并用私钥为握手签名。客户端验证签名链。 | 网页连接、许多 VPN 配置 |
| 已知公钥 | 客户端提前配置了服务器的公钥,拒绝任何其他公钥。 | WireGuard 类对等端 |
| 预共享密钥 | 双方事先持有一个秘密,并证明自己知道它。 | 站点间链路、部分 IPsec 配置 |
| 用户名和密码 | 在已受保护的隧道内使用,用来识别用户而不是服务器。 | 许多消费级 VPN 登录 |
最后一行值得留意。密码登录是向服务器表明你是谁,而服务器的身份是在流程更早阶段用另一种机制认证的。如果想了解证书到底如何证明身份,Let's Encrypt 的“How It Works”页面用几段话讲清了基本思路,我们的 HTTPS 与 VPN 一文则展示了同样的机制在网页浏览中如何出现。
从共享秘密到可用的密钥
原始的共享秘密不会直接当作加密密钥使用。它要经过一个密钥派生函数,这个函数做了几件有用的事。
- 混入上下文。 函数会吸收对话的细节,比如双方的公开值和握手消息的指纹。如果攻击者改动了其中任何一项,两端会派生出不同的密钥,连接就会失败。
- 产生多个密钥。 一个共享秘密被扩展成互相独立的密钥:每个传输方向一个,另外还有用于认证消息的。用来发送的密钥绝不会用来接收。
- 让随机性分布均匀。 曲线计算得到的共享秘密带有结构,派生过程会把它打磨成看上去均匀的密钥材料。
- 便于更新。 隧道保持连接的同时,可以通过新的交换再派生新的密钥。
此后,加密算法才开始用这个过程产生的密钥处理你的数据包。

真实协议怎么做
不同协议用不同的包装来实现同一个想法。
| 协议 | 交换发生在哪里 | 说明 |
|---|---|---|
| TLS 1.3 | 在最初的消息里,客户端发送自己的公开部分,服务器用自己的部分回应 | 必须使用临时交换;证书为握手签名(RFC 8446) |
| IKEv2(IPsec) | 在交换的第一对消息中,身份尚未透露之前 | 认证在第二对消息中进行,由第一对产生的密钥保护(RFC 7296) |
| WireGuard | 在一次简短握手里,把对等端的长期公钥与全新的临时密钥结合 | 设计紧凑,使用固定的一组算法(WireGuard 白皮书) |
| OpenVPN | 通过作为隧道控制通道运行的 TLS 会话 | 数据通道的密钥来自该 TLS 握手 |
注意共同的模式:每种设计都会运行临时密钥交换、认证各方、派生密钥,然后才发送数据。细节不同,结构一样。
由于交换最先发生,这一步的任何问题都表现为连接不上,而不是连接变慢。账号密码错误、服务器时钟严重偏差(会破坏证书校验)、或防火墙丢弃最初的几个数据包,都会让交换无法完成。如果你的隧道始终建立不起来,VPN 连接不上怎么办 会按顺序梳理这些原因。
简单谈谈量子问题
上面描述的交换依赖于某些数学难题,而足够大的量子计算机理论上可以解开它们。今天还没有这样的机器,但现在被录下的流量,理论上日后可能被攻击。标准组织已经用新算法作出回应,包括 NIST 标准化的密钥封装机制 ML-KEM(FIPS 203)。许多设计正转向混合交换,把传统的曲线交换与后量子交换结合起来,这样只要其中一半仍然可靠,结果就依然安全。细节以及在服务商宣传中该注意什么,见 后量子 VPN 加密。
你能检查什么,不能检查什么
作为普通用户,你看不到自己的密钥交换,但可以合理判断。
- 服务商是否说明了密钥交换? 寻找 ECDHE 或 X25519 之类明确的名称,以及服务器如何被认证的说明。
- 软件是否保持更新? 旧客户端可能包含握手处理方面的已知缺陷。
- 你信任第一次连接吗? 许多配置依赖于正确设置的服务器身份。请从官方渠道下载应用,避免配置被篡改。
- 错误信息是否提到证书或认证? 这些指向握手阶段,应当原样报告给客服。
有几个常见误解值得澄清:
- “密钥交换会隐藏我是谁。” 它保护的是内容。网络观察者可能仍然看得到你连接的是 VPN 服务器。
- “密钥越长越好。” 超过一定长度后,额外的长度帮助有限。正确的设计与实现更重要。
- “交换只发生一次。” 长会话期间密钥也会更新,而不只是在开始时。
- “强大的密钥交换能弥补弱密码。” 密码保护的是你的账号,密钥交换保护的是通道。
想更全面地了解受保护的通道覆盖什么、不覆盖什么,请看 你的运营商能看到你的 VPN 流量吗。
总结
VPN 的密钥交换让你的设备与服务器在公开环境下建立共享秘密:各方保留一个私有数字,交换由它算出的值,数学保证双方能轻松算出秘密,而旁观者在实际中无法做到。现代系统用 X25519 之类的椭圆曲线,让交换快速而紧凑。仅有交换可能被中间人劫持,因此必须通过证书、已知密钥或预共享秘密来认证服务器。结果再经过密钥派生函数,产生互相独立的工作密钥,并在长会话中不断重复这个过程。较新的混合设计正在为量子计算机变得重要的那一天做准备。
常见问题
所有人都能看到消息,两台设备怎么还能约定一个秘密?
各方保留一个私有数字,并公布由它算出的一个值。借助特殊的数学性质,各方把自己的私有数字与对方的公开值结合,得到相同的结果。只看到公开值的观察者,在实际中无法算出这个结果。
密钥交换就是加密吗?
不是。密钥交换只产生一个共享秘密。这个秘密再被转换成会话密钥,由另一种加密算法用这些密钥来加密你的实际流量。
怎样防止有人在交换过程中冒充 VPN 服务器?
靠身份认证。服务器用证书、预共享密钥或已知的公钥证明自己的身份,客户端进行校验。没有这一步,中间的攻击者可以分别与两端各做一次交换,并转发所有内容。
我需要做什么才能触发密钥交换吗?
不需要。每次隧道启动时它会自动运行,密钥更新时也会再次运行。你只能看到它的效果:连接时短暂等待,或认证失败时出现错误。
常见的密钥交换能抵御量子计算机吗?
目前常用的传统方法,在足够大的量子计算机面前是脆弱的,所以正在引入把它们与新算法结合的混合设计。这样的计算机今天并不存在,但该话题正被积极研究。
参考资料
关于作者

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




