【问题标题】:maskGenAlgorithm for RSA signature with PKCS1-PSS padding带有 PKCS1-PSS 填充的 RSA 签名的 maskGenAlgorithm
【发布时间】:2019-01-03 05:49:11
【问题描述】:

我正在使用 RSA_PKCS1_PSS_PADDING 生成 RSA 签名。我使用 EVP_get_digestbyname() 和 EVP_DigestSignInit() 将摘要算法设置为 SHA256。并且使用 EVP_PKEY_CTX_set_rsa_pss_saltlen() 将盐长度参数设置为 -1。

我有用于签名生成的 EVP_MD_CTX、EVP_MD 和 EVP_PKEY_CTX 结构。

如何获取OpenSSL默认使用的Mask生成算法名称?有没有提供获取它的API?

编辑:使用的 OpenSSL 版本:1.1.0g。

【问题讨论】:

  • EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md 设置 mgf1 摘要。我需要获取 OpenSSL 默认使用的摘要名称。

标签: rsa signature openssl


【解决方案1】:

RSASSA-PSS 在实践中总是与 MGF1 一起用作掩码生成函数。唯一的变化是 MGF1 内部使用的消息摘要。

有时这与用于散列消息并在 PSS 中构建标签的消息摘要相同,因为这样最有意义。其他时候它是 SHA-1,因为它曾经是早期 RSASSA-PSS API 的默认 MD,因此是关联的 MGF1。

在理想的世界中,某些属性(在签名中,或/和用于检查签名的公钥证书中)会告诉 MGF1-with-such-MD,也许通过像我们必须的对象标识符的方式指定PSS。但加密 API 是地狱。


为了控制 MGF1 使用的消息摘要,我们需要与 -sigopt rsa_mgf1_md:sha256openssl dgst 命令中所做的事情一致。

我最好的猜测是设置 MGF1 摘要使用

assert(EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, EVP_sha256)>=0);

或者使用EVP_PKEY_CTX_get_rsa_mgf1_md()作为documented获取它:

EVP_PKEY_CTX_get_rsa_mgf1_md() 宏获取 ctx 的 MGF1 摘要。如果未明确设置,则使用签名摘要。填充模式必须已设置为 RSA_PKCS1_OAEP_PADDINGRSA_PKCS1_PSS_PADDING

【讨论】:

  • v2.2 中的 A.2.3 为 PSS 参数定义了 ASN.1 结构,OpenSSL 在 CMS(和 SMIME)中使用时会实现该结构,但 AFAICS 不会以其他方式公开。
  • EVP_PKEY_CTX_get_rsa_mgf1_md 给出EVP_MD **md 结构作为输出。但我无法找到从中获取摘要名称的方法。我们可以从这个结构中得到摘要名称吗?
猜你喜欢
  • 2023-02-16
  • 2013-06-11
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2021-01-12
  • 2021-02-04
相关资源
最近更新 更多