繁体   English   中英

RSA的公钥和私钥可以互换吗?

[英]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 私钥明显长于相应的公钥,这几乎总是意味着该实现绝对不适合互换使用公钥和私钥。 长度的差异通常是由于以下因素的组合:

  • 公共指数 E 不是随机生成的,而是一个小的固定常数,例如 3 或 0x10001。 另一方面,私钥 D 几乎与模数一样大,因此私钥数据几乎是公钥数据大小的两倍。 如果您只有一个 RSA 私钥 (N,D),那么您对公共指数的第一个猜测将是值 3 或 0x10001,并且很容易检查猜测是否正确。 如果您希望密钥可互换,您首先选择的指数必须随机选择为大于 1 且小于 phi(N) 且与 N 或 phi(N) 没有共同质数的奇数。
  • 私钥数据包括公共模数 N 的因子 P、Q。
  • 私钥数据包括公共指数 E。

您的公钥用于加密消息,您的私钥用于解密。 因此,使用您分发的公钥,任何人都可以安全地加密消息,因为知道只有您(或拥有您私钥的人)可以解密它。 要直接回答您的问题,不,它们不可互换 你永远不应该分发你的私钥。

如果您想与多个可能的客户共享密钥,那么实际上有两种选择。 要么你放弃非对称密码学并找到一种安全的方式来分发对称密钥,以便与 AES 而不是 RSA 之类的东西一起使用,或者你要求他们每个人生成一个密钥对并为你提供他们的公钥。 然后您可以解密来自服务器的内容,并为每个客户重新加密。 客户数量将有助于决定您在两者之间的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM