2012-04-18 75 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