我用/dev/urandom为我的程序生成随机数据.我了解到/dev/random可以是空的,因为与/dev/urandom不同,它在生成的字节不足时不使用SHA./dev/random使用"the kernel entropy pool".显然,它依赖于键盘计时、鼠标移动和IDE计时.

But how does this really work?
And wouldn't it be possible to "feed" the entropy pool making the /dev/random output predictable?

推荐答案

你所说的是准确的,是的,理论上可以把熵输入/dev/random,但是你需要控制很多内核的"噪声"源,这样它才有意义.你可以查看random.c的来源,看看/dev/random从哪里接收到噪音.基本上,如果你控制了大量的噪声源,那么你就可以猜测其他噪声源对熵池的贡献.

因为/dev/urandom是从/dev/random开始的Hash chain个种子,所以如果你知道种子,你实际上可以预测下一个数字.如果你对熵池有足够的控制权,那么从/dev/urandom的输出中,你可能能够猜出这个种子,这将使你能够预测/dev/urandom中接下来的所有数字,但前提是你让/dev/random精疲力竭,否则/dev/urandom将被重新设定种子.

话虽如此,我还没有看到任何人真的这么做,即使是在受控环境中.当然这不是保证,但我不担心.

所以我宁愿使用/dev/urandom并保证我的程序在等待熵时不会阻塞,而不是使用/dev/random并要求用户做一些愚蠢的事情,比如移动鼠标或敲击键盘.

我认为你应该读LWN的On entropy and randomness,希望它能平息你的忧虑:-).

如果你还担心,那就给自己打HRNG分.

Edit

我认为熵的概念通常很难理解.有一篇文章提供了关于Wikipedia的更多信息.但基本上,在这种情况下,你可以把熵理解为随机性.

所以我认为,你有一大袋彩色球,这个袋子中的熵越大,就越难预测从袋子中提取的下一种 colored颜色 .

在这种情况下,熵池只是一堆随机字节,其中一个字节不能从前面的字节或任何其他字节中派生.这意味着你有很高的熵.

Linux相关问答推荐

grep条件仅抓取某些文本

Linux-如何区分目录中名称相同但扩展名不同的所有文件

在具有不同文件类型的文件夹中编辑多个 xml 文件 - 使用预定顺序

如何更改文件的上次访问/修改/更改日期?

从 bash shell 等效项在fish shell 上设置 $ANDROID_SDK_ROOT

如何判断 Linux 机器是否支持 AVX/AVX2 指令?

如何增加 /proc/pid/cmdline 4096 字节限制?

如何在 Linux 中使用命令行将 PDF 转换为 JPG?

如何将整个文件夹从 Amazon EC2 Linux 实例复制到本地 Linux 机器?

kdevtmpfsi 使用整个 CPU

有没有办法在整个项目代码中的某个日期之后找出更改的文件?

加密/解密在两个不同的 openssl 版本之间不能很好地工作

bash 中的线程?

Linux内核列表中的WRITE_ONCE

给定一个 linux 用户名和密码,我如何测试它是否是有效帐户?

Windows 开发环境值得付出代价吗?

是否有git sed或类似功能?

以 qsub 开头的 shell 脚本的参数

如何从 shell 确定当前的 CPU 利用率?

将 BlueZ Stack 用作外设(广告商)