在OpenSSL EVP API中,EC和ECDSA之间有什么区别?

在OpenSSL EVP API中,EC和ECDSA之间有什么区别?,c,openssl,cryptography,elliptic-curve,ecdsa,C,Openssl,Cryptography,Elliptic Curve,Ecdsa,我正在开发一个程序,我想用OpenSSL的libcrypto EVP API生成一个ECDSA密钥 指定密钥类型时,没有EVP\u PKEY\u ECDSA,只有EVP\u PKEY\u EC。文件上说这是ECDSA和ECDH密钥 但是,参数生成函数EVP_PKEY_CTX_set_ec_paramgen_curve_nid仅采用曲线nid(OpenSSL中使用的椭圆曲线的名称)。无法告诉此函数我需要ECDSA密钥,也没有其他EVP\u PKEY\u CTX\u set\u ec\u功能 我不是

我正在开发一个程序,我想用OpenSSL的libcrypto EVP API生成一个ECDSA密钥

指定密钥类型时,没有
EVP\u PKEY\u ECDSA
,只有
EVP\u PKEY\u EC
。文件上说这是ECDSA和ECDH密钥

但是,参数生成函数
EVP_PKEY_CTX_set_ec_paramgen_curve_nid
仅采用曲线nid(OpenSSL中使用的椭圆曲线的名称)。无法告诉此函数我需要ECDSA密钥,也没有其他
EVP\u PKEY\u CTX\u set\u ec\u
功能

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


EC
键是否与
ECDSA
ECDH
键相同?OpenSSL文档和术语明确指出了这一点,但没有明确说明。如果它们不相同,我如何确保生成一个
ECDSA
键?

编辑:在回答之前没有注意到,但接近重复

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

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


伯恩斯坦的“curve25519”使用不同的键和算法,并作为特例处理

谢谢你,戴夫,这帮我把事情弄清楚了!还有一件事:哪些是Weierstrass曲线?@Venemo出于OpenSSL的目的,除了25519之外,其他都是Weierstrass曲线。1999年,当X9/NIST/Certicom首次将ECC ca标准化时,他们选择了Weierstrass,而第一个主要竞争对手(Brainpool)没有试图改变它,因此所有这些曲线都是Weierstrass。其他人提出了替代方案,但除了伯恩斯坦之外,没有人真正接受。关于他(相当密集)对形势的看法,请参见