用普通英语解释有关熵的信息


28

如果我在Ubuntu中运行此命令

sudo cat /proc/sys/kernel/random/entropy_avail

它返回一个数字,指示内核可以使用多少“熵”,但这仅是我所知道的。熵以什么单位度量?它是干什么用的?有人告诉我,如果这个数字是“低”,那就是“不好”。“低”有多低?如果发生,会发生什么“不良”?它的适用范围是多少?如何确定?

Answers:


22

您的系统通过关注不同事件来收集一些“真实”随机数:网络活动,硬件随机数生成器(如果可用;例如VIA处理器通常具有“真实”随机数生成器)等等。如果将这些内容馈送到内核熵池中,则由/ dev / random使用。需要某种极端安全性的应用程序倾向于使用/ dev / random作为其熵源,或者换句话说,就是随机性源。

如果/ dev / random耗尽了可用的熵,它将无法提供更多的随机性,并且等待随机性的应用程序将停滞不前,直到有更多的随机数据可用为止。我在职业生涯中看到的示例是Cyrus IMAP守护程序希望使用/ dev / random来实现随机性,而其POP会话希望从/ dev / random中生成APOP连接中的随机字符串。在繁忙的环境中,登录尝试次数多于用于馈送/ dev / random的流量->一切都停滞了。在那种情况下,我安装了rng-tools并激活了它的rngd -将半随机数从/ dev / urandom铲除到/ dev / random,以防/ dev / random超出“真实”熵的范围。


19

如果要更简单地了解基本问题:某些应用程序(例如加密)需要随机数。您可以使用算法生成随机数-但是,尽管它们在某种意义上是随机的,但在另一种意义上却是完全可以预测的。例如,如果我为您提供数字58209749445923023078164062862089986280348253253421170679,它们看起来非常随机。但是,如果您意识到它们实际上是PI的数字,那么您将知道下一个将是8。

对于某些应用程序,这是可以的,但是对于其他应用程序(尤其是与安全性相关的应用程序),人们希望拥有真正不可预测的随机性-不能由算法(即程序)生成,因为根据定义,这是可预测的。这是一个问题,因为您的计算机本质上一个程序,那么它怎么可能获得真正的随机数?答案是通过测量来自外部世界的真实随机事件-例如按键之间的间隙,并使用这些间隙将真实随机性注入本来可以预测的随机数生成器中。“熵池”可以被认为是这种随机性的存储,它是由击键(或正在使用的任何东西)建立的,并由随机数的产生消耗掉的。


2
很好的解释...
pradipta

但是PI是不合理的,它将包括每个序列,包括上述序列,后跟9(而不是8)。
Ajay Brahmakshatriya

9

熵是“随机性”的技术术语。计算机实际上并不会产生熵,而是通过查看诸如硬盘转速变化之类的东西(由于摩擦等原因很难预测的物理现象)来收集信息。当计算机想要产生伪随机数据时,它将可以通过测量鼠标点击,硬盘驱动器旋转变化等来播种具有真正熵的数学公式。大致来说,这entropy_avail是当前可从中读取的位的度量/dev/random

除非计算机具有诸如噪声二极管之类的凉爽硬件,否则从计算机读取环境中的熵将花费一些时间。

如果你有熵可用的4096位,你的猫/dev/random,你可以期望能够在文件块前阅读512个字节熵(4096位),同时等待更多的熵。

例如,如果您“ cat /dev/random”,您的熵将缩小为零。最初,您将获得512字节的随机垃圾,但是它将停止,并且您会逐渐看到更多的随机数据滴流槽。

但是,这不是人们应该如何操作的方式/dev/random。通常,开发人员将读取少量数据(如128位),并使用它来播种某种PRNG算法。礼貌的是,不要阅读/dev/random比您需要的更多的熵,因为建立起来需要很长时间,因此被认为是有价值的。因此,如果您cat像上面那样不小心地处理文件而耗尽了文件,则会导致其他需要读取的应用程序/dev/random阻塞。在一个正在运行的系统上,我们注意到许多加密功能正在停滞。我们发现一个cron作业正在调用一个python脚本,该脚本一直在初始化ramdom.random()每几秒钟运行一次。为了解决这个问题,我们重写了python脚本,使其作为仅初始化一次的守护进程运行,并且cron作业将通过XMLRPC读取数据,因此它将不会/dev/random在启动时继续读取数据。


1
“为解决此问题,我们重写了python脚本,使其作为仅初始化一次的守护进程运行,而cron作业将通过XMLRPC读取数据,从而在启动时不会继续从/ dev / random中读取数据。” ---除了我引用的那一部分很难评估,因为不清楚您的脚本是否真的需要随机性,您的答案非常明确。
Craig Hicks

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.