你所说的是准确的,是的,理论上可以把熵输入/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颜色 .
在这种情况下,熵池只是一堆随机字节,其中一个字节不能从前面的字节或任何其他字节中派生.这意味着你有很高的熵.