crypto.randomBytes熵源消耗

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

从Node.JS文档:

注意:如果没有足够的累积熵来生成密码强的数据,将会抛出错误或调用错误的callback。

我的问题是:

如何排除所有的熵源,使crypto.randomBytes()产生一个exception?

简短的回答是 – 你不能

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