WireGuard®是一种相对较新的VPN协议,与已有数十年的OpenVPN相比,其开发理念截然不同——简单高效地完成一项任务。这种理念被称为UNIX哲学。WireGuard在多个开源许可证下获得许可,例如GPLv2,这与Linux内核使用的开源许可证相同。因此,WireGuard最终将被添加到Linux内核中,这意味着WireGuard将来会在所有Linux发行版上“预装”。Linus Torvalds对WireGuard未来普及的评论更是验证了这一点。他在2018年8月给Linux内核邮件列表发了一封邮件,表示:
“我能再次表达我对它[WireGuard]的热爱,并希望它尽快合并吗?也许代码并不完美,但我已经浏览过,与OpenVPN和IPSec的恐怖相比,这是一件艺术作品。”
WireGuard的崛起标志着VPN时代的变革
Jason Donenfeld在2016年左右首次开始研究WireGuard,首次发布于2016年12月9日。WireGuard的核心是一种Linux内核虚拟网络接口,旨在取代Linux上的用户空间网络(如tun设备和IPSec)。实际上,IPSec在很大程度上已被当前行业标准OpenVPN所取代,而后者在用户空间中使用tun设备。WireGuard也可以作为OpenVPN的替代品。正如Jason所说,WireGuard是一个“实用且安全的工程解决方案”。值得注意的是,WireGuard最近才以稳定版本v1.0发布。
WireGuard的独特之处
在第3层的VPN提高了效率
WireGuard与其他VPN协议(如OpenVPN、IPSEC、L2TP和PPTP)最大的区别在于其运行的层级。大多数人熟悉的传统VPN协议在用户级别上使用TLS。而WireGuard在基于Linux的VPN服务器中运行在内核的网络堆栈中,这带来了许多好处。主要有两个:WireGuard更容易实现,同时数据包的真实性和可归属性得到了更好的保障。WireGuard支持IPv4和IPv6地址,并且能够将IPv4数据包封装在IPv6中,反之亦然。此外,WireGuard采用“加密密钥路由”,因此每个在VPN上允许的IP地址都有一个相关的公钥。WireGuard还提供了完美的前向保密性。
更少的代码使WireGuard更易于审计
WireGuard的设计理念导致其代码库中的代码行数远少于OpenVPN。具体来说,WireGuard的代码行数约为4,000行,而OpenVPN或IPSec则需要超过400,000行代码来充分利用。这意味着WireGuard的代码库出错的可能性更小。此外,WireGuard没有OpenVPN所期望的许多附加功能,例如密码协商,但这是设计选择。许多VPN用户习惯的附加功能可以在WireGuard之上添加。开源代码的目的是为了构建在其上。总之,WireGuard提供了一种更简单、更清晰和更现代的方式,通过虚拟专用隧道将计算机连接到虚拟专用网络。
更好的加密算法和版本控制降低了漏洞影响
WireGuard使用一系列新算法进行加密,而不是使用AES或SHA。具体算法包括:
- ChaCha20用于对称加密,使用Poly1305进行认证,采用RFC7539的AEAD结构
- Curve25519用于ECDH
- BLAKE2s用于哈希和密钥哈希,详见RFC7693
- SipHash24用于哈希表键
- HKDF用于密钥派生,详见RFC5869
WireGuard的一个优势是缺乏加密灵活性。加密灵活性是指协议在某个加密算法过时时能够更换的能力;然而,这种灵活性可能导致降级攻击或中间人攻击。WireGuard选择了加密版本控制——如果上述算法中的某一个过时,只需发布新版本来升级,从而消除漏洞的可能性。正如Jason在介绍WireGuard的论文中所说:
“它[WireGuard]故意缺乏密码和协议灵活性。如果发现基础原语中存在漏洞,所有端点都需要更新。正如SSL/TLS漏洞持续涌现所示,密码灵活性极大地增加了复杂性。”
如何设置使用Private Internet Access的WireGuard
当PIA首次发布WireGuard时,您需要加入PIA测试计划才能使用WireGuard。现在,WireGuard功能已不再处于测试阶段,所有PIA客户端和应用都可以使用这一新VPN协议。更新客户端或应用后,只需在Private Internet Access桌面客户端的设置窗口中导航至连接选项卡,或在Private Internet Access移动应用的VPN设置中切换协议,从OpenVPN切换至WireGuard。您会注意到可选择的VPN选项减少了。使用WireGuard而不是OpenVPN的简单性大大减少了选择上的困扰。WireGuard就是这么简单高效。
“WireGuard”是Jason A. Donenfeld的注册商标。