3

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

4

4 回答 4

10

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

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

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

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

于 2011-03-29T11:08:13.467 回答
1

如果我想向您发送安全消息,我会使用您的公钥加密该消息。这样,只有你(知道私钥)才能解密它。

于 2011-03-29T02:58:04.180 回答
1

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

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

于 2011-03-29T03:00:02.300 回答
-1

它可以互换。

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

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

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

但是,SO线程中的Henrick Hellström响应解释了为什么它们在数学上可以互换:公钥和私钥是否可以互换?

于 2011-03-29T02:55:01.573 回答