我正在通过RSA算法,我几乎没有问题。问题可能很愚蠢,请帮助我。
我的问题是,接收方如何获得他的私钥 P 和 Q 。
对于特定的公钥,如果每个接收者都有相同的私钥,那么一个恶意接收者可以解密任何打算发送给其他接收者的消息吗?
答案 0 :(得分:1)
一般的模式是发件人生成了自己的私钥,因此密钥不会被传输,它只是用整块布制造的。
当查看小数字时,没有很多素数可供选择,因此碰撞的风险很高。例如,只有25个素数小于100,因此总共有300个私钥(25 * 24/2)。第二方在该受限空间中拥有与您相同的密钥的可能性,即1/300。
但是,当你进入更大的密钥空间时,双方意外拥有相同私钥的可能性正在消失。 RSA-1024(现在“太小”)使用p
和q
的512位值。 prime number theorem表示大约有2^511 / ln(2^511)
(~1.9e151)512位素数,大约有1.8e302个不同的私钥。 birthday problem表示在生成1.9e150密钥后,两个随机生成的RSA-1024密钥相同的可能性为1%。这是很多关键。
对于RSA-2048:1.3e305 1024位素数,8e609私钥。 1.3e304代钥匙发生碰撞的概率为1%。
但是,如果双方拥有相同的私钥,他们每个人都可以解密为另一方提供的邮件(并且可以代表另一方签署邮件),这是正确的。
解决方案是:不共享私钥。生成自己的,并在足够大的键空间中完成。 (不仅要保持冲突,还要保持目标密钥难以破解)
答案 1 :(得分:1)
一般来说,每个"接收器"有自己的私钥永远不会共享。您通常依靠PKI为每个接收者签署一个不同的密钥"。在这种情况下,密钥分发相对容易,因为"接收器"在本地生成他的私钥并获得CA签署的公钥。它正是HTTPS的工作原理,因此您可以查看加密的方式,并将其作为参考。
您应确保保持PKI的根密钥和私有签名密钥的安全。例如,使用HSM或冷藏库。