解决 PHP 中不安全的随机数生成问题


Address insecure random number generation in PHP

我们在各种Drupal模块上运行强化扫描,一个常见的临界/高结果是"不安全的随机性"。它指出 rand() 函数无法承受加密攻击。

我的问题 - 这是一个严重的问题吗?如何在PHP中修复它?

谢谢。

这个问题的答案完全取决于你使用 rand() 调用的结果。

如果您将它们用于加密密钥之类的事情,其中工具的安全性取决于随机数的随机性,那么,是的,这是一个严重的问题。在这种情况下,您不应该调用 rand() 或 mt_rand(),因为两者都不会产生足够随机的"随机"数字,以依赖加密使用。你真的想利用你运行的平台的底层伪随机数生成器(PRNG) - Unix/Linux系统上的/dev/urandom或Windows系统上的crypto-api,因为这些已经被广泛研究并产生适合在密码系统中使用的真正随机数。PHP 并没有使访问这些随机源变得那么容易,但确实存在有关如何执行此操作的示例(如 -> http://www.php.net/manual/en/function.mt-rand.php#83655)。

如果您将随机用于其他事情,例如随机化首先向用户显示哪个选项,或者类似的东西,其中生成的数字没有以任何加密方式使用,那么您可以使用 rand() 或 mt_rand()。但是,如果您的应用程序/模块依赖于良好的随机数以确保其安全性,则确实需要利用操作系统源,如上所述。

mt_rand?