crypto.randomBytes熵源耗尽

时间:2014-05-04 16:01:09

标签: node.js

我尝试使用crypto.randomBytes()方法生成非常大量(> 1GB)的伪随机数据但是我无法为排出的熵源生成异常,以查看我的应用程序的行为是什么这个可能的例外。

来自Node.JS docs:

  

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

我的问题是:

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

1 个答案:

答案 0 :(得分:2)

简短回答是 - 你不能

稍微长一点的答案是 - 它取决于操作系统。我假设你使用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,你就不必担心。