crypto.randomBytes熵源耗尽

mic*_*nic 7 node.js

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

来自Node.JS文档:

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

我的问题是:

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

qzb*_*qzb 4

简短的回答是 -你不能

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