3

如何禁用熵源?

这是我正在尝试做的一些背景。我正在构建一个通过 USB 与我的 PC 通信的小型 RNG 设备。我希望它成为使用的唯一熵源。我将使用rngd将我的设备添加为熵源。

4

4 回答 4

4

快速回答是“你没有”。

永远不要删除熵的来源。随机数生成器的设计者对其进行了操纵,因此任何新的随机位都会与当前状态混合。

拥有多个熵源永远不会削弱随机数生成器的输出,只会加强它。

我能想到删除熵源的唯一原因是它会消耗 CPU 或挂钟时间,这是您无法承受的。我觉得这不太可能,但如果是这种情况,那么你唯一的选择就是内核黑客。就破解内核而言,这应该相当简单。只需注释掉整个内核源代码中对 add_*_randomness() 函数的所有调用(函数本身可以在 drivers/char/random.c 中找到)。您可以只注释掉函数的内容,但在这种情况下您试图节省时间,而额外的函数调用所花费的微小时间可能太多了。

于 2011-09-09T13:54:36.373 回答
1

一种解决方案是在虚拟机中运行单独的 linux 实例。

于 2011-09-09T14:25:59.497 回答
1

附加说明,太大而无法评论:

根据其设置,rngd 可以控制内核的熵池,通过向其提供如此多的数据,如此频繁,以至于其他熵源大多被忽略或丢失。除非您最终信任 rngd 的随机数据来源,否则不要这样做。

于 2013-02-11T05:47:54.017 回答
0

我怀疑你可能想要一个快速的随机生成器。

编辑 我应该更好地阅读这个问题

无论如何,frandom它附带了一个完整的内核模块压缩包,因此您可以学习如何围绕您的 USB 设备构建自己的模块。也许,你甚至可以让它替换/替换/dev/urandom,这样任意应用程序就可以使用它而不是/dev/urandom(当然,如果有足够的权限,你可以重命名设备节点并“愚弄”大多数应用程序)。


您可以查看http://billauer.co.il/frandom.html,它实现了这一点。

  • /dev/urandom 还不够吗?
    • 自 1996 年(据我所知)以来,关于更快内核随机数生成器的必要性的讨论起起落落。我的观点是 /dev/frandom 与 /dev/zero 一样必要,它只会创建一个零流。常见的相反意见通常说:在用户空间做。
  • /dev/frandom 和 /dev/erandom 有什么区别?
    • 一开始我写了/dev/frandom。然后事实证明,这个套件的优点之一是它节省了内核熵。但是 /dev/frandom 每次打开设备文件时都会消耗 256 字节的内核随机数据(反过来,这可能会消耗一些熵),以便为随机生成器提供种子。所以我制作了 /dev/erandom,它使用内部随机生成器进行播种。frandom 中的“F”代表“快速”,“E”代表“经济”:/dev/erandom 根本不使用内核熵。
  • 它有多快?
    • 取决于您的计算机和内核版本。测试始终显示比 /dev/urandom 快 10-50 倍。
  • 它会在我的内核上工作吗?
    • 它很可能会,如果它 > 2.6
  • 稳定吗?
    • 自 2003 年秋季发布初始版本以来,至少有 100 人(可能更多)在 i686 和 x86_64 系统上尝试过它。成功的检测报告已到,零投诉。所以是的,它非常稳定。至于随机性,也没有任何抱怨。
  • 随机数据是如何产生的?
    • frandom 基于 RC4 加密算法,该算法被认为是安全的,并被包括 SSL 在内的多个应用程序使用。让我们从 RC4 的工作原理开始:它需要一个密钥,并生成一个伪随机字节流。实际的加密是这个字节流和明文数据流之间的异或运算。
    • 现在回到 frandom:每次打开 /dev/frandom 时,都会使用 2048 位密钥初始化一个独特的伪随机流,该密钥通过执行与从 /dev/urandom 读取密钥等效的操作来选择。伪随机流是您从 /dev/frandom 读取的内容。
    • frandom 只是带有随机密钥的 RC4,只是最后没有 XOR。
  • frandom 会生成好的随机数吗?
    • 由于其起源,随机数不会太糟糕。如果是这样,RC4 将一文不值。至于测试:从 /dev/frandom 直接“复制”的数据使用 George Marsaglia 开发的“Diehard”测试组进行了测试。所有测试都通过了,这被认为是一个很好的迹象。
  • 可以使用 frandom 来创建一次性密码本(密码学)吗?
    • frandom 从未用于加密目的,也没有对攻击进行任何特殊考虑。但是攻击模块的空间很小,而且由于模块是基于RC4的,所以我们有以下事实:使用/dev/frandom中的数据作为一次性填充相当于使用带有2048-的RC4算法位键,从 /dev/urandom 读取。

底线:将 frandom 用于加密目的可能是可以的。但是不要。这不是本意。

于 2011-09-09T14:23:11.040 回答