【发布时间】:2017-11-05 00:08:23
【问题描述】:
我了解可以使用不同的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 生成密钥似乎并不能让我选择使用什么散列算法。
谢谢!!
【问题讨论】:
-
我不确定您所说的“使用 sha 算法生成 RSA 密钥”是什么意思。 RSA 密钥是使用精心设计的加密随机数生成器生成的。在幕后,这些可能会使用像 sha512 这样的加密哈希函数作为算法的一部分,但出于密钥生成的目的,您通常会将它们视为黑盒。
-
@JamesKPolk - 我猜测(它只是一个猜测)它是:(1)底层 PRNG(如 Java 使用 SHA1 处理
SecureRandom);或 (2) 与数字签名相关的签名算法(如证书中使用的)。无论哪种情况,我认为我们都需要更多信息或澄清。 -
@John - 通过选择
p、q、选择e,然后求解d,生成带有随机位的RSA密钥。还有一些其他的限制条件,比如确保p和q是素数,并且e是ϕ(n)的相对素数或互素数。在此过程中不使用哈希。 -
@jww,您知道为什么 JWT 库 github.com/jwt/ruby-jwt 会要求我指定使用什么哈希算法生成 RSA 密钥吗?听起来您在说每个 RSA 密钥生成库(例如
openssl)只允许您选择密钥中的位数,而不是使用的算法。谢谢! -
@John - 当部分声明 “RS256 - RSA 使用 SHA-256 哈希算法” 时,RSA 密钥已经生成。签名过程中使用了 SHA 和其他哈希值;不是 RSA 密钥生成过程。