OpenSSL EVPAPI中的EC和ECDSA有什么区别?
What is the difference between EC and ECDSA in the OpenSSL EVP API?
我正在开发一个程序,我想在其中使用 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
键是否与 ECDSA
或 ECDH
键相同? OpenSSL 文档和术语明确表明了这一点,但没有明确说明。如果它们不相同,我如何确保生成 ECDSA
密钥?
编辑:回答前没注意到,但差点被骗了Is there a difference between ECDH and ECDSA keys?
对于 Weierstrass 曲线,是的,相同的 EC 密钥对可用于 ECDSA 或 ECDH。 (或两者兼而有之,但这不是最佳实践,因为通常您不应该将一个密钥用于不同的目的,而签名和密钥协议是不同的目的。)相同的密钥对也可以用于其他 elliptic-curve 算法,例如 ECMQV in things实现这些算法——而 OpenSSL 没有。
如果 您将密钥与证书结合使用,SSL/TLS 协议和 CMS 以及 S/MIME 消息等,则 [= =19=]certificate 可以对使用密钥的操作(以及算法)施加限制。但并非所有东西都使用证书,对于那些使用证书的人,从技术上讲,没有什么能阻止您拥有多个证书,但同一密钥使用不同的密钥。
Bernstein 的 'curve25519' 使用不同的密钥 和 算法,并作为特殊情况处理。
我正在开发一个程序,我想在其中使用 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
键是否与 ECDSA
或 ECDH
键相同? OpenSSL 文档和术语明确表明了这一点,但没有明确说明。如果它们不相同,我如何确保生成 ECDSA
密钥?
编辑:回答前没注意到,但差点被骗了Is there a difference between ECDH and ECDSA keys?
对于 Weierstrass 曲线,是的,相同的 EC 密钥对可用于 ECDSA 或 ECDH。 (或两者兼而有之,但这不是最佳实践,因为通常您不应该将一个密钥用于不同的目的,而签名和密钥协议是不同的目的。)相同的密钥对也可以用于其他 elliptic-curve 算法,例如 ECMQV in things实现这些算法——而 OpenSSL 没有。
如果 您将密钥与证书结合使用,SSL/TLS 协议和 CMS 以及 S/MIME 消息等,则 [= =19=]certificate 可以对使用密钥的操作(以及算法)施加限制。但并非所有东西都使用证书,对于那些使用证书的人,从技术上讲,没有什么能阻止您拥有多个证书,但同一密钥使用不同的密钥。
Bernstein 的 'curve25519' 使用不同的密钥 和 算法,并作为特殊情况处理。