如何禁用Linux熵池源码

我如何禁用熵源?

这里是我想要做的一点背景。 我正在build立一个小的RNG设备,通过USB与我的电脑通话。 我希望它成为熵的唯一来源。 我将使用rngd来添加我的设备作为熵的来源。

快速回答是“你不要”。

永远不要去除熵源。 随机数发生器的设计者操纵了它,所以任何新的随机比特都与当前状态混合在一起。

有多个熵源不会削弱随机数发生器的输出,只能加强它。

我能想到去除熵源的唯一原因是它吸收你无法负担的CPU或挂钟时间。 我觉得这是不太可能的,但如果是这样的话,那么你唯一的选择是内核黑客。 就内核而言,这应该是相当简单的。 只需注释掉所有对内核源代码中的add _ * _ randomness()函数的调用即可(函数本身可在drivers / char / random.c中找到)。 你可能只是注释掉了这些函数的内容,但是在这种情况下你试图节省时间,额外的函数调用所花费的时间太少。

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

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

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

无论如何, frandom为内核模块提供了一个完整的tarball ,所以你可以学习如何在你的USB设备上构建你自己的模块。 也许,你甚至可以用replace / displace / 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”代表“fast”,“E”代表“economic”:/ dev / erandom完全不使用内核熵。
  • 它有多快?
    • 取决于你的电脑和内核版本。 测试始终显示比/ dev / urandom快10-50倍。
  • 它会在我的内核上工作吗?
    • 如果它大于2.6,它很可能会
  • 它是稳定的吗?
    • 自从2003年秋季发布最初版本以来,至少有100人在i686和x86_64系统上尝试过(可能还有更多)。 成功的测试报告已经到达,而且零投诉。 所以是的,这非常稳定。 至于随机性,也没有任何投诉。
  • 随机数据是如何产生的?
    • frandom基于RC4加密算法,该算法被认为是安全的,并被多个应用程序(包括SSL)使用。 我们从RC4的工作原理开始:它需要一个密钥,并生成一个伪随机字节流。 实际的加密是这个字节流和明文数据流之间的XOR运算。
    • 现在来看:每次打开/ dev / frandom,一个不同的伪随机流通过使用一个2048位的密钥来初始化,这个密钥是通过做一些等同于从/ dev / urandom中读取密钥的方式来获取的。 伪随机流是从/ dev / frandom读取的。
    • frandom只是一个随机密钥的RC4,最后没有XOR。
  • frandom会产生好的随机数吗?
    • 由于它的起源,随机数不能太差。 如果是的话,RC4将不值一提。 至于测试:从/ dev / frandom直接“复制”的数据使用由George Marsaglia开发的“Diehard”电池测试进行测试。 所有测试都通过了,这被认为是一个很好的指示。
  • 可以使用frandom创建一次性密码(密码学)?
    • frandom从来没有用于加密目的,也没有任何特别的想法给予攻击。 但是攻击模块的空间很小,而且由于模块是基于RC4的,所以我们有如下的事实:使用/ dev / frandom中的数据作为一次性pad相当于使用RC4算法和2048-位密钥,从/ dev / urandom读取。

底线:为了加密的目的,使用frandom可能是可以的。 但是不要。 这不是打算。

附加说明,太大以至于不能发表评论

根据它的设置,rngd可以通过给它提供太多的数据来支配内核的熵池,所以经常会忽略或丢失其他熵源。 除非您最终信任rngd的随机数据源,否则不要这样做。