【发布时间】:2015-03-07 17:05:02
【问题描述】:
我想知道为什么这个函数的名字上有一个“伪”。我可以相信这些字节真的是随机的吗?我在php的手册中没有找到任何解释。
openssl_random_pseudo_bytes
【问题讨论】:
-
几乎不可能有真正的随机性。甚至硬件随机生成器也不完美。
标签: php random cryptography
我想知道为什么这个函数的名字上有一个“伪”。我可以相信这些字节真的是随机的吗?我在php的手册中没有找到任何解释。
openssl_random_pseudo_bytes
【问题讨论】:
标签: php random cryptography
Pseudo Random Number Generator (PRNG) 中的“Pseudo”一词有两种解释。这可能意味着结果可能不是完全随机的。这也可能意味着随机数生成器本身是确定性的。这就是 OpenSSL 意义上的伪。
良好的确定性随机位生成器 (DRBG) - 只是 PRNG 的另一个术语 - 具有非常长的周期时间。这意味着只要给定的种子数据中有足够的熵,输出就应该与随机无法区分——在它开始重复之前需要很长时间。大多数 DRBG 的库/系统在初始化时都会被播种,OpenSSL 也是如此。
“真正的随机”通常是指直接从熵源中检索到的随机值。通常这些来源确实提供了足够的熵,但这并不一定意味着熵分布良好。因此,使用真正随机源的熵来播种 DRBG 通常会更好更快。
现在,随机源通常仅对操作系统可用(因为它们通常与低级 I/O 操作相关联)。因此,随机种子首先用于操作系统中的随机池(例如/dev/random),而随机池又可以用于播种 DRBG。这些池通常已经白化以创建更好的分布。
所以你会得到:熵 -> os entropy pool -> openssl random_pseudo_bytes -> PHP wrapper -> 你的应用程序。
在嵌入式系统上,您可能需要注意以下警告:
它还指示是否使用加密强算法来生成伪随机字节,并通过可选的
crypto_strong参数执行此操作。FALSE很少见,但某些系统可能已损坏或陈旧。
否则它可能是最可靠的随机数来源。
【讨论】: