Sign,DigestSign和Digest之间有什么区别?

时间:2018-04-12 12:39:52

标签: openssl cryptography sign evp-cipher

我正在实施散列(aka。摘要)并在使用OpenSSL EVP API的应用中登录。然而,API有三种非常相似的方法,这些方法令人困惑:

  • Sign听起来应该用于签名,但EVP_SignInit只是#defineEVP_DigestInit
  • Digest似乎只能用于哈希生成,无法指定EVP_PKEY
  • DigestSign看起来像哈希和签名一样。

the documentation建议您使用DigestSign进行签名(而不是实际的Sign)。

我不是加密专家,所以这对我来说非常困惑。他们之间有什么区别?哪一个是实施签名的好选择?

1 个答案:

答案 0 :(得分:1)

以下内容可在EVP_SignInit的文档中找到:

  

由于私钥在EVP_SignFinal()的调用中传递,因此在通过潜在的大量数据后才会显示与私钥相关的任何错误(例如,不合适的密钥和摘要组合)。 EVP_SignUpdate()

     

无法使用这些功能更改签名参数。

     

前两个错误已在较新的EVP_SignDigest()函数中修复。

注意:我逐字复制,函数称为EVP_DigestSign而不是EVP_SignDigest

因此它是两个错误的替换函数,无法通过以前的API进行修改。当然,您希望使用旧的API,并且向后兼容性的行为方式相同。

因此,旧API不符合快速失败最少惊喜的原则;您不希望在散列消息后崩溃,因为使用了错误的方案:要使用的方案通常是预先建立的