引擎是用于执行加密操作的硬件或软件实现。默认引擎 ID 是openssl
并使用 OpenSSL 的内置函数。
假设我们有一个具有超快速 AES 实现的硬件设备。现在,当我们使用 AES 加密时,我们可以将引擎设置为该硬件设备(而不是NULL
),这意味着操作现在由硬件设备而不是默认的 OpenSSL 软件层计算。
这在使用 OpenSSL 的网络安全一书的第 4.6 节中进行了解释。
OpenSSL 具有对加密加速的内置支持。使用
ENGINE
对象类型,应用程序可以获得对可变的底层表示的引用,通常是硬件设备。(...)
总体思路很简单:我们检索一个表示我们希望使用的硬件类型的对象,然后我们告诉 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”的加速硬件。”