更改私钥中的几个字符是否应该对其进行有意义的更改?

shi*_*cky 2 encryption rsa key jwt

所以我们有一个私钥用于签署请求,稍后使用公钥进行解密。我在搞乱它并替换了其中的一些字符,例如将“wnoy”更改为“xxyy”

我怀疑这会本质上改变密钥并导致解密失败,但事实并非如此。这些更改是否太小而无法对密钥产生有意义的更改?

谢谢你!

Maa*_*wes 5

对计算过程中使用的模数、指数或 CRT 参数的任何更改都将导致算法无法生成正确的签名或解密过程失败(很可能会产生填充错误)。

然而,由于 RSA 私钥不仅仅是一个数字,它通常保存在 PKCS#1 定义的 ASN.1 / DER 编码结构中。现在就看你对这个结构做了什么改变,私钥是否损坏得足够多了。该结构的编码(如果是 PEM 私钥)也可能发挥作用。

您很可能在计算中使用 RSA CRT 参数时更改了公共或私有指数(私有指数或 CRT 参数用于计算)。在这种情况下,计算将照常进行。对于 2048 位密钥,您将有大约 256 个字节可以更改,而不会造成问题。

较慢的“普通”RSA 计算使用私有指数,这意味着对 CRT 参数的任何更改都将不会被注意到(除非结构不再解析)。对于 2048 位密钥,您很可能拥有超过 5 x 128 个字节,可以更改这些字节而不会造成问题!


来自 PKCS#1:

RSAPrivateKey ::= SEQUENCE {
    version           Version,
    modulus           INTEGER,  -- n
    publicExponent    INTEGER,  -- e
    privateExponent   INTEGER,  -- d
    prime1            INTEGER,  -- p
    prime2            INTEGER,  -- q
    exponent1         INTEGER,  -- d mod (p-1)
    exponent2         INTEGER,  -- d mod (q-1)
    coefficient       INTEGER,  -- (inverse of q) mod p
    otherPrimeInfos   OtherPrimeInfos OPTIONAL
}
Run Code Online (Sandbox Code Playgroud)

这里的 CRT(中国余数定理)参数是 prime1、prime2、exponent1、exponent2 以及最后的系数参数。