14

我知道 PHPmt_rand()不应该用于安全目的,因为它的结果在密码学上并不强。然而,很多 PHP 代码就是这样做的,或者在没有更好的随机性来源时将其用作后备。

那么它有多糟糕呢?mt_rand播种使用哪些随机性来源?mt_rand加密应用程序是否存在其他安全问题?

4

1 回答 1

18

在 PHP 5.4 中, ifmt_rand在第一次使用时自动播种(PHP 源代码)。种子值是当前时间戳、PHP 进程 PID 和 PHP 内部LCG生成的值的函数。我没有检查以前版本的 PHP 的源代码,但文档暗示这个种子算法从 PHP 5.2.1 开始就已经在使用了。

后面的 RNG 算法mt_randMersenne Twister。谈论“有多糟糕”并没有真正的意义,因为它已明确记录(不幸的是,不是在 PHP 文档页面上)它完全不适合加密应用程序。如果您想要加密强度随机性,请使用记录在案的加密强度生成器。

更新:您可能还想从 crypto.SE中查看这个问题。

于 2012-07-06T08:44:43.910 回答