制作一个真正的随机数生成器


Making a true random number generator?

我正在做一个小的web应用程序,需要随机化的东西。只是一个小例子,它会有什么:返回一个和10之间的随机数给用户。

我计划使用Javascript和jQuery(计算器本身)。

我的问题是:我怎样才能使它的函数真正随机而不是伪随机?PHP函数是否比Javascript函数更随机?

对于这个问题,假设我想要的是X和y之间的一个真随机数

您调用的函数都不是"真正随机的"。它们都是prng;事实上,大多数prng都很好,如果它们不适合你的申请,我会感到惊讶。此外,虽然一些prng因其周期短而臭名昭著(我想到了Java的Random),但我所知道的每一种现代语言,包括JavaScript、PHP和(及其加密包)Java,都有非常好的prng。

收集"更多随机"数据的最佳方法是从外部随机源获取数据。一种可能性是要求用户在窗口中移动鼠标一段时间,定期收集鼠标坐标。一些军事、银行和其他高安全性系统使用热噪声传感器等硬件来获取尽可能接近随机的数据;然而,这样的硬件支持将无法用于web应用程序。

请注意,像使用系统时钟这样的黑客并不比prng更好;大多数prng用这些数据的组合来初始化它们的种子。

你不懂黑客帝国电影。,)一个函数并不比另一种语言中的函数"更随机"。所有函数都是相同的伪随机。根据定义,"伪"意味着计算机不能凭空抽取随机数。它就是不能。计算机严格地、基于规则地、准确地计算。在系统中没有随机性。尽管电脑被认为很强大,但随机性是它根本无法做到的一件事(比如做咖啡)。

对于真正的随机性,您需要一个外部的、自然的来源。比如测量原子衰变,或者一些不可预测的,真正随机的事情。其他的都是伪随机性,质量可能参差不齐。

好的prng试图在熵池中收集"外部干扰";例如,Linux的/dev/random考虑到系统驱动程序的"噪声",这可能是基于"随机"数据包击中以太网端口,或用户的鼠标移动。如何真正随机是有争议的,但非常非常难以预测,至少在大多数情况下是适当的随机。

我不认为有任何方法可以完全从程序中去除随机性的确定性方面。你可以做所有你想要的最小化、缓和和模糊你用来"从帽子里取数字"的过程,但你永远不能真正使它完全随机。

你可以用足够的细节设计出一个过程,使它实际上是随机的,但真正的随机可能是不可能的。

虽然你不能在php中实现真正的随机代码,但你可以使用random.org API。您可以通过php中的curl或javascript中的ajax进行连接。据我所知,他们用大气噪声作为随机种子。

不可能在计算机上生成真正的随机变量。但是,您可以改进标准生成器。假设你有两个基本的生成器。您将创建一个表,并用第一个生成器的值填充该表。然后,如果您想获得一个数字,第二个程序将生成一个索引,并从表中返回相应的值。然后这个值被替换为新的值…我忘了这个发电机是怎么叫的…希望能有所帮助。附言:对不起,我的英文不好。

我的建议是通过加密算法加密本地时间和日期来生成二进制随机字符串。在这种情况下,尝试收集所有可能的"随机"数据来源,并将它们加载为输入消息和输入键。

从上面的答案中可以看出,随机数据的使用和要求是很重要的。如果应用程序很难或不可能提前猜测一个数字的值,那么这个数字就是"随机的"。请注意,对于某些应用程序,相同的数字源可能被认为是随机的,而在其他应用程序中则不是随机的。显然,如果您需要高质量的随机数来满足苛刻的应用程序,那么您将遇到严重的问题。

TRNG98真随机数