【问题标题】:How to disable a Linux entropy pool source如何禁用 Linux 熵池源
【发布时间】:2011-09-09 12:20:02
【问题描述】:

如何禁用熵源?

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

【问题讨论】:

  • 是否可以选择重新编译内核?

标签: linux entropy


【解决方案1】:

快速回答是“你不知道”。

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

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

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

【讨论】:

  • Sheena 可能正在创建一个后门,因此只有她可以破解使用这些随机数的加密/MAC/签名/...,但没有其他人可以破解。为此,可能有必要避免其他熵源。
  • 我并不是很喜欢后门,我只是想让事情尽可能安全。如果其他人可以弄乱池,那么我不太确定他们偏向 dev/random 的输出有多容易……据说熵池的混合是一个非常混乱的过程,但我不太确定它需要什么
  • 好的,所以它做了一个杂乱无章的事情。看起来够了
【解决方案2】:

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

【讨论】:

  • 那会消除熵的其他来源吗?
  • 不确定是否全部,但有很多。
  • 实际上是哪些?产生随机性的设备不只是虚拟化存在吗?
  • 你可以拥有没有键盘、鼠标、网络驱动器等的系统。然后通过控制台运行你需要的程序。
【解决方案3】:

补充说明,太大了,无法评论:

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

【讨论】:

    【解决方案4】:

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

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

    无论如何,frandom comes with a complete tarball 用于内核模块,这样您就可以学习如何围绕您的 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,只是最后没有异或。
    • frandom 会生成好的随机数吗?
      • 由于其起源,随机数不会太糟糕。如果是这样,RC4 将一文不值。 至于测试:从 /dev/frandom 直接“复制”的数据使用 George Marsaglia 开发的“Diehard”测试组进行了测试。所有测试都通过了,这被认为是一个很好的迹象。
    • 可以使用 frandom 来创建一次性密码本(密码学)吗?
      • frandom 从未用于加密目的,也没有对攻击进行任何特殊考虑。但是攻击模块的空间很小,由于模块是基于RC4的,我们有以下事实:使用来自/dev/frandom的数据作为一次性填充相当于使用带有2048-的RC4算法位键,从 /dev/urandom 读取。

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

    【讨论】:

    • 已编辑:现在解决问题... :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 2016-06-26
    • 1970-01-01
    相关资源
    最近更新 更多