为了某些目的,能够绕过任何类型的算法生成的随机数以支持自然输入 - 比如骰子滚动,这是很好的。例如,加密密钥生成让我觉得需要的随机数据很少,并且数据真正随机的要求足够高,这可能是一个可行且理想的事情。
所以,在我去弄脏之前,我想知道的是:是否存在直接从随机数字输入构建熵池的任何软件?注意,简单地将基数从基数r转换为基数2是不够的。例如,因为3和2是相对素数,所以在保持原始输入中的最大熵的同时将基数-3(或基数-6)数字转换为二进制数字并不完全是直接的。
答案 0 :(得分:4)
设备/dev/random
在Linux上完成此操作 - 也许值得查看源代码?
修改强>
正如joeytwiddle所说,如果没有足够的随机性,/dev/random
将阻止,等待熵通过监视外部设备(例如鼠标,磁盘驱动器)来“建立”。这可能是也可能不是你想要的。如果您不想等待并且对可能较低质量的随机性感到满意,请使用/dev/urandom
- 它是一个非阻塞伪随机数生成器,只要/dev/random
可用,就会从其中注入随机数,使其比普通的确定性PRNG更随机。 (有关详细信息,请参阅man /dev/urandom
。)
答案 1 :(得分:2)
这paper提出了各种方法,包括UN * X和Windows的实施思路。
答案 2 :(得分:2)
我不确定你要求的是什么。 “熵池”只是“一些随机数字”的一个词,所以你当然可以使用骰子卷;只需将它们用作具有所需特征的伪随机数生成器即可。
答案 3 :(得分:0)
请注意,池中的熵数不一定必须是整数。这应该主要处理你的主要因素 - 除了2以外的问题。
即使您最终使用需要整数估计的实现,您也需要相当多的骰子来生成加密密钥。所以你可以直接要求它们。如果用户给出了10 d6卷的结果,并且您将熵估计为25位,则每个骰子卷只丢失0.08位。记得向下舍入; - )
不过,我会问用户提供TRNG数据,而不是像/ dev / random那样从硬件资源中提取数据,这是一个有趣的玩具而不是改进。专家们很难产生随机数 - 你不想让一般用户受到他们自己的业余爱好的支配。 “随机数字的产生太重要了,不值得冒险” - 罗伯特科维欧。另一方面,BSD的作者认为,由于PC硬件上实际来源的熵估计并不是很清楚(物理问题,而不是数学问题),使用PRNG实际上并不是那么糟糕根据Schneier / Kelsey / Ferguson的Yarrow设计,它是一个良好的重新选择。你的骰子想法至少比/ dev / random的典型熵源更有优势,只要用户可以信任找到合适的骰子并正确滚动它们,你就可以放心地设置熵的下限。它的缺点是观察者用一副好双筒望远镜和/或在键盘上窃听的方式(例如通过其E / M排放)可能会破坏整个方案,所以这一切都取决于你的威胁模型。