gpt4 book ai didi

php - 在网络应用程序中收集熵以创建(更)安全的随机数

转载 作者:行者123 更新时间:2023-12-03 01:15:43 28 4
gpt4 key购买 nike

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

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

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

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

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

$query="update `crypto` set `value`=sha1(concat(`value`, '$entropy')) where name='entropy'";

这意味着我们将访问者请求的熵与其他人已经收集的熵结合起来。

仅此而已。

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

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

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

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

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

最佳答案

在最好的情况下,最大的危险是本地用户的信息泄露。在最坏的情况下,全世界都可以预测您的数据。任何有权访问与您相同的资源的用户:相同的日志文件、相同的网络设备、相同的边界网关或运行的同一线路您和远程连接之间的连接允许他们通过展开随机数生成器来嗅探您的流量。

他们会怎么做?为什么,information theory的基本应用还有一点knowledge of cryptography ,当然!

不过,你的想法没有错!用真实的随机源播种 PRNG 通常对于防止上述攻击的发生非常有用。例如,了解 how /dev/random gets populated on a per-system basis 的人可以利用相同级别的攻击。如果系统具有低熵或其随机性来源是可再现的。

如果您能够充分保护为熵池播种的进程(例如,通过安全线路从多个来源收集数据),那么随着您越来越近,有人能够监听的可能性就会变得越来越小one-time pad 的理想加密品质.

换句话说,不要在 PHP 中执行此操作,而是使用单个梅森扭曲器中的单一随机源。正确执行,作者:reading from your best, system-specific alternative to /dev/random ,从尽可能多的安全、不同的“真正”随机性来源中播种其熵池。我理解您已经说过这些随机性来源是不可访问的,但是当向所有人提供类似的功能时,这个概念很奇怪主要操作系统。因此,我想我发现在这种情况下“辅助系统”的概念是值得怀疑的。

这仍然容易受到了解熵来源的本地用户的攻击,但是保护机器并增加 /dev/random 中的真实熵将使攻击变得更加困难他们做肮脏的工作没有man-in-the-middle attack .

对于 /dev/random 确实可以访问的情况,您可以相当轻松地播种它:

  • 查看您的系统上有哪些选项可用于使用 /dev/hw_random
  • 拥抱rngd (或一个不错的选择)用于定义随机性来源
  • 使用rng-tools用于检查和改善您的随机性概况
  • 最后,如果您需要良好、强大的随机性来源,请考虑投资 in more specialized hardware.

祝您申请顺利。

<小时/>

PS:您可能想在 Security.SE 上提出这样的问题。和 Cryptography.SE future !

关于php - 在网络应用程序中收集熵以创建(更)安全的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9883359/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com