AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 746733
Accepted
Aaron Copley
Aaron Copley
Asked: 2016-01-05 15:35:23 +0800 CST2016-01-05 15:35:23 +0800 CST 2016-01-05 15:35:23 +0800 CST

引导期间的 LUKS 错误

  • 772
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

alg:drbg:无法为...分配 DRNG 句柄

linux
  • 2 2 个回答
  • 392 Views

2 个回答

  • Voted
  1. Matthew Ife
    2016-01-08T04:48:11+08:002016-01-08T04:48:11+08:00

    很明显,我认为它不会影响您的加密强度。

    我已经检查了源代码,只要我解释了我读对的内容,您就不必担心这一点。

    此代码属于模块“stdrng”。至少在 Fedora 23 上,这是内置在内核中的,而不是作为内核模块导出的。

    当第一次初始化 stdrng 时,会发生以下调用。

    在 crypto/drbg.c 中,初始化从这里开始。

    1997 module_init(drbg_init);
    

    这会注册系统已知的所有 drbg。

    1985         for (j = 0; ARRAY_SIZE(drbg_cores) > j; j++, i++)
    1986                 drbg_fill_array(&drbg_algs[i], &drbg_cores[j], 1);
    1987         for (j = 0; ARRAY_SIZE(drbg_cores) > j; j++, i++)
    1988                 drbg_fill_array(&drbg_algs[i], &drbg_cores[j], 0);
    

    然后它将它传递给执行初始化的辅助函数:

    1989         return crypto_register_rngs(drbg_algs, (ARRAY_SIZE(drbg_cores) * 2));
    

    在crypto/rng.c这只是遍历每个 rng 来注册它..

    210         for (i = 0; i < count; i++) {
    211                 ret = crypto_register_rng(algs + i);
    212                 if (ret)
    213                         goto err;
    214         }
    

    这个函数做了一堆初始化步骤,然后调用另一个函数进行分配。

    196         return crypto_register_alg(base);
    

    不太明显的是注册期间发生的事情。

    另一个tcrypt内置于内核中的模块接收插入新算法的通知。一旦它看到一个新的注册算法,它就会安排对其进行测试。这就是产生您在屏幕上看到的输出的原因。

    测试完成后,算法进入 TESTED 状态。如果测试失败,我想(我找不到产生这种行为的位)如果您通过正确的标志,则无法选择搜索。

    测试是否通过肯定是内部存储的。

    除此之外,调用伪随机数生成器会导致算法列表按强度顺序迭代 prngs,如本注释中所述crypto/drbg.c

    107 /*
    108  * The order of the DRBG definitions here matter: every DRBG is registered
    109  * as stdrng. Each DRBG receives an increasing cra_priority values the later
    110  * they are defined in this array (see drbg_fill_array).
    111  *
    

    由于最强的一个不会失败(hmac sha256),即使可以选择它们,您也不太可能使用失败的那些。

    总结一下——

    • 当stdrng模块需要某些东西时,就会发生这种情况。
    • 它加载所有已知的算法。
    • 所有加载的算法都经过测试。有些可能会失败(为什么在这个答案中没有考虑)。
    • 测试失败的算法不应该在以后可供选择。
    • PRNGS按强度排序,通过的强PRNGS首先尝试。
    • 希望依赖的事物stdrng不应将这些算法用作其 PRNG 源的基础。

    您可以使用以下命令查看哪些算法已成功并通过了测试:

     grep -EC5 'selftest.*passed' /proc/crypto
    

    您还可以使用“优先级”字段查看选择优先级。根据模块作者的说法,值越高 PRNG 越强。

    所以,很高兴在这里犯错,因为我不认为自己是内核程序员,但总而言之 -

    加载时stdrng,它似乎从可接受的算法列表中选择其他算法,这些算法被认为比失败的算法更强,而且无论如何都不太可能选择失败的算法。

    因此,我相信在使用 luks 时这不会给您带来额外的风险。

    • 8
  2. Best Answer
    Aaron Copley
    2016-06-16T09:30:22+08:002016-06-16T09:30:22+08:00

    我该如何解决?

    根据 Red Hat 知识库,您必须将“ctr”内核模块添加到您的 initrd。他们的说明还说要包括“ecb”,尽管问题似乎是“ctr”模块没有被加载。

    dracut -f -v --add-drivers "ctr ecb"
    

    订阅者可以看到完整的信息。我不确定是否允许我在这里重新发布其余部分,所以我解释了完整的解决方案。

    https://access.redhat.com/solutions/2249181

    编辑 2016 年 9 月 29 日:

    您还可以添加这些驱动程序,/etc/dracut.conf以便在内核升级时将它们添加到新的 initramfs 中。否则,您的症状会在数月后神秘地再次出现。;)

    add_drivers+="ctr ecb"
    
    • 1

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve