OpenSSL中的ENGINE是什么?它用于什么?

时间:2015-02-24 08:35:49

标签: c openssl cryptography evp-cipher

我无法找到OpenSSL中ENGINE的详细解释。它用于EVP_PKEY_CTX_new等函数。

我在使用EVP_PKEY_CTX_newEVP_PKEY_encrypt加密/解密某些内容之前使用EVP_PKEY_decrypt但是在调用ENGINE时我确实需要指定EVP_PKEY_CTX_new参数}。我在OpenSSL里面看到的每个地方都将参数指定为null。

所以我的问题是: OpenSSL中的ENGINE是什么?它用于什么,未指定时有什么区别?

1 个答案:

答案 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”加速硬件。“