如何使用sha512为JWT生成RSA密钥?

时间:2017-06-03 20:25:09

标签: json rsa jwt sha512

据我所知,可以使用不同的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生成密钥并不能让我选择使用的散列算法。

谢谢!

1 个答案:

答案 0 :(得分:5)

RSA密钥和“RSA算法”没有任何哈希算法的概念。

RSA密钥只是两个素数和另一个数字(来自(pqe)三元组,所有其他值都可以导出)。 e通常被选为0x010001(虽然存在其他合理的值)并且pq是随机生成的(而几乎任何CSPRNG都将具有支持哈希算法,CSPRNG本身通常是被认为是一个随机发出的黑盒子。)

哈希算法发挥作用的地方是 RSA签名

对于RSA签名,原始数据在算法下进行散列,然后使用散列值,算法标识符和私钥来生成签名(对于PKCS v1.5签名...对于PSS,还有第二个(有效地修复了标识符和一些更随机的字节)。

RS256是“ R SASSA-PKCS1-v1_5的JWA(JSON Web Algorithms)标识符,使用 S HA(-2) - 256 < /强>”。

JWA section 3.3

  

本节定义了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兼容的最小密钥。