小编H M*_*H M的帖子

在Web应用程序中收集熵以创建(更多)安全随机数

经过几天的研究和讨论,我想出了这种方法来收集访客的熵(你可以在这里看到我的研究历史)

当用户访问我运行此代码时:

$entropy=sha1(microtime().$pepper.$_SERVER['REMOTE_ADDR'].$_SERVER['REMOTE_PORT'].
$_SERVER['HTTP_USER_AGENT'].serialize($_POST).serialize($_GET).serialize($_COOKIE)); 
Run Code Online (Sandbox Code Playgroud)

注意:pepper是手工设置的每个站点/设置随机字符串.

然后我执行以下(我的)SQL查询:

$query="update `crypto` set `value`=sha1(concat(`value`, '$entropy')) where name='entropy'";
Run Code Online (Sandbox Code Playgroud)

这意味着我们将访客请求的熵与已经收集的其他人的熵相结合.

就这样.

那么当我们想要生成随机数时,我们将收集的熵与输出结合起来:

$query="select `value` from `crypto` where `name`='entropy'";
//...
extract(unpack('Nrandom', pack('H*', sha1(mt_rand(0, 0x7FFFFFFF).$entropy.microtime())))); 
Run Code Online (Sandbox Code Playgroud)

注意:最后一行是phpseclib的crypt_rand函数的修改版本的一部分.

请告诉我您对该方案的看法以及有关熵收集/随机数生成的其他想法/信息.

ps:我知道像/ dev/urandom这样的随机源.这个系统只是一个辅助系统或(当我们没有(访问)这些来源时)一个后备方案.

php cryptography web-applications entropy prng

12
推荐指数
1
解决办法
2241
查看次数

标签 统计

cryptography ×1

entropy ×1

php ×1

prng ×1

web-applications ×1