PHP的mt_rand如何播种?

Jan*_*nis 13 php security random mersenne-twister

我知道PHP mt_rand()不应该用于安全目的,因为它的结果不是加密强.然而,许多PHP代码就是这样做的,或者如果没有更好的随机源,则将其用作后备.

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

Jon*_*Jon 17

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

背后的RNG算法mt_randMersenne Twister.谈论它有多"糟糕"并没有多大意义,因为它清楚地记录了(不幸的是在PHP文档页面上),它完全不适合加密应用程序.如果您想要加密随机性,请使用文档化的加密强度生成器.

更新:您可能还想从crypto.SE 查看此问题.