【问题标题】:OpenSSL random - using ENGINE API to set random, what is the right way to do it?OpenSSL 随机 - 使用 ENGINE API 设置随机,正确的方法是什么?
【发布时间】:2014-09-09 17:58:43
【问题描述】:

在 OpenSSL 中,使用使用硬件的引擎,我试图确保 RAND_bytes 将使用引擎和硬件。我遇到了两个函数:

ENGINE_set_default_RAND(ENGINE*)
RAND_set_rand_engine(ENGINE*)

看起来 - 他们也这样做。为什么有两个?哪一个是正确的方法?

我进一步测试了 set 函数是否通过断开硬件并执行初始化,然后执行 RAND_bytes 来工作。仅使用第一个函数(ENGINE_set_default_RAND)一切都成功了——显然使用了软件实现(为什么?)。当更改为第二个时,它在 set RAND_set_rand_engine 函数调用上失败(这很棒)。

【问题讨论】:

  • 我认为第一个将随机引擎重置为默认值,第二个设置一个新的随机引擎。参考:docs.webingenia.com/openssl/doxygen/…docs.webingenia.com/openssl/doxygen/…
  • 中,谢谢您的文档!但是最终结果不应该相同吗,因为 ENGINE_set_default 接受将引擎设为默认值?
  • 很抱歉,我过去曾对此做过一些事情,但我记不太清了,无法给出准确的答案。我会试着解释一下,因为似乎没有人在乎。我记得 ENGINE 是一个较新的 API,弃用了 RAND 的一部分,但我不知道这个特定的功能。它必须更新,因为它知道 ENGINE。 engine 和 rand 的联机帮助页似乎支持我的回忆。我认为引擎手册页非常有用:openssl.org/docs/crypto/engine.html# 它还链接了 rand 的手册页,所以我不会添加链接。我会说 ENGINE_x 是现在要走的路。
  • midor,谢谢,从我的测试来看,RAND_set_rand_engine 是唯一一个可以工作的,但恐怕这可能是这个特定的 ENGINE 特定的。如果您愿意,请用评论的内容回答问题,以便我接受(它回答了问题)。
  • 说实话,我想我并没有真正回答这个问题,所以我认为如果我将一些链接放在一起,不符合将来阅读本文的人的利益。如果您解释了如何为自己解决此问题并将其发布为答案,那可能会更好。

标签: c cryptography openssl


【解决方案1】:

根据:https://www.openssl.org/docs/crypto/engine.html#Application_requirements ENGINE_set_default_(ENGINE)* 是要走的路,例如:

ENGINE_set_default_RAND(myPtrEngine);

这有效,有效地使用了引擎实现。我已经通过修改自定义引擎代码对其进行了测试,将其注入一些简单的 printfs(...) 以指示流程(在调试时遇到了一些问题)。

另一个电话:

RAND_set_rand_engine(myPtrEngine);

结果基本相同(我不知道内部差异)。

让我问的问题是回退到软件机制的可能性。断开硬件并设置使用它的引擎后,随机功能似乎起作用了。因此,我不知道 ENGINE_set_default_RAND 是否有效。然而,在检查了引擎的代码后,发现它本身有一个回退机制。这就是它总是起作用的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-10
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    相关资源
    最近更新 更多