我正在使用 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:sha256
在 openssl 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 forctx
. If not explicitly set the signing digest is used. The padding mode must have been set toRSA_PKCS1_OAEP_PADDING
orRSA_PKCS1_PSS_PADDING
.
关于rsa - 带有 PKCS1-PSS 填充的 RSA 签名的 maskGenAlgorithm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54021467/