公钥和私钥是否可以互换?

qdi*_*dii 13 encryption rsa encryption-asymmetric

一方面,我听到人们说这两个密钥是完全可以互换的,第一个密钥会解密第二个加密的密钥.这让我觉得这两个键是可以互换的.

但另一方面,RSA生成的密钥似乎具有不同的长度,而在另一个主题上,使用私钥加密被称为"签名",并且被认为比使用公钥加密更不安全.(2)

最重要的是,当公钥应该在野外公开分发时,应该保持私钥不公开.(3)

我计划从一个独特的服务器接收数据,所以我的想法是在该服务器上保留一个公钥以加密数据,并将私钥分发给所有可能的客户,但这与(3)相反.相反,如果我使用私钥分发公钥并加密我的数据,根据(2),加密安全性较低.

我应该分发公钥并使用私钥进行加密以满足(2)或其他方式吗?

注意:就我而言,性能不是问题.

Hen*_*röm 31

答案取决于您是出于数学好奇心提出问题,还是出于纯粹的实际加密原因.

  • 如果要实现一个加密系统,你应该永远不会透露你的私钥,所以在这个意义上的键是绝对不能互换.此外,您描述的使用场景看起来非常适合身份验证而非机密性,因此服务器发送给客户端的消息确实应该签名而不是加密.如果您还需要机密性,则需要在协议中执行更多步骤.

  • 从数学的角度来看,答案是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.

  • @adg在某些情况下,保存在私钥中的信息包括素因子(P,Q)和私有指数(D).这足以导出公共指数(E). (3认同)

Dav*_*d M 6

您的公钥用于加密邮件,您的私钥用于解密邮件.因此,使用您分发的公钥,任何人都可以加密邮件,只要您(或拥有您的私钥的人)可以解密它.要直接回答你的问题,不能互换.您永远不应该分发您的私钥.

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