公钥和私钥有何不同?

时间:2009-03-30 09:29:27

标签: cryptography

我对Given a private key, is it possible to derive it’s public key?

有一个跟进问题

公钥和私钥是否“相同”(在您选择公开的意义上)或者您可以使用私钥而不是使用公钥执行更多操作?

编辑 - 更好地陈述我的问题:

当生成两个密钥时,我可以随机选择其中一个作为公钥吗?

4 个答案:

答案 0 :(得分:12)

某些 paper 描述将公钥和私钥的角色视为非常对称但您绝对无法在现实世界中交换私钥和公钥的角色

常用

  • 公钥必须用于加密和验证签名
  • 私钥必须用于解密和签名

有几个原因:

  • 您不希望向用户选择应发布哪个密钥以及哪个密钥。公钥在全球发布,您可以将其视为您的公共身份。当您必须向其他人证明您比其他人更了解此身份时,需要私有部分:您可以阅读发送给它的消息,您可以签署可以由知道您的公共ID的任何人验证的消息。如果要发布的公钥/私钥的哪一部分留给用户,那么最终用户将发布这两部分。但这不是主要原因。

  • 当你拥有私钥时,你真的有两个密钥我知道的每个常见实现都提供了从私有文件中提取公钥的工具。这对pgp,gpg,openssl来说都是如此。这意味着所谓的私钥文件存储私钥和公​​钥,如算法中所述。这是设计的。

例如,使用openssl生成RSA密钥对的命令序列可以是:

openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key

应该很清楚,第一个命令在私钥文件中生成两个密钥,并且仅从中提取公钥。

结果是,如果您的私钥遭到破坏,您的密钥都会受到损害。另一种方法是安全的,如果您既不知道文件中的公钥也不知道数学攻击,则无法推断出私钥。

  • 使用私钥进行加密在数学上很弱:嗯,前一点已经足够了,但有些狡猾的用户可能会考虑使用非对称加密 保持两个键都可以交换数据。如果你想做那种交流,不要使用对称加密。是的,可以使用私钥来加密消息并使用公共密钥对其进行解密(这基本上是用于签名的,但用例不同,因为您还有初始消息)。这两个密钥的内部参数并不相同,密码学的所有强大功能仅适用于通常的方向和常用用途。

答案 1 :(得分:10)

这实际上取决于你所谓的“私钥”。在几乎所有实际的引用中,知道私钥的发送者也知道公钥。它为其他人提供了公钥,因此需要了解它。所以从本质上讲,“私钥”将包含“公钥”信息,或者至少可以从中获取。

通常,您无法交换私钥和公钥。实际上,它们并不总是相同类型(取决于所使用的密码系统)。例如,在ECDSA中,您的公钥是椭圆曲线上的二维“点”,而您的私钥是数字。

答案 2 :(得分:2)

来自http://www.webopedia.com/TERM/P/public_key_cryptography.html

  

使用两个的加密系统   密钥 - 每个人都知道的公钥   以及仅知道的私人或秘密密钥   收件人的消息。什么时候   约翰想要发送一条安全的消息   简,他用Jane的公钥来   加密消息。简然后使用   她的私钥解密它。

     

公钥的一个重要元素   系统是公共和私人的   密钥以这样的方式相关   只有公钥可以用来   加密消息,只加密   可以使用相应的私钥   解密他们。而且,它是   几乎不可能推断出   私钥,如果你了解公众   键。

答案 3 :(得分:2)

没有。这就是在PPK世界中生成密钥的想法。您通常使用公钥加密并使用私钥解密。因此,您要与朋友分享公钥,并要求他们在向您发送银行帐号时使用它。