我正在使用 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。
最佳答案
RSASSA-PSS 在实践中总是与 MGF1 一起用作掩码生成函数。唯一的变化是 MGF1 在内部使用哪个消息摘要。
有时,这与用于散列消息并在 PSS 中构建标签的消息摘要相同,因为这是最有意义的。其他时候它是 SHA-1,因为它曾经是早期 RSASSA-PSS API 的默认 MD,因此是关联的 MGF1。
在理想的世界中,某些属性(在签名中,或/和在用于检查签名的公钥证书中)会告诉 MGF1-with-such-MD,也许通过一些对象标识符,比如我们必须指定 PSS 。但加密 API 是 hell 。
为了控制 MGF1 使用什么 Message Digest,我们需要一些与 -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 获取它:关于rsa - 带有 PKCS1-PSS 填充的 RSA 签名的 maskGenAlgorithm,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54021467/