首页 > 解决方案 > 更改私钥中的几个字符是否应该有意义地更改它?

问题描述

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

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

谢谢!

标签: encryptionkeyjwtrsa

解决方案


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

但是,由于 RSA 私钥不仅仅是一个数字,它通常保存在 PKCS#1 定义的 ASN.1 / DER 编码结构中。现在,如果私钥损坏得足够多,这取决于您对该结构的更改。这种结构的编码(如果是 PEM 私钥)也可能起作用。

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

较慢的“普通”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
}

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


推荐阅读