maskGenAlgorithm用于带有PKCS1-PSS填充的RSA签名

时间:2019-01-03 05:49:11

标签: rsa signature openssl

我正在使用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。

1 个答案:

答案 0 :(得分:3)

实际上,

RSASSA-PSS始终与MGF1一起用作掩码生成功能。唯一的变化是MGF1内部使用了哪种消息摘要。

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

在理想世界中,某些属性(在签名或/和用于检查签名的公共密钥证书中)会告诉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