【问题标题】:crypto.randomBytes entropy sources drainingcrypto.randomBytes 熵源耗尽
【发布时间】:2014-05-04 16:01:09
【问题描述】:

我尝试使用 crypto.randomBytes() 方法生成非常大量 (> 1GB) 的伪随机数据,但我无法为耗尽的熵源生成异常,以查看我的应用程序在这种可能的异常情况下的行为.

来自 Node.JS 文档:

注意:如果没有足够的,会抛出错误或调用带有错误的回调 累积熵以生成加密强数据。

我的问题是:

如何排空所有熵源使crypto.randomBytes()产生异常?

【问题讨论】:

  • randomBytes 只是调用RAND_bytes,具体实现方式因操作系统而异。

标签: node.js


【解决方案1】:

简短的回答是 - 你不能

稍长一点的答案是 - 这取决于操作系统。我假设你使用 Linux。理论上 linux 中的熵池可以很容易地用下面的脚本耗尽:

#!/bin/bash

while true; do
    # write how much entropy is left
    cat /proc/sys/kernel/random/entropy_avail

    # drain a little bit
    dd if=/dev/random of=/dev/null bs=1 count=1 2> /dev/null
done

运行此脚本最终将阻止使用 /dev/random 而不是 /dev/urandom 的操作。 Urandom 不直接从熵池中读取,它使用 PRNG 并使用 /dev/random 每 60 秒重新播种一次(默认情况下)。那么当熵池干涸时会发生什么?没有什么。 PRNG 不会重新播种,但仍会生成新数字,只是加密强度较低的数字。

唯一可能引发此异常的时间是在系统第一次启动后。我想这不太可能......当然其他操作系统可以不同地处理这个问题,但只要你使用Linux,你就不必担心这个。

【讨论】:

  • 感谢您的回答,我正在考虑这样的行为,但不确定
猜你喜欢
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
  • 2015-10-03
  • 2021-10-06
  • 2018-04-05
  • 2011-01-05
相关资源
最近更新 更多