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

Joh*_*ohn 2 json rsa sha512 jwt

我知道可以使用不同的sha算法生成RSA密钥.使用openssl,我似乎没有选择指定密钥生成器应该使用的算法.我怀疑它正在使用sha256.

如何在bash shell或Ruby中使用不同的sha算法(如sha512)生成RSA密钥?openssl库是否支持使用不同的算法生成RSA密钥?如果没有,有没有人知道我可以使用的另一个库?(在ruby中,OpenSSL::PKey::RSA似乎不允许选择算法,但文档很难让我遵循soo ......?)

抱歉,如果这个问题已经得到解答,但我找不到答案.

也许我也应该注意(如果我错了):我的理解是,为生成的RSA密钥(即RSA 2048)选择大小与选择散列算法(即sha512)是分开的.

更新 - 一些背景

我想用RSA密钥签署Java Web Tokens.我正在使用的JWT库给我的印象是可以使用不同的散列算法(RS256,RS384,RS512)生成RSA密钥.使用生成密钥openssl似乎并没有让我选择使用什么散列算法.

谢谢!!

bar*_*njs 6

RSA密钥和"RSA算法"没有任何哈希算法的概念.

RSA密钥仅仅是两个素数和另外一个数字(从(p,q,e)三重所有其他值可以导出).e通常选择为0x010001(尽管存在其他合理的值),并pq随机产生(而几乎任何CSPRNG都将有一个背衬散列算法CSPRNG本身通常被认为是黑盒,仅仅发射随机性).

散列算法发挥作用的地方是RSA签名.

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

RS256是" 使用S HA(-2) - 256 "的" R SASSA-PKCS1-v1_5 " 的JWA(JSON Web算法)标识符.

JWA第3.3节

本节定义了使用SHA-2 [SHS]哈希函数的RFC 3447 [RFC3447](通常称为PKCS#1)第8.2节中定义的RSASSA-PKCS1-v1_5数字签名算法的使用.

这些算法必须使用大小为2048位或更大的密钥.

RSASSA-PKCS1-v1_5 SHA-256数字签名生成如下:使用RSASSA-PKCS1-v1_5-SIGN生成JWS签名输入的数字签名,使用所需私钥生成SHA-256散列函数.这是JWS签名值.

(强调我的)

因此,对RSA密钥没有要求,除了该规范是在2015年编写的,因此他们强制要求2015兼容的最小密钥.