【问题标题】:ECDSA with OPENSSL带有 OPENSSL 的 ECDSA
【发布时间】:2020-07-06 18:34:05
【问题描述】:

我想在 OPENSSL 中实现 ECDSA。但我收到以下警告

ECDSA_sign 已弃用,ECDSA_do_verify 已弃用。

谁能指导我如何处理这个错误。

【问题讨论】:

    标签: openssl public-key-encryption ecdsa openssl-engine


    【解决方案1】:

    您似乎正在使用 OpenSSL 的开发版本(将成为 OpenSSL 3.0)。这些函数在 dev 中已弃用,但在最新的稳定版本 (1.1.1) 中未弃用。

    在 OpenSSL(包括 ECDSA)中进行签名的首选方法是使用 EVP_DigestSign*() API。

    这些函数的手册页在这里:

    https://www.openssl.org/docs/man1.1.1/man3/EVP_DigestSignInit.html

    为了使用这些,您需要创建一个包含 ECDSA 密钥的 EVP_PKEY 对象。通常这是通过使用EVP_PKEY_new() 创建一个空的EVP_PKEY 然后使用EVP_PKEY_assign_EC_KEY 为其分配一个EC_KEY 来完成的:

    https://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_assign_EC_KEY.html

    这里有使用 OpenSSL wiki 上的 EVP_DigestSign*() API 进行签名和验证的示例代码:

    https://wiki.openssl.org/index.php/EVP_Signing_and_Verifying

    使用 EVP 函数的另一种替代方法是使用当前稳定版本 (1.1.1),您尝试使用的函数未弃用。但请记住,当 OpenSSL 3.0 发布时,它们将被弃用。

    第三种选择是忽略弃用警告。这些功能仍然存在并且可以工作。假设您没有指示编译器将警告视为错误,您仍然应该能够构建您的应用程序。请记住,标记为已弃用的 API 最终可能会在某些未来版本的 OpenSSL 中被删除。

    【讨论】:

    • 非常感谢@Matt Caswell
    • 如何在引擎端为上述功能注册功能,例如ENGINE_set_ECDSA?
    • ENGINE_set_pkey_meths()(不幸的是没有记录)。此代码适用于 RSA:github.com/openssl/openssl/blob/…
    猜你喜欢
    • 1970-01-01
    • 2016-07-26
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    相关资源
    最近更新 更多