FreeBSD 代码库中添加了新的 VPN 实现 WireGuard。

FreeBSD 源代码树已更新为 VPN WireGuard 的新实现,该实现基于由核心 FreeBSD 和 WireGuard 开发团队联合制作的内核模块代码,并得到 VPN WireGuard 的作者 Jason A. Donenfeld 和 John H. Baldwin 的贡献),著名的 GDB 和 FreeBSD 开发者,2000 年代初在 FreeBSD 内核中实现了对 SMP 和 NUMA 的支持。 驱动程序被 FreeBSD (sys/dev/wg) 接受后,其开发和维护将在 FreeBSD 存储库中进行。

在代码被接受之前,在 FreeBSD 基金会的支持下对更改进行了全面审查,在此期间还分析了驱动程序与其余内核子系统的交互以及使用内核提供的加密原语的可能性被评估。

为了使用驱动程序所需的加密算法,扩展了 FreeBSD 内核加密子系统的 API,其中添加了一个工具,允许通过标准加密 API 使用 FreeBSD 不支持的算法,使用libsodium 库中的必要算法。 在驱动程序内置的算法中,只留下了计算 Blake2 哈希值的代码,因为 FreeBSD 中提供的该算法的实现与固定哈希值大小相关。

此外,在审核过程中还进行了代码优化,提高了多核CPU的负载分配效率(保证了报文加解密任务向CPU核分配的均匀平衡)。 因此,处理数据包时的开销接近于 Linux 驱动程序实现的开销。 该代码还提供了使用 ossl 驱动程序来加速加密操作的能力。

与之前将 WireGuard 集成到 FreeBSD 中的尝试不同,新的实现使用标准的 wg 实用程序,而不是 ifconfig 的修改版本,这使得统一 Linux 和 FreeBSD 上的配置成为可能。 wg 实用程序以及驱动程序包含在 FreeBSD 源代码中,这是通过更改 wg 代码的许可证来实现的(该代码现在可以在 MIT 和 GPL 许可证下使用)。 最后一次尝试将 WireGuard 纳入 FreeBSD 是在 2020 年,但以丑闻告终,由于质量低下、对缓冲区的粗心工作、使用存根而不是检查、实施不完整,已添加的代码被删除协议和违反 GPL 许可证。

回想一下,VPN WireGuard 是在现代加密方法的基础上实现的,提供非常高的性能,易于使用,没有复杂性,并且已经在许多处理大量流量的大型部署中证明了自己。 该项目自2015年开始开发,通过了所用加密方式的审计和形式化验证。 WireGuard 使用了加密密钥路由的概念,它涉及到为每个网络接口绑定私钥并使用公钥进行绑定。

交换公钥以建立连接类似于 SSH。 为了在不运行单独的用户空间守护进程的情况下协商密钥和连接,使用噪声协议框架的 Noise_IK 机制,类似于在 SSH 中维护 authorized_keys。 数据传输是通过封装在UDP数据包中进行的。 它支持更改 VPN 服务器的 IP 地址(漫游),而无需断开与自动客户端重新配置的连接。

加密使用由 Daniel J. Bernstein、Tanja Lange 和 Peter Schwabe 开发的 ChaCha20 流密码和 Poly1305 消息认证 (MAC) 算法。 ChaCha20 和 Poly1305 被定位为更快、更安全的 AES-256-CTR 和 HMAC 类似物,其软件实现允许在不涉及特殊硬件支持的情况下实现固定的执行时间。 为了生成共享密钥,使用了同样由 Daniel Bernstein 提出的 Curve25519 实现中的椭圆曲线 Diffie-Hellman 协议。 对于散列,使用 BLAKE2s 算法 (RFC7693)。

来源: opennet.ru

添加评论