用于加密的公钥;用于解密的私钥?
Posted
技术标签:
【中文标题】用于加密的公钥;用于解密的私钥?【英文标题】:public key for encryption; private key for de-cryption? 【发布时间】:2011-07-24 22:50:06 【问题描述】:我了解私钥和公钥在数学上是相关的,用一个密钥加密的数据只能用另一个密钥解密。我的问题是私钥总是用来加密数据,而公钥总是用来解密它?或者反之亦然,如果可以,您能否给出一些示例应用程序,其中它用于其他方向(用于加密的公钥和用于解密的私钥)?
【问题讨论】:
相关并可能解决您的问题:***.com/questions/5421107/… 【参考方案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 陷门置换(使用两个随机素数的乘积作为模数的模幂运算)。情况并非如此,不仅因为签名、加密和解密使用不同的指数源,而且因为填充(使密码系统安全)完全不同。以上是关于用于加密的公钥;用于解密的私钥?的主要内容,如果未能解决你的问题,请参考以下文章