代码之家  ›  专栏  ›  技术社区  ›  laktak

公钥和私钥有何不同?

  •  18
  • laktak  · 技术社区  · 17 年前

    我有一个后续问题要问 Given a private key, is it possible to derive it’s public key?

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

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

    4 回复  |  直到 9 年前
        1
  •  13
  •   kriss    17 年前

    一些 描述将公钥和私钥的角色呈现为非常对称但 在现实世界中,您绝对不能交换私钥和公钥的角色 .

    常用 :

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

    • 您不想让用户选择应该发布和不发布哪个密钥 . 公开密钥在世界范围内发布,您可以将其视为您的公共身份。当您必须向其他人证明您比其他人更了解此身份时,您需要私人部分:您可以阅读发送给它的消息,您可以对任何知道您的公共id的人都可以验证的消息进行签名。如果要发布的公钥/私钥的哪一部分留给了用户,则最终用户将同时发布这两部分。但这不是主要原因。

    • 我知道的每个常见实现都提供了从私有文件提取公钥的工具。pgp、gpg和openssl都是如此。这意味着所谓的私钥文件存储算法中描述的私钥和公钥。那是故意的。

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

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

    应该很清楚,第一个命令在私钥文件中生成两个密钥,而公钥只是从中提取出来的。

    • :好的,前面的一点已经足够了,但是一些狡猾的用户可能会考虑使用非对称加密 隐藏两个密钥以交换数据。如果你想进行这种交换,就不要使用对称加密。是的,可以使用私钥对消息进行加密,然后使用公钥对其进行解密(这基本上就是用于签名的内容,但用例不同,因为您也有初始消息)。这两个密钥的内部参数并不相同,密码学的所有优点都被证明只适用于通常的方向和常见用途。
        2
  •  11
  •   Mehrdad Afshari    12 年前

    这实际上取决于你所谓的“私钥”。在几乎所有实际情况下,知道私钥的发送方也知道公钥。它向其他人提供其公钥,因此它需要知道它。因此,本质上,“私钥”将包含“公钥”信息,或者至少可以从中派生出来。

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

        3
  •  2
  •   TheTXI    17 年前

    从…起 http://www.webopedia.com/TERM/P/public_key_cryptography.html

    一种使用两个密码的密码系统 密钥——每个人都知道的公钥 以及仅已知的私钥或秘密密钥 发送给邮件的收件人。什么时候 Jane,他用Jane的公钥 加密消息。然后简使用 用她的私钥解密。

    制度是公共的和私人的 加密消息,并且仅对 可以使用相应的私钥 几乎不可能推断出 私钥,如果您知道公共密钥 钥匙

        4
  •  2
  •   dirkgently    17 年前

    在PPK世界的钥匙。通常使用公钥加密,使用私钥解密。因此,您可以与朋友共享公钥,并要求他们在向您发送银行账号时使用公钥。