我正在开发一个程序,其中我想使用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。 (或两者兼而有之,但这不是最佳实践,因为通常不应将一个密钥用于不同的目的,并且签名和密钥协商是不同的目的。)同一密钥对还可以用于其他椭圆曲线算法(例如ECMQV),以实现这些算法-OpenSSL不会。
如果您将密钥与证书结合使用(SSL / TLS协议以及CMS和S / MIME消息可完成其他工作),则证书可能会限制使用密钥的操作(因此算法)。但是并不是所有的东西都使用证书,对于那些使用证书的人,从技术上讲,没有什么可以阻止您拥有多个具有相同密钥使用不同密钥的证书。
Bernstein的“ curve25519”使用了不同的键和算法,并作为特殊情况进行处理。
关于c - OpenSSL EVP API中的EC和ECDSA有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49463023/