1

我正在实现散列(又名摘要)并登录使用 OpenSSL EVP API 的应用程序。然而,API 有三个非常相似的方法,令人困惑:

  • Sign这听起来应该用于签名,但EVP_SignInit只是#define一个EVP_DigestInit
  • Digest这似乎只能用于哈希生成,无法指定EVP_PKEY.
  • DigestSign看起来它同时进行散列和签名。

但是文档建议DigestSign用于签名(而不是实际的Sign)。

我不是密码学专家,所以这让我很困惑。它们之间有什么区别?哪一个是实施签名的好选择?

4

1 回答 1

1

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

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

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

前两个错误已在较新的EVP_SignDigest()功能中得到修复。

注意:我逐字复制了这个,函数被称为EVP_DigestSignnot EVP_SignDigest

所以它是对两个之前API无法修改的bug的替换功能。当然,您希望有旧的 API 并以相同的方式运行以实现向后兼容性。

所以旧的 API 没有遵循快速失败意外最少的原则;您不想在散列消息后崩溃,因为使用了错误的方案:要使用的方案通常是事先建立的。

于 2018-04-12T19:42:03.523 回答