使用 rng-tools 时,“熵创造”的蜗牛速度并未显着增加

使用 rng-tools 时,“熵创造”的蜗牛速度并未显着增加

我的系统(Linux 4.13.0-38-generic、16.04.1-Ubuntu、Intel® Celeron(R) CPU G3930 @ 2.90GHz × 2,主磁盘是 SSD)上的“熵创建”速率慢得不切实际每秒少于 1 位。

注意:我使用以下命令判断熵创建的速率:

watch -n1 cat /proc/sys/kernel/random/entropy_avail

另一方面,底层 Linux CSPRNG 正在以每秒约 187 Mb 的良好速度生成数据:

$ dd if=/dev/urandom of=/dev/null bs=1M count=1024 iflag=fullblock  
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.74347 s, 187 MB/s

我安装了rng-tools.它正在/dev/hwrng按预期工作和读取:

% systemctl status rng-tools
● rng-tools.service
   Loaded: loaded (/etc/init.d/rng-tools; bad; vendor preset: enabled)
   Active: active (running) since Sat 2018-04-28 13:17:17 PDT; 33s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 15840 ExecStop=/etc/init.d/rng-tools stop (code=exited, status=0/SUCC
  Process: 23876 ExecStart=/etc/init.d/rng-tools start (code=exited, status=0/SU
   CGroup: /system.slice/rng-tools.service
           └─23878 /usr/sbin/rngd -r /dev/hwrng

然而,熵率几乎没有变化,仍然远小于每秒 1 位。

硬件 RNG 每秒创建的数据量可能远多于 1 位。那么为什么熵产生的速度没有显着增加呢?

答案1

我找到了答案。

rnd-tools服务调用该程序/usr/sbin/rngd。查找该内容Ubuntu 文档可以看到有一个参数:

-W n, --fill-watermark=nnn

      一旦我们开始这样做,将熵提供给随机设备直到至少填充水印 熵池中有可用的熵位(默认值:2048)。设置得太高会导致 rngd来支配熵池的内容。低值会在熵匮乏期间损害系统性能。不设置 填充水印高于熵池的大小(通常为 4096 位)。

因此,我对“熵创建”速率的测试仅在缓冲区超过半满时进行,这就是它没有增加的原因。

使用此命令清空缓冲区很容易检查:

dd if=/dev/random of=/dev/null bs=256 count=1 iflag=fullblock

这会清除 2048 位熵,然后缓冲区在不到一秒的时间内恢复到一半以上。

相关内容