一个 VPN 协议的核心代码只有约 4000 行,而老牌协议 OpenVPN 动辄数十万行,这听起来像偷工减料,实际却指向相反的方向。WireGuard 用极简的设计,把「可审计」变成了一种安全特性——代码越少,可被攻击者利用的漏洞面就越小,也越容易被人逐行审查。ProtonVPN 在 2020 年前后将其引入客户端,如今已成为默认协议。
传统 VPN 协议诞生于互联网早期,为兼容性堆叠了大量配置项:协商算法、密钥交换方式、压缩开关……每一项都增加了实现复杂度,也埋下了配置错误的风险。WireGuard 反其道而行,砍掉几乎所有可选项,只保留一套现代密码学原语,让「正确配置」成为唯一可能。
一、代码越少越安全
WireGuard 由安全研究员 Jason Donenfeld 设计,其核心理念是「crypto-routing」:把公钥与允许的 IP 地址绑定,像 SSH 一样管理对端身份。握手仅用 1-RTT,比 OpenVPN 的多轮协商快得多。代码量小带来的直接好处是便于审计,社区能快速发现并修复问题,而不是在几十万行代码里大海捞针。
Proton 在引入 WireGuard 时曾公开说明,他们对上游代码做了安全审查,并保留了在隐私上的关键补丁。因为 WireGuard 默认会在服务器端保存对端公钥以维持会话,这与「无日志」目标存在张力,Proton 为此实现了临时密钥与地址轮换机制。
| 维度 | WireGuard | OpenVPN |
|---|---|---|
| 核心代码量 | 约 4000 行 | 数十万行 |
| 握手往返 | 1-RTT | 多轮 |
| 加密原语 | ChaCha20 + Poly1305 | AES 为主 |
| 可配置项 | 极少 | 极多 |
二、加密算法的取舍
WireGuard 选用 ChaCha20 流密码与 Poly1305 认证器,而非更常见的 AES。原因在于 ChaCha20 在缺少 AES 硬件加速的移动设备上效率更高,且能抵抗缓存侧信道攻击。密钥交换采用 Curve25519 椭圆曲线,握手密钥与会话密钥严格分离,前向保密由 Noise 协议框架保证。
这套组合在学术界与工业界都经过了充分检验。Google 在 QUIC 协议、OpenSSH 在默认配置中都采用了 ChaCha20-Poly1305,侧面印证了它的可靠性。WireGuard 不提供像 OpenVPN 那样的算法协商能力,意味着一旦某个算法被攻破,无法临时切换——但这也迫使协议只采用当前最稳妥的原语。
| 用途 | 算法 | 特点 |
|---|---|---|
| 对称加密 | ChaCha20 | 抗侧信道,移动端高效 |
| 消息认证 | Poly1305 | 高速认证 |
| 密钥交换 | Curve25519 | 前向保密 |
| 哈希 | BLAKE2s | 轻量快速 |
三、WireGuard 的代价
精简并非没有代价。WireGuard 默认不支持动态分配 IP,这在多设备漫游时需要额外机制;它也不支持 TCP 伪装,在某些对 UDP 限速的网络里表现不佳。ProtonVPN 通过在其上实现地址轮换与「Stealth」混淆层来补足这些短板,让用户在严苛网络下仍能连接。
从实际体验看,WireGuard 带来的提速是用户最容易感知的变化。Proton 内部测试显示,在同等带宽下,WireGuard 的吞吐比 OpenVPN 高出约 40%,而 CPU 占用更低。对绝大多数人来说,理解协议细节并不必要,在 proton vpn官网 下载客户端后直接使用默认的 WireGuard 即可获得这一收益。
用户评论
4000 行对比几十万行这个视角很直观,可审计确实是安全的一部分。
ChaCha20 在手机上更快这点有体会,旧协议确实发热。
原来 WireGuard 默认 UDP 还有限速的问题,学到了。
临时密钥和地址轮换这个补丁很关键,不然和无日志冲突。