0

我认为,为了随机选择播放器中的下一首曲目或浏览器中的下一页,可以将时间用作“自然现象”,例如体面的 RPNG 可以在没有程序请求的情况下连续获取下一个随机数(对于例如在一个线程中每隔几毫秒或更频繁地发生事件)并且当时间到来时(基于用户决定),选择自然会受到此用户延迟的影响。

这种方法是否足够好,如何进行测试?手动测试的问题是我不能在现实世界中等待那么长时间来保存足够的随机数来将它们提供给一些测试程序。任何人为的加速这一过程的尝试都会使该方法本身无效。

谢谢

4

3 回答 3

2

一个好的随机数生成器确实不需要改进,即使需要改进,也不清楚用户输入时间是否会有所帮助。

用户能否检测到 LCG 选择的曲目中的模式?无论您的平台是什么,它的内置random()功能都可能足够好(也就是说,它对用户来说是完全随机的)。

但是,如果您仍然担心,请使用加密质量的 RNG,使用来自系统上专用随机源的数据作为种子。如今,这些系统 RNG 中的许多都使用通过硬件中的量子事件生成的真正随机位。但是,它们产生比特的速度可能很慢,因此最好将它们用作快速算法 PRNG 的种子。

现在,如果您不相信这些方法足够好,那么您应该非常怀疑用户输入的时间是否是一个好的来源。考虑到使用的词汇量有限以及在有限的一组单词中往往出现的模式,用户按下的键是高度可预测的。字母序列中的这种可预测性导致按键之间时间的高度可预测性。

我知道很多安全程序在密钥生成过程中都使用了这种技术。我不认为它是纯蛇油,但它可能是安抚用户的安慰剂。一个好的产品将取决于系统RNG。

于 2011-01-30T16:29:47.860 回答
1

获取您描述的时间信息确实可以为 PRNG 添加熵。但是,根据您对预期应用程序的描述,我认为您不需要它。对于“随机选择,例如播放器中的下一首曲目或浏览器中的下一页”,一个简单的、未经修改的 PRNG 就可以了。对于诸如随机数等安全应用程序来说,它更为重要。

无论如何,您应该阅读有关 PRNG 熵源的信息。

于 2011-01-30T16:37:03.770 回答
0

我不会使用用户延迟来改进 PRNG,主要是因为它们非常有规律:您以大致相同的速度键入,并且测量一次点击和另一次点击之间的延迟需要太长时间(假设正常使用)。我宁愿使用其他用户触发的事件:按下的键、每次点击之间的距离、鼠标在给定时刻的位置。

于 2012-09-06T22:41:30.187 回答