带有 PKCS1-PSS 填充的 RSA 签名的 maskGenAlgorithm
maskGenAlgorithm for RSA signature with PKCS1-PSS padding
我正在使用 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。
在理想世界中,一些属性(在签名中,or/and 在用于检查签名的 public 密钥证书中)会告诉 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:
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_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。
在理想世界中,一些属性(在签名中,or/and 在用于检查签名的 public 密钥证书中)会告诉 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:
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
.