我尝试使用crypto.randomBytes()方法生成非常大量(> 1GB)的伪随机数据但是我不能为排出的熵源生成异常,以查看在可能的异常情况下我的应用程序的行为是什么.
来自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
Run Code Online (Sandbox Code Playgroud)
运行此脚本最终将阻止使用/dev/random, 但不阻止的操作/dev/urandom。Urandom 不直接从熵池中读取,它使用PRNG并使用 .每 60 秒重新播种一次(默认情况下)/dev/random。那么当熵池干涸时会发生什么呢?没有什么。PRNG 不会被重新播种,但它仍会生成新的数字,只是加密强度较低。
唯一可能抛出此异常的时间是系统第一次启动后。我想这不太可能......当然其他操作系统可以以不同的方式处理这个问题,但只要你使用Linux,你就不必担心这一点。
| 归档时间: |
|
| 查看次数: |
832 次 |
| 最近记录: |