【发布时间】: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