【问题标题】:What is the difference between EC and ECDSA in the OpenSSL EVP API?OpenSSL EVP API 中的 EC 和 ECDSA 有什么区别?
【发布时间】:2018-03-24 20:53:11
【问题描述】:

我正在开发一个程序,我想在其中使用 OpenSSL 的 libcrypto EVP API 生成 ECDSA 密钥。 I found this piece of documentation that deals with this topic.

指定密钥类型时,没有EVP_PKEY_ECDSA,只有EVP_PKEY_EC。文档说这是 ECDSA 和 ECDH 密钥

然而参数生成函数EVP_PKEY_CTX_set_ec_paramgen_curve_nid只接受一个曲线NID(OpenSSL中使用的椭圆曲线的名称)。没有办法告诉这个函数我想要一个 ECDSA 密钥。 According to this documentation,也没有其他EVP_PKEY_CTX_set_ec_函数。

我不是密码学专家,所以我可能理解不正确。

EC 密钥是否与 ECDSAECDH 密钥相同? OpenSSL 文档和术语明确表明了这一点,但没有明确说明。如果它们不一样,如何确保生成ECDSA 密钥?

【问题讨论】:

    标签: c openssl cryptography elliptic-curve ecdsa


    【解决方案1】:

    编辑:在回答之前没有注意到,但接近欺骗Is there a difference between ECDH and ECDSA keys?

    对于 Weierstrass 曲线,是的,相同的 EC 密钥对可用于 ECDSA 或 ECDH。 (或两者兼而有之,但这不是最佳实践,因为通常您不应该将一个密钥用于不同的目的,并且签名和密钥协议是不同的目的。)相同的密钥对也可以用于其他椭圆曲线算法,如 ECMQV 在实现的事物中那些算法——OpenSSL 没有。

    如果您将密钥与证书结合使用,SSL/TLS 协议以及 CMS 和 S/MIME 消息等等,那么 证书 可以强加限制哪些操作(因此算法)使用密钥。但并非所有东西都使用证书,对于那些使用证书的人来说,从技术上讲,没有什么能阻止您为同一个密钥拥有具有不同密钥用法的多个证书。

    Bernstein 的 'curve25519' 使用不同的键 算法,并作为特殊情况处理。

    【讨论】:

    • 谢谢戴夫,这为我解决了问题!还有一件事:Weierstrass 曲线是什么?
    • @Venemo 出于 OpenSSL 的目的,除了 25519 之外,其他都是 Weierstrass。当 X9/NIST/Certicom 在 1999 年首次标准化 ECC 时,他们选择了 Weierstrass,而第一个主要竞争对手(Brainpool)并没有尝试改变它,所以所有这些曲线都是 Weierstrass。其他人提出了替代方案,但除了伯恩斯坦之外,没有人得到真正的认可。对于他(相当密集)对这种情况的看法,请参阅safecurves.cr.yp.to/equation.html
    猜你喜欢
    • 2021-11-11
    • 2011-03-04
    • 2017-12-04
    • 2012-03-18
    • 2015-12-08
    • 2017-12-05
    • 1970-01-01
    • 2020-07-06
    • 2014-09-11
    相关资源
    最近更新 更多