为什么更改部分私钥仍然可以解密由pubKey加密的消息?

时间:2017-04-13 07:40:45

标签: encryption cryptography rsa

我正在练习RSA非对称加密技术并发现了一些非常奇怪的东西:更改部分私钥仍然可以解密该消息!

这是我的步骤:(在ubuntu 16.04上)

  1. 生成私钥:openssl genrsa -out private.key
  2. 生成公钥:openssl rsa -in private.key -pubout -out pub.key
  3. 加密像" hello world"使用pubKey并使用私钥解密。
  4. 到现在一切正常,加密的消息可以被解码。
  5. 然后我更改了私钥中的一些字母(例如,A-> B,i-> I,只是替换,没有追加或删除),并尝试再次解密消息,它通过了!但我认为它应该失败......
  6. 然后我尝试更改其他一些不同的字母,而有些更改可能无法解码,但有些则没有。 (我尝试使用nodejs和Java加密/解密,显示相同的结果......)
  7. 然后我尝试分析私钥的结构,看看我是否改变了一些无意义的字段:

    • 使用命令openssl rsa -in faked_private.key -text -out faked_private.txt
    • 获取详细信息字段
    • 将private.txt与伪造的faked_private.txt进行比较。
    • 有以下字段:
        

      私钥:(2048位),模数,publicExponent,privateExponent,prime1,prime2,exponent1,exponent2,coefficient

    • 我发现当我更改系数/ privateExponent / prime2的值时,私钥仍然有用
    • 但是当我改变模数值时,它失败了。

    我对RSA内部的理论不太了解,但从基本的素数公式n = p * q,我认为至少素数不应该改变。

    是否有人可以在这个问题上提供帮助,答案更简单? (真的不想深入数学......)

    感谢。

0 个答案:

没有答案