我尝试使用crypto.randomBytes()
方法生成非常大量(> 1GB)的伪随机数据但是我无法为排出的熵源生成异常,以查看我的应用程序的行为是什么这个可能的例外。
来自Node.JS docs:
注意:如果没有足够的内容,将抛出错误或调用带有错误的回调 累积熵以生成加密强数据。
我的问题是:
如何排空所有熵源以使crypto.randomBytes()
产生异常?
答案 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,你就不必担心。