【问题标题】:Address insecure random number generation in PHP解决 PHP 中不安全的随机数生成问题
【发布时间】:2012-04-30 06:18:47
【问题描述】:

我们在各种 Drupal 模块上运行 Fortify 扫描,常见的严重/高结果是“不安全随机性”。它指出 rand() 函数无法承受加密攻击。

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

谢谢。

【问题讨论】:

标签: php security drupal


【解决方案1】:

这个问题的答案完全取决于您使用 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()。但是,如果您的应用程序/模块依赖于良好的随机数来保证其安全性,那么您确实需要利用操作系统源,如上所述。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 不是一个好主意。 mt_rand() 比 rand() 更有效,但不会产生非常随机的“随机”数......对于加密目的绝对不够随机(如果这是使用 OP 的随机数的目的)。阅读更多 -> crypto.stackexchange.com/questions/2231/….
    猜你喜欢
    • 2010-11-14
    • 2013-06-03
    • 1970-01-01
    • 2021-06-18
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多