我想创建一个公共/私有RSA密钥对,其中两个密钥的OID都是rsassaPss。我可以很好地创建私钥,但是当我提取公钥时,我希望OID保持为rsassaPss,但它实际上被转换为rsaEncryption。
这是为什么OpenSSL在私钥生成时区分PSS和非PSS?说的
如果您为不同的算法重用相同的关键材料,则不依赖于任何一种算法的安全性,而是同时依赖于这两种算法组合的安全性。
在这种情况下,我假设有某种方法可以生成一个与私钥相同的OID限制的公钥。
这个RFC表示这是可能的,但我不确定什么openssl命令会生成这样的公钥。
当RSA私钥所有者希望将公钥专用于RSASSA时,则必须在主题公钥信息中的算法字段中使用id-RSASSA-PSS对象标识符,如果存在,则参数字段必须包含RSASSA params。id-RSASSA对象标识符值和语法在第3节中有详细描述。
下面是我如何使用OID rsassaPss创建我的私钥。
$ openssl genpkey -algorithm rsa-pss 2>/dev/null | openssl asn1parse | fold
0:d=0 hl=4 l=1214 cons: SEQUENCE
4:d=1 hl=2 l= 1 prim: INTEGER :00
7:d=1 hl=2 l= 11 cons: SEQUENCE
9:d=2 hl=2 l= 9 prim: OBJECT :rsassaPss
20:d=1 hl=4 l=1194 prim: OCTET STRING [HEX DUMP]:30820...下面是我如何尝试用OID rsassaPss创建我的公钥,但实际上得到了rsaEncryption。
$ openssl genpkey -algorithm rsa-pss 2>/dev/null | openssl rsa -pubout | openssl asn1parse
writing RSA key
0:d=0 hl=4 l= 290 cons: SEQUENCE
4:d=1 hl=2 l= 13 cons: SEQUENCE
6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption
17:d=2 hl=2 l= 0 prim: NULL
19:d=1 hl=4 l= 271 prim: BIT STRING 公钥不应该和私钥具有相同的OID吗?如果没有,我如何知道使用rsassaPss为私钥使用什么样的公钥算法?
谢谢!
发布于 2022-09-25 03:52:58
根据戴夫的评论,将rsa切换到pkey,OID将保留在公钥中。
$ openssl genpkey -algorithm rsa-pss 2>/dev/null | openssl pkey -pubout | openssl asn1parse
0:d=0 hl=4 l= 288 cons: SEQUENCE
4:d=1 hl=2 l= 11 cons: SEQUENCE
6:d=2 hl=2 l= 9 prim: OBJECT :rsassaPss
17:d=1 hl=4 l= 271 prim: BIT STRING此外,pkey似乎检查私钥,并采取适当的行动为rsa、rsa-pss和es私钥生成公钥。
https://crypto.stackexchange.com/questions/102003
复制相似问题