WireGuard是一种新型的VPN,旨在比现有的VPN更简单地进行设置和维护,同时提供更高的安全性。它是一款免费的开源软件,采用GPLv2许可证,这与Linux内核相同,这在我看来总是一个巨大的优点。此外,它还被设计为易于在不同操作系统之间移植。这一切可能会让你问:在已经拥有IPSEC、PPTP、L2TP、OpenVPN和众多专有SSL VPN的世界里,我们是否真的需要另一种VPN?
为什么选择WireGuard?
在过去的几年里,我见到了一些新的VPN设计,如ZeroTier和Tinc,每次我都想:“我应该好好研究一下。”但最终我并没有这样做。我重度使用OpenVPN,对它非常熟悉,能够很好地满足我的大部分VPN需求。
那么,是什么让WireGuard引起了我的注意?它有一个几乎从未见过的特点:来自Linus Torvalds对其代码的积极评价。
“我再次表示对[WireGuard]的喜爱,并希望它能尽快合并。也许代码并不完美,但我浏览过,与OpenVPN和IPSec的恐怖相比,它简直是一件艺术品。”
——Linus Torvalds,Linux内核邮件列表
这足以让我坐直身子,认真关注WireGuard。如果你认为“也许它并不完美,但”是对其的轻微贬低,那么你显然不熟悉Torvalds的尖刻文风。
更少的代码行数
经过进一步研究,我明白了Torvalds为何如此不寻常地积极。WireGuard的代码大约只有4000行,而OpenVPN + OpenSSL总共有600,000行代码,XFRM + StrongSwan的IPSEC VPN则有400,000行代码。少两个数量级的代码行数意味着攻击面大大减少,漏洞更难被发现。
更小的代码库也意味着代码更有可能按照预期工作。我对OpenVPN的一个最大的不满是,它的隧道有时会崩溃或挂起。
对于只有几十个客户端的小型网络,这种情况可能不会频繁发生,毕竟大多数连接和断开都是由人工操作的。然而,如果你想管理一个拥有数百个客户端的网络,并且这些客户端都应自动管理自己的常开隧道,这将是一个大问题。
OpenVPN提供了ping和ping-restart配置参数,理论上应该可以解决这个问题,但实际上并没有。我花了太多时间在编写和维护监控脚本上,精心检查、杀死并重启OpenVPN守护进程。我希望能找到一个简单有效的解决方案。
更简单的设置
我不想美化这一点:VPN并不简单,而WireGuard并没有让它变成幼儿园的项目。尽管如此,我花了几天的时间仔细阅读、实施和测试,才真正理解OpenVPN的工作原理。几年后,我又花了一到两周的时间在互联网上寻找教程,并将它们拼凑在一起,以建立一个基于OpenVPN的大规模网络。在更新我去年的Ars Technica OpenVPN指南的配置时,我又花了半天时间研究最新的配置和最佳实践。
相比之下,我在一个星期天下午就用大约六个小时创建了一个可扩展、安全的WireGuard网络的稳定配置,并进行了文档记录。这种更高的设置和配置简单性很大程度上归功于WireGuard对密码学灵活性的有意拒绝。
更强的算法
WireGuard有意避免使用“行业标准”算法,这些算法长期存在弱点,而选择最新、最强的基础算法。根据WireGuard官网的信息:
- ChaCha20用于对称加密,使用Poly1305进行身份验证,采用RFC7539的AEAD结构
- Curve25519用于ECDH
- BLAKE2s用于哈希和密钥哈希,详见RFC7693
- SipHash24用于哈希表键
- HKDF用于密钥派生,详见RFC5869
这些看起来都很令人印象深刻,但我并不是密码学专家。最初,我对WireGuard的未来安全性有些担忧,因为它没有可配置选项,密钥也比我习惯的要小。幸运的是,我在自己的博客上发布了前三个WireGuard VPN配置,这引起了WireGuard作者和首席开发者Jason Donenfeld的注意。这让我有机会进行了一些迫切需要的问答。
作为一个对密码学了解不深但活跃使用了20年的人,我对短密钥和没有配置选项的组合感到有些紧张。使用OpenVPN时,我倾向于使用一个非常大的密钥,以确保安全。为什么在WireGuard中我不能这样做?为什么WireGuard的密钥限制在256位,而OpenVPN提供了高达4096位的密钥?结果发现,4096位的密钥实际上是有些荒谬的。
如果你必须对一个256位的密钥进行暴力破解,你需要处理2的256次方种组合。如果假设你平均需要在问题集中找到解决方案的一半,仍然会留下2的255次方次失败。在假设你拥有一个能够每秒尝试38,000,000个密钥的强大系统,并且可以访问密钥对的公钥的情况下,如果依赖暴力破解,平均需要耗费超过1.52 × 10^69秒才能找到正确密钥。考虑到宇宙的估计年龄为4.32 × 10^17秒,这样的时间显然是足够的。
OpenVPN(以及几乎所有VPN解决方案)使用如此荒谬长的密钥的原因在于,你并不需要暴力破解它们。对VPN(或HTTPS连接)常用算法的实际密码攻击更像是字典攻击,而不是暴力攻击;你可以在不实际尝试它们的情况下排除大量问题空间。
更简单的握手
到目前为止,非对称加密几乎总是暗示着一种称为密码学灵活性的原则。简而言之,灵活的加密意味着你可以随意更换密码、摘要、Diffie-Hellman等,以应对行业的变化。浏览器使用的SSL加密就是一种灵活协议,IPSEC和OpenVPN也是如此。
乍一看,这似乎是个好主意——更多的选择!然而,WireGuard选择了一条不同的道路。
结论
WireGuard凭借其简洁的代码、高效的加密算法和简化的设置流程,成为了一个值得推荐的快连VPN产品。如果你在寻找一个性能卓越且易于管理的VPN解决方案,WireGuard无疑是一个值得考虑的选择。