据我所知,可以使用不同的sha
算法生成RSA密钥。使用openssl
,我似乎无法指定密钥生成器应使用的算法。我怀疑它使用的是sha256
。
如何在bash shell或Ruby中使用不同的sha
算法(例如sha512
)生成RSA密钥? openssl
库是否支持使用不同的算法生成RSA密钥?如果没有,有没有人知道我可以使用的另一个库? (在ruby中,OpenSSL::PKey::RSA
似乎不允许选择算法,但documentation对我来说很难遵循......?)
道歉,如果这个问题已经得到解答,但我还没有找到答案。
也许我也应该注意(如果我错了):我的理解是选择生成的RSA密钥的大小(即RSA 2048
)与选择散列算法(即{{1})是分开的})。
更新 - 某些背景
我想用RSA密钥签署Java Web Tokens。使用JWT library我给人的印象是可以使用不同的哈希算法(RS256,RS384,RS512)生成RSA密钥。使用sha512
生成密钥并不能让我选择使用的散列算法。
谢谢!
答案 0 :(得分:5)
RSA密钥和“RSA算法”没有任何哈希算法的概念。
RSA密钥只是两个素数和另一个数字(来自(p
,q
,e
)三元组,所有其他值都可以导出)。 e
通常被选为0x010001(虽然存在其他合理的值)并且p
和q
是随机生成的(而几乎任何CSPRNG都将具有支持哈希算法,CSPRNG本身通常是被认为是一个随机发出的黑盒子。)
哈希算法发挥作用的地方是 RSA签名。
对于RSA签名,原始数据在算法下进行散列,然后使用散列值,算法标识符和私钥来生成签名(对于PKCS v1.5签名...对于PSS,还有第二个(有效地修复了标识符和一些更随机的字节)。
RS256是“ R SASSA-PKCS1-v1_5的JWA(JSON Web Algorithms)标识符,使用 S HA(-2) - 256 < /强>”。
本节定义了RSASSA-PKCS1-v1_5数字的使用 RFC 3447 [RFC3447]第8.2节中定义的签名算法 (通常称为PKCS#1),使用SHA-2 [SHS]哈希函数。
这些算法必须使用大小为2048位或更大的密钥。
生成RSASSA-PKCS1-v1_5 SHA-256数字签名 如下:使用生成JWS签名输入的数字签名 RSASSA-PKCS1-v1_5-SIGN和带有所需的SHA-256哈希函数 私钥。这是JWS签名值。
(强调我的)
因此,对RSA密钥没有要求,除了该规范是在2015年编写的,因此他们强制要求使用2015兼容的最小密钥。