我认为,例如为播放器中的下一首曲目或浏览器中的下一页做出随机选择,可以将时间用作“自然现象”,例如体面的RPNG可以连续获得下一个随机数而无需程序请求(例如,每隔几毫秒在一个线程中或更频繁地发生事件)并且当时间到来时(基于用户决定),该选择将自然地受到该用户延迟的影响。
这种方法是否足够好,如何进行测试?手动测试的问题是我不能在现实世界中等待那么长时间来保存足够的随机数以将它们提供给某些测试程序。任何加速此操作的人工尝试都会使方法本身无效。
由于
答案 0 :(得分:2)
一个好的随机数发生器确实不需要改进,即使它确实如此,也不清楚用户输入时序是否会有所帮助。
用户是否可以检测到LCG选择的曲目中的模式?无论您的平台是什么,它的内置random()
功能都可能足够好(也就是说,它会对用户显示完全随机)。
但是,如果您仍然担心,请使用加密质量RNG,其中包含来自系统上专用随机源的数据。如今,许多这些系统RNG使用通过硬件中的量子事件生成的真正随机比特。但是,它们生成位的速度很慢,因此最好将它们用作快速算法PRNG的种子。
现在,如果你不相信这些方法已经足够好了,你应该非常怀疑用户输入的时机是一个很好的来源。由于使用的词汇量有限以及往往出现在有限的单词集中的模式,用户按下的键是高度可预测的。字母序列中的这种可预测性导致关键按压之间的定时的高度可预测性。
我知道很多安全程序在密钥生成过程中都使用这种技术。我不认为它是纯蛇油,但它可能是一个安慰剂来安抚用户。好的产品将取决于系统RNG。
答案 1 :(得分:1)
获取您描述的时间信息确实可以为PRNG添加熵。但是,根据您对预期应用程序的描述,我认为您不需要它。对于“随机选择,例如播放器中的下一首曲目或浏览器中的下一页”,一个简单的,未经修改的PRNG就可以了。对于nonce等安全应用程序来说,这一点非常重要。
无论如何,你应该阅读有关PRNG熵源的信息。
答案 2 :(得分:0)
我不会因为用户延迟而改善PRNG,主要是因为它们非常规则:您以大致相同的速度键入,并且测量点击与另一个之间的延迟(假设正常使用)需要很长时间。我宁愿使用其他用户触发的事件:按下键,每次点击之间的距离,鼠标在给定时刻的位置。