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

标签 rsa signature openssl

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

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

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

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

最佳答案

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

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

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


为了控制 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 获取它:

The EVP_PKEY_CTX_get_rsa_mgf1_md() macro gets the MGF1 digest for ctx. If not explicitly set the signing digest is used. The padding mode must have been set to RSA_PKCS1_OAEP_PADDING or RSA_PKCS1_PSS_PADDING.

关于rsa - 带有 PKCS1-PSS 填充的 RSA 签名的 maskGenAlgorithm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54021467/

相关文章:

java - 使用 RSA 公钥和私钥加密和解密 SecretKey

iphone - 将 RSA 公钥发送到 iphone 并使用它来加密

android - Android 中的 apk 签名与使用 keytool 的区别

c# - 如何将 RSA 公钥从 .NET 导入 OpenSSL

git - Heroku Git - fatal error : The remote end hung up unexpectedly

java - 通过网络将 RSA 公钥从 C 发送到 Java

c# - MakeSignature.SignDeferred 和嵌入签名问题 (Itextsharp)

javascript - 如何使用javascript绘制签名(单击、按住和移动鼠标)?

c++ - 如何使用openssl获取AES-CCM解密的Tag信息

Python 3.6 SSL - 使用 TLSv1.0 而不是 TLSv1.2 密码 -(2 种身份验证和自签名证书)