加密公钥;用于解密的私钥?

问题描述 投票:2回答:4

我知道私钥和公钥在数学上是相关的,用一个密钥加密的数据只能与其他密钥相关联。我的问题是私钥总是用于加密数据,而公钥总是用来解密它?或者可以是副版本,如果是这样,你可以给一些示例应用程序,其中它用于其他方向(公钥加密和私钥解密)?

encryption public-key private-key
4个回答
-1
投票

它是可以互换的。

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

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

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

然而,HenrickHellström在SO线程中的回应解释了为什么它们可以在数学上互换:Are public key and private key interchangeable?


9
投票

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

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

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

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


1
投票

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.