我只是在让 Pidgin 运行 OTR 时遇到了一些问题,因为 Pidgin 在每次尝试生成我的私钥时都会挂起。 这相当旧的博客文章通过“将 /dev/urandom 馈送到 /dev/random 的熵池”,为我指明了正确的方向(或者更确切地说“允许我生成密钥”)。
当我这样做时watch cat /proc/sys/kernel/random/entropy_avail
,我看到数字< 50。在将 /dev/urandom 输入熵池时,这个数字上升到 ~2000,然后我能够生成我的密钥。
我的熵值 < 50 位(?)正常吗?我使用的桌面系统基本上运行着 Firefox、Thunderbird 和 Pidgin,从 LAN 传输音乐。
无法为 OTR 创建密钥是 Pidgin 中的错误还是我的 Arch Linux 安装造成了低熵?
PS:我知道这个答案解释了关于熵和 (P)RNG 的许多误解。
答案1
“输入/dev/urandom
熵池/dev/random
”是作弊——你假装提供新的熵,而实际上数据是从 RNG 的当前状态确定性导出的。幸运的是,正如你所指出的,你欺骗的规则是无用的:不管 Linux 内核如何假装,熵实际上并没有减少。
Linux 的低熵/dev/random
估计很常见,而且几乎总是误报:该估计过于保守。
/dev/urandom
密钥生成是安全的,所以 Pidgin 应该使用/dev/urandom
(不会阻塞)而不是/dev/random
(可以阻塞,而且经常阻塞)。
只有一种情况下/dev/random
阻塞是合法的,因为系统确实没有足够的熵:当系统太新而无法累积熵时。 Linux 系统通常会为下次重新启动保存熵,因此实际上真正的低熵仅发生在两种情况下:
- 在全新安装上——这对于在第一次打开时生成密钥的嵌入式设备来说尤其是一个问题;
- 在实时系统上。
归咎于何处并不是一个有效的考虑,但如果你必须这样做:Arch Linux 并且你是完全无辜的。洋泾浜应该使用/dev/urandom
或至少提供一种方式,因此它受到部分指责。 Linux 内核确实应该提供一个接口,保证提供加密质量的随机性,并且只有在真正缺乏熵时才会阻塞(就像 FreeBSD 的那样/dev/random
)。