- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
经过几天的研究和讨论,我想出了这种方法来收集访客的熵(你可以看到我的研究历史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
用于检查和改善您的随机性概况祝您申请顺利。
<小时/>PS:您可能想在 Security.SE 上提出这样的问题。和 Cryptography.SE future !
关于php - 在网络应用程序中收集熵以创建(更)安全的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9883359/
我们有一个 WPF 应用程序,允许用户下载加密内容,并且我们希望提供离线解密该内容的功能。我的想法是下载 key 并使用 DPAPI 存储它们,但我在使用熵参数时遇到了问题。 是否有任何方法可以生成熵
在 php.ini 的 session 部分,有一个名为 session.entropy_length 的指令。 我知道它用于使 session ID 的生成“更加随机”。 它如何使 session
在 php.ini 的 session 部分,有一个名为 session.entropy_length 的指令。 我知道它用于使 session ID 的生成“更加随机”。 它如何使 session
我使用决策树算法来解决二元分类问题,目标是最大限度地减少分类的误报(最大化阳性预测值)(诊断工具的成本非常高) 。 有没有办法在基尼/熵分割标准中引入权重来惩罚误报错误分类? Here例如,修改后的基
我想检查我的 std::random_device 实现是否具有非零熵(即非确定性),使用 std::random_device::entropy() 函数。然而,根据至cppreference.co
我在 tensorflow_decision_forests 文档 ( https://github.com/tensorflow/decision-forests ) ( https://www.t
我是一名优秀的程序员,十分优秀!