【问题标题】:What is the ENGINE in OpenSSL and what is it used for?OpenSSL 中的 ENGINE 是什么,它的用途是什么?
【发布时间】:2015-04-25 19:19:59
【问题描述】:

我无法很好地解释 OpenSSL 中的 ENGINE 是什么。它用于EVP_PKEY_CTX_new等函数中。

我在使用EVP_PKEY_encryptEVP_PKEY_decrypt 加密/解密某些东西之前使用EVP_PKEY_CTX_new,但是在调用EVP_PKEY_CTX_new 时我真的需要指定ENGINE 参数吗?我在 OpenSSL 内部的任何地方都将参数指定为 null。

所以我的问题是: OpenSSL 中的ENGINE 是什么,它的用途是什么?如果不指定它有什么区别?

【问题讨论】:

    标签: c openssl cryptography evp-cipher


    【解决方案1】:

    引擎是用于执行加密操作的硬件或软件实现。默认引擎ID为openssl,使用OpenSSL的内置函数。

    假设我们有一个具有超快速 AES 实现的硬件设备。现在,当我们使用 AES 加密时,我们可以将引擎设置为该硬件设备(而不是 NULL),这意味着这些操作现在由硬件设备而不是默认的 OpenSSL 软件层计算。


    这在Network Security with 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”的加速硬件。”

    【讨论】:

    • 图书链接已过期。
    • “图书链接已过期。” ——我在合理使用原则下引用了书中最相关的部分。 (最初,我不打算添加最后两段。我希望我没有引用太多。)这本书的价格是新的 30 美元,或者旧的 10 美元。并且很容易在图书馆中找到。
    猜你喜欢
    • 2010-09-27
    • 2011-12-17
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    相关资源
    最近更新 更多