我无法找到OpenSSL中ENGINE
的详细解释。它用于EVP_PKEY_CTX_new
等函数。
我在使用EVP_PKEY_CTX_new
和EVP_PKEY_encrypt
加密/解密某些内容之前使用EVP_PKEY_decrypt
但是在调用ENGINE
时我确实需要指定EVP_PKEY_CTX_new
参数}。我在OpenSSL里面看到的每个地方都将参数指定为null。
所以我的问题是:
OpenSSL中的ENGINE
是什么?它用于什么,未指定时有什么区别?
答案 0 :(得分:3)
引擎是用于执行加密操作的硬件或软件实现。默认引擎ID为openssl
,并使用OpenSSL的内置函数。
假设我们的硬件设备具有AES的超快速实现。现在,当我们使用AES加密时,我们可以将引擎设置为该硬件设备(而不是NULL
),这意味着操作现在由硬件设备而不是默认的OpenSSL软件层计算。
Network Security with OpenSSL书的第4.6节对此进行了解释。
OpenSSL内置了对加密加速的支持。使用
ENGINE
对象类型,应用程序可以获取对a的引用 可变的,底层表示,通常是硬件设备。 (...)一般的想法很简单:我们检索一个表示对象的对象 我们希望使用的硬件类型,然后我们告诉OpenSSL使用 我们选择的设备。
示例4-17 显示了我们如何执行此操作的小代码示例。
ENGINE *e; if (!(e = ENGINE_by_id("cswift"))) fprintf(stderr, "Error finding specified ENGINE\n"); else if (!ENGINE_set_default(e, ENGINE_METHOD_ALL)) fprintf(stderr, "Error using ENGINE\n"); else fprintf(stderr, "Engine successfully enabled\n");
函数调用
ENGINE_by_id
将从中查找实现 可用的内置方法并返回ENGINE
个对象。该 该函数的单个参数应该是字符串标识符 我们希望使用的底层实现。 (...)我们应该使用从查找中收到的
ENGINE
对象 调用ENGINE_set_default
以允许加密功能 利用特定ENGINE
的功能。第二 参数允许我们指定我们允许引擎的约束 实施。 (...)
注意:cswift
“用于CryptoSwift”加速硬件。“