2012-04-18 65 views
4

我们正在运行Fortify的扫描各种Drupal模块,以及一个共同的关键/高结果是“不安全的随机性”。它指出rand()函数不能承受加密攻击。地址不安全的随机数生成的PHP

我的问题 - 这是一个严重的问题?如何解决它在PHP中?

谢谢。

+0

类似http://stackoverflow.com/questions/1182584/secure-random-number-generation-in-php – TheOx 2012-04-18 19:07:23

回答

2

的这个问题的答案完全取决于你使用从兰特的结果是什么()调用。

如果你使用他们喜欢的事情加密密钥,该工具的安全性取决于你的随机数的随机性,那么,是的,这是一个严重的问题。在这种情况下,您不应该调用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()离开。但是,如果您的应用程序/模块的安全性依赖于良好的随机数,那么您确实需要利用OS源,如上所述。

0
+0

不是一个好主意。 mt_rand()比rand()更有效,但不会产生非常随机的“随机”数字......绝对不是足够随机的密码用途(如果这是OP的随机数被用于的话)。阅读更多 - > http://crypto.stackexchange.com/questions/2231/cryptographic-security-of-php-mt-rand-function-using-mersenne-twister-algo。 – jeffsix 2012-04-18 19:29:34