openssl_random_pseudo_bytes真的是随机的吗?

时间:2015-03-07 17:05:03

标签: php random cryptography

我想知道为什么这个函数有一个"伪"就它的名字而言。我可以相信那些字节真的是随机的吗?我在php的手册中没有找到任何解释。

openssl_random_pseudo_bytes

1 个答案:

答案 0 :(得分:2)

这个词有两种解释" Pseudo"在伪随机数发生器(PRNG)中。它可能意味着结果可能不是完全随机的。它也可能意味着随机数生成器本身是确定性。这就是OpenSSL意义上的伪意义。

良好的确定性随机比特生成器(DRBG) - PRNG的另一个术语 - 具有非常高的周期时间。这意味着只要给定的种子数据中有足够的熵,输出就无法与随机区分开来 - 它会在它开始重复之前永远消失。大多数DRBG的库/系统在初始化时都会播种,对于OpenSSL也是如此。

经常"真随机"用于直接从熵源检索的随机值。通常这些来源确实提供了足够的熵,但这并不一定意味着熵分布良好。因此,使用真随机源的熵来播种DRBG通常会更好,更快。

现在,随机源通常仅供操作系统使用(因为它们通常与低级I / O操作相关联)。因此,随机种子首先用于OS中的随机池(例如/dev/random),其又可以用于播种DRBG。这些池通常已经变白,以创建更好的分发。

所以你会得到:entropy - > os entropy pool - > openssl random_pseudo_bytes - > PHP包装器 - >你的申请。

在嵌入式系统上,您可能需要注意以下警告:

  

它还指示是否使用加密强算法来生成伪随机字节,并通过可选的crypto_strong参数执行此操作。它很少见FALSE,但有些系统可能已损坏或过时。

否则它可能是随机数最可靠的来源。