[英]Are public key and private key interchangeable for RSA?
一方面,我听到人们说这两个密钥是完全可以互换的,第一个将解密第二个加密的内容。 这让我觉得这两个键是可以互换的。
但另一方面,RSA 生成的密钥似乎具有不同的长度,在另一个主题上,使用私钥加密被称为“签名”,并且被认为不如使用公钥加密安全。 (2)
最重要的是,当公钥应该在野外公开分发时,私钥应该保持不公开的想法。 (3)
我计划从唯一的服务器接收数据,所以我的想法是在该服务器上保留一个公钥来加密数据,并将私钥分发给所有可能的客户,但这与 (3) 背道而驰。 相反,如果我分发公钥并用私钥加密我的数据,根据 (2) 的加密就不太安全。
我应该分发公钥并用私钥加密以满足(2)还是相反?
注意:就我而言,性能不是问题。
答案取决于您是出于对数学的好奇,还是出于纯粹实用的密码学原因提出问题。
如果你正在实施一个加密系统,你永远不应该透露你的私钥,所以从这个意义上说,这些密钥绝对不能互换。 此外,您描述的使用场景似乎很适合身份验证而不是机密性,因此服务器发送给客户端的消息确实应该经过签名而不是加密。 如果您还需要保密,则需要在协议中执行更多步骤。
从数学的角度来看,答案是 OTOH“是”,假设您使用仅包含模数 N 和指数 D 的私钥的内部表示,而另一个指数 E 是随机生成的。 描述两个指数之间关系的公式是 1 = E*D (mod phi(N)),所以从数学的角度来看,哪个指数是哪个并不重要。
但另一方面,RSA 生成的密钥似乎有不同的长度
如果您使用的实现生成的 RSA 私钥明显长于相应的公钥,这几乎总是意味着该实现绝对不适合互换使用公钥和私钥。 长度的差异通常是由于以下因素的组合:
您的公钥用于加密消息,您的私钥用于解密。 因此,使用您分发的公钥,任何人都可以安全地加密消息,因为知道只有您(或拥有您私钥的人)可以解密它。 要直接回答您的问题,不,它们不可互换。 你永远不应该分发你的私钥。
如果您想与多个可能的客户共享密钥,那么实际上有两种选择。 要么你放弃非对称密码学并找到一种安全的方式来分发对称密钥,以便与 AES 而不是 RSA 之类的东西一起使用,或者你要求他们每个人生成一个密钥对并为你提供他们的公钥。 然后您可以解密来自服务器的内容,并为每个客户重新加密。 客户数量将有助于决定您在两者之间的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.