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

时间:2012-02-09 09:52:25

标签: encryption rsa encryption-asymmetric

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

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

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

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

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

注意:就我而言,表现不是问题。

3 个答案:

答案 0 :(得分:26)

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

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

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:-2)

公钥加密。私钥解密。他们不会转身。

为了使其正确,您应该做的是每个客户(客户)都有一个私钥/公钥对。当服务器需要发送一些数据时,它应该从客户端(客户)请求公钥并将其用于加密。然后,客户(只有正确的客户)将能够解密他们收到的信息(使用他们严密保密的私钥)。