【问题标题】:How to switch between Openssl-engine and Openssl-software implementation dynamically?如何在 Openssl 引擎和 Openssl 软件实现之间动态切换?
【发布时间】:2021-02-04 07:36:48
【问题描述】:

我正在尝试通过以下方式使用软件实现来测试我的 openssl 引擎代码。

第 1 步:加载我的 openssl 引擎。
第 2 步:使用 ECDSA 和 openssl-Engine 进行签名(api 使用 ECDSA_sign)。
第 3 步:卸载 openssl 引擎。
第 4 步:使用 openssl 的软件实现进行验证(api 使用 ECDSA_verify)。

我看到一旦加载引擎,我就无法卸载 openssl 引擎。
我使用了 ENIGINE_finish 和 ENGINE_free api,它们删除了结构和功能参考。仍然没有删除引擎引用。

如何在 Openssl 引擎和 openssl 软件实现之间动态切换?

【问题讨论】:

    标签: c openssl cryptography ecdsa


    【解决方案1】:

    假设您在第 1 步中执行类似的操作,为简洁起见,我省略了所有返回码检查:

    ENGINE *e = ENGINE_by_id("dynamic");
    ENGINE_ctrl_cmd_string(e, "SO_PATH", "my-engine", 0);
    ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0);
    ENGINE_set_default_EC(e)
    

    然后,在进行 ECDSA 签名计算之后,我相信(没有实际测试过)它应该足以调用,使用相同的 e 值,

    ENGINE_unregister_EC(e);
    

    切换回 OpenSSL 附带的默认 EC 实施并继续您的签名验证。

    请注意,如果您的引擎也实现了该功能并且您也想对其进行测试,那么您可能必须对您在签名计算期间使用的摘要执行类似的操作。

    【讨论】:

    • 谢谢..我今天尝试了你的建议..但 ENGINE_unregister_EC(e) 仍然没有发布参考..加密调用仍然重定向到引擎实现☹️
    • 嗯,这听起来不对。在您取消注册后,ENGINE_get_default_EC() 会返回什么?它应该返回与指向您自己引擎的指针不同的东西。 (我假设你在 1.1 分支上。)
    猜你喜欢
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2017-09-09
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2015-05-10
    相关资源
    最近更新 更多