我正在使用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。
答案 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:sha256
在openssl 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_PADDING
或RSA_PKCS1_PSS_PADDING
。