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

How to generate RSA key using sha512 for JWT?

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

如何在 bash shell 或 Ruby 中使用不同的 sha 算法(例如 sha512)生成 RSA 密钥? openssl 库是否支持使用不同算法生成 RSA 密钥?如果没有,有人知道我可以使用的另一个图书馆吗? (在 ruby 中,OpenSSL::PKey::RSA 似乎不允许选择算法,但是 documentation 对我来说很难理解……?)

如果这个问题已经得到解答,我深表歉意,但我找不到答案。

也许我还应该注意(以防我错了):据我了解,为生成的 RSA 密钥选择大小(即 RSA 2048)与选择散列算法(即 sha512).

更新 - 一些背景

我想用 RSA 密钥签署 Java Web 令牌。我使用的 JWT library 给我的印象是可以使用不同的散列算法(RS256、RS384、RS512)生成 RSA 密钥。使用 openssl 生成密钥似乎不允许我选择使用哪种哈希算法。

谢谢!!

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

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

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

对于 RSA 签名,原始数据根据算法进行哈希处理,然后使用哈希值、算法标识符和私钥生成签名(对于 PKCS v1.5 签名...对于 PSS,还有一个第二个(有效固定的)标识符和一些更随机的字节。

RS256 是“RSASSA-PKCS1-v1_5 使用 SHA(- 2)-256".

JWA section 3.3

This section defines the use of the RSASSA-PKCS1-v1_5 digital signature algorithm as defined in Section 8.2 of RFC 3447 [RFC3447] (commonly known as PKCS #1), using SHA-2 [SHS] hash functions.

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

RSASSA-PKCS1-v1_5 SHA-256 数字签名生成为 如下:使用生成 JWS 签名输入的数字签名 RSASSA-PKCS1-v1_5-SIGN 和具有 所需的 SHA-256 哈希函数 私钥。这是 JWS 签名值。

(强调我的)

因此对 RSA 密钥没有任何要求,除了规范是在 2015 年编写的,因此他们规定了与 2015 兼容的最小密钥大小。