【问题标题】:Why is senders private key used in encryption?为什么发件人私钥用于加密?
【发布时间】:2016-07-01 09:57:37
【问题描述】:

我正在查看 libsodium-examples of public-key-cryptography,似乎在加密明文时,除了接收者的公钥之外,还使用了发送者的私钥。

从相关example中提取:

crypto_box_easy() 函数加密一条长度为 mlen 个字节,带有接收者的公钥 pk,发送者的密钥 sk 和一个随机数。

这有什么意义?我的理解是发件人的私钥仅在签署消息时使用?

【问题讨论】:

  • 好的,我想我对公钥密码学的掌握不足。我将有一些阅读要做...
  • @zaph 但为什么示例中的加密代码 crypto_box_easy() 使用发件人的私钥?
  • 你必须知道用例。
  • 这是另一个镜头,它与现实相距不远。开发人员只是想“把它放进去”,而 PM 毫无头绪,所以它就在那里。认为开发人员对用法有很好的了解可能是错误的。我知道一个复杂产品的密码开发人员不知道对称和非对称加密之间的区别的案例,即使他们正在研究它。当我移植一个 unix 内核时,我没有很好地掌握使用 unix 广告被告知没有 ie 让我学习,只需让文件系统工作。

标签: public-key-encryption libsodium


【解决方案1】:

数字签名用私钥加密,用公钥解密。这允许任何人使用签名者的公钥验证签名。

【讨论】:

  • 是的,但我的问题是关于加密步骤的。在引用的示例中,发送者的私钥用于将明文加密为密文。
  • 可以做到,但除了代码签名外不应该这样做。由于公钥是公开的,这意味着任何拥有公钥的人(基本上每个人)都可以解密使用私钥加密的任何内容,因此没有安全性。但是有一些非常有限的用例可能是可取的。
【解决方案2】:

libsodium 文档引用了一个“身份验证标签”,在以下部分的 different chapter 中进行了解释:

This operation: 

 * Encrypts a message with a key and a nonce to keep it confidential.
 * Computes an authentication tag. This tag is used to make sure that
   the message hasn't been tampered with before decrypting it.

所以 libsodium 所称的身份验证标签等价于更常见的对消息进行签名的术语。因此,crypto_box_easy(...) 函数将发送者的私钥作为输入是有意义的,因为加密实际上是加密和签名。

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 2010-09-21
    • 2011-07-24
    • 2016-06-07
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多