请注意,池中的熵数量不一定必须是整数。这应该主要处理你的主要因素 - 其他问题。
即使您最终使用的是需要整数估计的实现,您也需要相当多的骰子来生成加密密钥。所以你可以只是要求他们一束。如果用户给出了10个d6卷的结果,并且你估计熵为25位,那么每个掷骰子只丢失0.08位。记住要圆下来;-)
顺便说一句,我会认为要求用户的TRNG数据,而不是从硬件来源/ dev /随机做,是一个有趣的玩具,而不是一个改进。专家很难生成随机数字 - 你不想让一般用户处于他们自己的业余主义的控制之下。 “随机数的产生太重要了,以至于没有机会”--Robert Coveyou。
另一方面,BSD的作者认为,由于对PC硬件实际来源的熵估计并不是很好理解(作为一个物理问题,而不是数学问题),所以使用PRNG实际上并不是坏的选项,只要根据Schneier/Kelsey/Ferguson的Yarrow设计进行良好的重新设计。你的骰子想法至少比典型的熵源/ dev/random更有优势,只要用户可以信任找到合适的骰子并正确地滚动它们,就可以自信地将熵放在下限。它有一个缺点,那就是有一副双筒望远镜和/或在他们的键盘上窃听手段的观察者(例如,通过其E/M发射)可以打破整个方案,所以真的取决于你的威胁模型。
/dev/random从用户交互(鼠标/键盘)和磁盘访问速度中获取一些输入,这些都自然影响现象。没有这些输入,/ dev/random会缓慢输出(等待真正的随机数据)! – joeytwiddle 2009-05-03 09:31:59
/dev/random从用户交互(鼠标/键盘)和磁盘访问速度中获取一些输入,这两种情况都是自然影响的现象。没有这些输入,/ dev/random会缓慢输出(等待真正的随机数据)! – joeytwiddle 2009-05-03 09:32:29
@joey:但是IIRC根可以向池中贡献熵并提供它自己的估计值。所以一个合适的setuid程序可以接受来自可信用户的骰子卷,并将它们送入/ dev/random,然后输出与用户掷骰子一样快(即仍然非常缓慢......) – 2009-05-03 10:08:28