我正在开发一个程序,其中我想使用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密钥?

最佳答案

编辑:在回答之前没有注意到,但是在重复Is there a difference between ECDH and ECDSA keys?附近

对于Weierstrass曲线,是的,可以将相同的EC密钥对用于ECDSA或ECDH。 (或两者兼而有之,但这不是最佳实践,因为通常不应将一个密钥用于不同的目的,并且签名和密钥协商是不同的目的。)同一密钥对还可以用于其他椭圆曲线算法(例如ECMQV),以实现这些算法-OpenSSL不会。

如果您将密钥与证书结合使用(SSL / TLS协议以及CMS和S / MIME消息可完成其他工作),则证书可能会限制使用密钥的操作(因此算法)。但是并不是所有的东西都使用证书,对于那些使用证书的人,从技术上讲,没有什么可以阻止您拥有多个具有相同密钥使用不同密钥的证书。

Bernstein的“ curve25519”使用了不同的键和算法,并作为特殊情况进行处理。

关于c - OpenSSL EVP API中的EC和ECDSA有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49463023/

10-10 14:58