OpenSSL EVP API中EC和ECDSA有什么区别?

时间:2018-03-24 09:11:25

标签: c openssl cryptography elliptic-curve ecdsa

我正在开发一个程序,我希望用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密钥?

1 个答案:

答案 0 :(得分:2)

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

对于Weierstrass曲线,是相同的EC密钥对可用于ECDSA或ECDH 。 (或者两者兼而有之,但这不是最佳实践,因为一般情况下你不应该将一个密钥用于不同的目的,签名和密钥协议是不同的目的。)同样的密钥对也可以用于其他椭圆曲线算法,如ECMQV实现的东西那些算法 - OpenSSL没有。

如果您将密钥与证书一起使用,SSL / TLS协议以及CMS和S / MIME消息等,则证书可以强制执行限制哪些操作(因此算法)使用密钥。但并非所有内容都使用证书,对于那些使用证书的人来说,技术上没有任何东西阻止您使用具有相同密钥的不同keyusage的多个证书。

Bernstein的'curve25519'使用不同的算法,并作为特例处理。