我尝试使用以下命令生成大量(> 1GB)伪随机数据crypto.randomBytes()
方法,但我无法为耗尽的熵源生成异常,以查看在出现这种可能的异常时我的应用程序的行为是什么。
来自 Node.JS 文档:
注意:如果没有足够的数量,将抛出错误或调用带有错误的回调
累积熵以生成加密的强数据。
我的问题是:
如何耗尽所有熵源来制造crypto.randomBytes()
产生异常?
简短的回答是 -你不能.
更长一点的答案是 - 这取决于操作系统。我假设你使用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 https://en.wikipedia.org/wiki/Pseudorandom_number_generator并使用每 60 秒重新播种一次(默认情况下)/dev/random
。那么当熵池干涸时会发生什么呢?没有什么。 PRNG 不会被重新播种,但它仍会生成新的数字,只是加密强度较低。
唯一可能抛出此异常的时间是在系统启动后第一次。我想这不太可能......当然其他操作系统可以以不同的方式处理这个问题,但只要你使用Linux,你就不必担心这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)