VPN WireGuard 的作者发布了 RDRAND 的新更新

WireGuard VPN 的作者Jason A. Donenfeld最近宣布了RDRAND 随机数生成器的全新更新实现,该生成器负责 Linux 内核中 /dev/random 和 /dev/urandom 设备的运行。

XNUMX 月底,Jason 被列为随机控制器维护者,现在已经发布了他的返工工作的第一个结果。

公告中提到,新实现的显著特点是熵混合操作改用 BLAKE2s 哈希函数而不是 SHA1

BLAKE2s 本身具有内部基于
RNG 已经用于扩展的 ChaCha 排列,所以
新奇,独创或惊人的CPU应该没有问题
行为,因为它基于已经在使用的东西。

此外,值得注意的是,此次更改还通过消除存在问题的 SHA1 算法并防止覆盖 RNG 初始化向量,提高了伪随机数生成器的安全性。由于 BLAKE2s 算法的性能优于 SHA1,因此使用它也对伪随机数生成器的性能产生了积极影响(在配备 Intel i7-11850H 处理器的系统上进行的测试表明,速度提高了 131%)。

另一个突出的优点是,将熵混合转移到 BLAKE2实现了所用算法的统一:BLAKE2 用于 ChaCha 密码,而 ChaCha 密码已经用于提取随机序列。

BLAKE2s 通常速度更快,安全性也更高,但它已被严重攻破。此外,当前的 RNG 结构并未按规定使用完整的 SHA1 函数,并且允许使用 RDRAND 的输出覆盖 IV ,即使 RDRAND 未配置为“受信任”,这也意味着可能存在恶意 IV 选项。

它的哈希函数长度很短,这意味着在将其反馈给混合器时只保留一半的秘密信息,只能提供 2^80 比特的前向保密性。换句话说,不仅哈希函数的选择过时了,而且它的使用效果也不理想

此外,对 getrandom 调用中使用的加密安全 CRNG 伪随机数生成器进行了增强。

文中还提到,改进的关键在于限制提取熵时对速度较慢的 RDRAND 生成器的调用,这可以将性能提高 3,7 倍。Jason 证明,只有在 CRNG 尚未完全初始化的情况下,调用 RDRAND 才有意义;但如果 CRNG 初始化完成,其值不会影响生成序列的质量,在这种情况下,可以不调用 RDRAND 来完成操作。

这种妥协旨在解决这两个问题,同时保持 一般结构和语义尽可能接近原文。
具体来说:

a) 不是用 RDRAND 覆盖哈希 IV,而是 我们放入记录在案的 BLAKE2 “盐”和“个人”字段,它们是 专为此类用途而创建。
b) 由于此函数将完整哈希的结果返回给 熵收集器,我们只返回一半的长度 哈希,就像以前一样。 这增加了 建立从 2^80 到 2^128 舒服多了。
c) 而不是仅仅使用原始的“sha1_transform”函数, 相反,我们使用完整且正确的 BLAKE2s 函数,并完成。

这些更改计划纳入内核 5.17,并且已经由开发人员 Ted Ts'o(负责维护随机驱动程序的第二人)、Greg Kroah-Hartman(负责维护 Linux 内核稳定性)和 Jean-Philippe Aumasson(BLAKE2/3 算法的作者)审查过。

最后,如果您有兴趣了解更多信息,可以点击以下链接查看详情


在 Google 中将其添加为首选来源