因此我们有一个私钥用于签署请求,然后使用公钥对请求进行解密。我在弄乱它并替换了其中的几个字符,说将“ wnoy”更改为“ xxyy”
我怀疑这本质上会更改密钥,并且解密最终会失败,但事实并非如此。更改是否太小而无法对键进行有意义的更改?
谢谢!
答案 0 :(得分:3)
在计算过程中使用的模数,指数或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,最后是系数参数。