【问题标题】:public key for encryption; private key for de-cryption?用于加密的公钥;用于解密的私钥?
【发布时间】:2011-07-24 22:50:06
【问题描述】:

我了解私钥和公钥在数学上是相关的,用一个密钥加密的数据只能用另一个密钥解密。我的问题是私钥总是用来加密数据,而公钥总是用来解密它?或者反之亦然,如果可以,您能否给出一些示例应用程序,其中它用于其他方向(用于加密的公钥和用于解密的私钥)?

【问题讨论】:

标签: encryption public-key private-key


【解决方案1】:

加密就是要对一些数据保密;数据被转换成不透明的 blob,反向操作需要攻击者不知道的东西,即“秘密”或“私人”信息。加密的全部意义在于 解密 不能仅使用公共信息来完成;因此解密使用私钥。但是,让任何人加密数据都没有问题,因此加密可以使用公钥。

有些算法(实际上只有一种:RSA)乍一看似乎是“可恢复的”:您可能会考虑使用私钥进行加密,使用公钥进行解密。如上所述,存在机密性(如果解密密钥是公开的,那么任何人都可以解密,因此加密数据不再被视为机密)。这种“反向加密”可以用作数字签名算法的基础,其中没有机密性的概念,而是密钥所有者行为的可验证证明。

然而 RSA 不仅仅是模幂运算。 RSA 加密首先通过称为“填充”的操作将输入消息转换为一个大整数。 RSA签名生成首先通过另一个操作将输入消息转换为一个大整数,也称为“填充”; 但是这完全不是 相同的填充。填充对于安全性至关重要,加密和签名所需的特征非常不同。例如,加密填充需要高度随机性,而签名填充需要大量冗余(以及散列函数,以适应长输入消息)。

将签名称为“使用私钥加密”是 RSA 标准历来所说的方式(因此名称如“md5WithRSAEncryption”),但它不准确(填充是并且必须是不同的)并且过于具体(它仅适用于 RSA,不适用于 El Gamal、DSA、Diffie-Hellman、NTRU ......)。这只是一个普遍的混淆。

【讨论】:

    【解决方案2】:

    如果我想向您发送安全消息,我会使用您的 public 密钥对消息进行加密。这样,只有你(知道 private 密钥)可以解密它。

    【讨论】:

      【解决方案3】:

      不仅可以您使用公钥进行加密,这实际上是您进行保密加密时的正常操作模式。这是有道理的 - 任何人都可以使用公钥进行加密,只有正确的接收者才能使用他们的私钥解密。

      在许多公钥系统中,签名在数学上类似于相反的情况——“使用私钥加密”——但请注意,签名操作与加密操作根本不同。例如,对于 RSA,签名必须使用不变的、可验证的填充方法,而加密应该使用随机填充。

      【讨论】:

      • 其实签名更像是用私钥解密。但是,正如您所说,它们在本质上仍然是截然不同的,并且存在重大的重要差异。无论如何,这仅适用于 RSA。
      【解决方案4】:

      它可以互换。

      数字签名 -> 私钥加密,公钥解密以便验证发送者。

      发送消息 -> 公钥加密,私人解密,所有者读取消息。

      编辑:人们似乎不同意“可互换”的定义。我需要澄清一下,我说的是操作的数学角度,而不是在安全性方面最好的。 Ofc,您应该使用键进行预期操作。

      但是,Henrick Hellström 在 SO 线程中的响应解释了为什么它们在数学上可以互换:Are public key and private key interchangeable?

      【讨论】:

      • 不,它不可互换。通过数字签名,私钥签名,公钥验证。签名和解密的工作方式不同,加密和验证的工作方式不同。
      • 说真的,不,这是完全错误的。请阅读how OAEP (encryption with RSA) differs from PSS (signature with RSA)。比较ECDSA(签名)和ECIES(加密)。阅读RSA key generation (§B.3.1) 并注意如何以不同方式创建公共和私有指数。或者甚至只是在这里阅读托马斯的答案。
      • 这是一个经常重复的谬误:这在教科书 RSA (可能还有其他方案)中仅与真实相近,这是非加密货币人们甚至知道的仅有的方案之一。使用大多数签名方案,即使您尝试过,也无法使用私钥操作进行加密,并且有很多公钥加密方案同样不能用于签名。请停止传播这种谬论。
      • @Spyros RSA 根本没有在问题中提及。对于试图“用私钥加密”的通用公钥加密方案甚至没有语法意义。最后,RSA 本身既不是加密方案也不是数字签名方案。这是一个陷门排列,可用于构建这两个东西。
      • @Spyros 你错了。您假设 RSA 操作只不过是应用 RSA 陷门置换(使用两个随机素数的乘积作为模数的模幂运算)。情况并非如此,不仅因为签名、加密和解密使用不同的指数源,而且因为填充(使密码系统安全)完全不同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2012-09-04
      • 1970-01-01
      相关资源
      最近更新 更多