我知道可以使用不同的sha算法生成RSA密钥。使用openssl,我似乎没有选择指定密钥生成器应该使用的算法。我怀疑它使用的是sha256。
如何在bash或Ruby中使用不同的sha算法(如sha512)生成RSA密钥?openssl库是否支持使用不同的算法生成密钥?如果没有,有谁知道我可以使用的另一个图书馆吗?(在红宝石中,OpenSSL::PKey::RSA似乎不允许选择算法,但文档很难跟踪soo.?)
如果这个问题已经被回答了,我很抱歉,但是我还没有找到答案。
也许我还应该注意(万一我错了):我的理解是,为生成的RSA密钥(即RSA 2048)选择一个大小与选择哈希算法(即sha512)是分开的。
更新-一些背景
我想用RSA密钥对Java令牌进行签名。我使用的JWT库给我的印象是,可以使用不同的哈希算法(RS256、RS384、RS512)生成RSA密钥。但是,使用openssl生成密钥似乎不允许我选择使用什么样的散列算法。
谢谢!!
发布于 2017-06-05 14:42:37
RSA密钥和“RSA算法”没有任何哈希算法的概念。
RSA密钥只是两个素数和另一个数(来自(p,q,e)三重奏,所有其他值都可以导出)。e通常被选择为0x010001 (尽管存在其他合理的值),并且p和q是随机生成的(而几乎任何CSPRNG都会有一个支持散列算法,CSPRNG本身通常被认为是一个只释放随机性的黑匣子)。
哈希算法起作用的地方是、RSA签名、。
对于RSA签名,原始数据在一个算法下进行散列,然后使用哈希值、算法标识符和私钥生成签名(对于PKCS v1.5签名.对于PSS,还有第二个(实际上是固定的)标识符和一些更多的随机字节)。
"RSASSA-PKCS1-v1_5的JWA (JSON Web算法)标识符是使用SHA(-2)-256".
本节定义了RSASSA-PKCS1-v1_5数字签名算法的使用,该算法在RFC 3447 RFC3447第8.2节中定义,使用SHA-2 SHS散列函数。
这些算法必须使用2048位或更大的密钥。
生成RSASSA-PKCS1-v1_5SHA-256数字签名如下:使用RSASSA-PKCS1-v1_5 -符号生成JWS签名输入的数字签名,使用生成SHA-256散列函数所需的私钥。这是JWS签名值。
(强调地雷)
因此,对RSA密钥没有任何要求,除了规范是在2015年编写的,因此他们规定了一个与2015年兼容的最小密钥大小。
https://stackoverflow.com/questions/44348254
复制相似问题