一方面,我听到有人说这两个密钥完全可以互换,第一个密钥会解密第二个加密的密钥。这让我觉得这两个键是可以互换的。
但另一方面,RSA生成的密钥似乎有不同的长度,另一方面,使用私钥加密的另一个主题称为“签名”,并且被认为比使用公钥加密更不安全。 (2)
最重要的是,当公钥应该在野外公开分发时,应该保持私钥不公开。 (3)
我计划从唯一的服务器接收数据,所以我的想法是在该服务器上保留公钥以加密数据,并将私钥分发给所有可能的客户,但这与(3)相反。相反,如果我使用私钥分发公钥并加密我的数据,根据(2),加密安全性较低。
我应该分发公钥并使用私钥进行加密以满足(2)或其他方式吗?
注意:就我而言,表现不是问题。
答案 0 :(得分:26)
答案取决于您是出于数学好奇心,还是出于纯粹的实际加密原因而提出您的问题。
如果您正在实施加密系统,则永远不会披露您的私钥,因此从这个意义上来说,密钥绝对不是可互换。此外,您描述的使用场景看起来非常适合身份验证而非机密性,因此服务器发送给客户端的消息确实应该签名而不是加密。如果您还需要保密,则需要在协议中执行更多步骤。
从数学的角度来看,答案是OTOH“是”,假设您使用仅包含模数N和指数D的私钥的内部表示,而另一个指数E是随机生成的。描述两个指数之间关系的公式是1 = E * D(mod phi(N)),因此从数学的角度来看,哪个指数与哪个指数无关。
但另一方面,RSA生成的密钥似乎有不同的长度
如果您使用的生成RSA私钥的实现比相应的公钥长得多,这几乎总意味着实现绝对不适合交替使用公钥和私钥。长度的差异通常是由于以下因素的组合:
答案 1 :(得分:6)
您的公钥用于加密邮件,您的私钥用于解密邮件。因此,使用您分发的公钥,任何人都可以加密邮件,只要您(或拥有您的私钥的人)可以解密它。要直接回答您的问题,不,它们不可互换。您永远不应该分发您的私钥。
如果您想与多个可能的客户共享密钥,那么实际上有两种选择。您要么放弃非对称加密技术,要么找到一种安全的方式来分配对称密钥,以便与AES或RSA之类的东西一起使用,或者要求每个密钥对生成密钥对并为您提供公钥。然后,您可以解密来自服务器的内容,并为每个客户重新加密。客户数量将有助于决定两者之间的选择。
答案 2 :(得分:-2)
公钥加密。私钥解密。他们不会转身。
为了使其正确,您应该做的是每个客户(客户)都有一个私钥/公钥对。当服务器需要发送一些数据时,它应该从客户端(客户)请求公钥并将其用于加密。然后,客户(只有正确的客户)将能够解密他们收到的信息(使用他们严密保密的私钥)。