alg: drbg: could not allocate DRNG handle for ...
我只在我们创建的虚拟机的引导过程中在控制台上看到这个错误。编辑:2/5/16 - 我在一些裸机装置上也看到了它。(它确实会完全启动。)我认为它与虚拟化硬件和缺少(兼容的)随机数生成器有关。问题是我无法评估严重程度。加密强度是否受到损害?(我什至应该关心这个错误吗?)我该如何解决它?
我们在 CentOS 6.7 下使用 QEMU/KVM。virsh dumpxml
如果您真的认为它会有所帮助,我可以做一个示例系统。我们使用Anaconda 默认密码/密钥大小。(aes-xts-plain64/512)
这是我在linux-crypto 邮件列表中找到的最早的参考资料。不幸的是,这有点超出我的想象。
http://www.mail-archive.com/linux-crypto%40vger.kernel.org/msg10398.html
很明显,我认为它不会影响您的加密强度。
我已经检查了源代码,只要我解释了我读对的内容,您就不必担心这一点。
此代码属于模块“stdrng”。至少在 Fedora 23 上,这是内置在内核中的,而不是作为内核模块导出的。
当第一次初始化 stdrng 时,会发生以下调用。
在 crypto/drbg.c 中,初始化从这里开始。
这会注册系统已知的所有 drbg。
然后它将它传递给执行初始化的辅助函数:
在
crypto/rng.c
这只是遍历每个 rng 来注册它..这个函数做了一堆初始化步骤,然后调用另一个函数进行分配。
不太明显的是注册期间发生的事情。
另一个
tcrypt
内置于内核中的模块接收插入新算法的通知。一旦它看到一个新的注册算法,它就会安排对其进行测试。这就是产生您在屏幕上看到的输出的原因。测试完成后,算法进入 TESTED 状态。如果测试失败,我想(我找不到产生这种行为的位)如果您通过正确的标志,则无法选择搜索。
测试是否通过肯定是内部存储的。
除此之外,调用伪随机数生成器会导致算法列表按强度顺序迭代 prngs,如本注释中所述
crypto/drbg.c
由于最强的一个不会失败(hmac sha256),即使可以选择它们,您也不太可能使用失败的那些。
总结一下——
stdrng
模块需要某些东西时,就会发生这种情况。stdrng
不应将这些算法用作其 PRNG 源的基础。您可以使用以下命令查看哪些算法已成功并通过了测试:
您还可以使用“优先级”字段查看选择优先级。根据模块作者的说法,值越高 PRNG 越强。
所以,很高兴在这里犯错,因为我不认为自己是内核程序员,但总而言之 -
加载时
stdrng
,它似乎从可接受的算法列表中选择其他算法,这些算法被认为比失败的算法更强,而且无论如何都不太可能选择失败的算法。因此,我相信在使用 luks 时这不会给您带来额外的风险。
根据 Red Hat 知识库,您必须将“ctr”内核模块添加到您的 initrd。他们的说明还说要包括“ecb”,尽管问题似乎是“ctr”模块没有被加载。
订阅者可以看到完整的信息。我不确定是否允许我在这里重新发布其余部分,所以我解释了完整的解决方案。
https://access.redhat.com/solutions/2249181
编辑 2016 年 9 月 29 日:
您还可以添加这些驱动程序,
/etc/dracut.conf
以便在内核升级时将它们添加到新的 initramfs 中。否则,您的症状会在数月后神秘地再次出现。;)