Encryption 用私钥加密而不是签名是个坏主意吗?

Encryption 用私钥加密而不是签名是个坏主意吗?,encryption,encryption-asymmetric,Encryption,Encryption Asymmetric,当用户单击链接时,我使用本地URL方案向客户端提交有效负载,并且必须确保这只用于我的特定web应用程序中。 因此,我使用密钥对,使用私钥加密服务器上的有效负载,生成客户端上的协议处理程序可以使用公钥解密的链接,验证是否应该处理有效负载 那么,发送私钥加密的有效载荷而不是明文有效载荷加签名(如果是,原因是什么)是否安全性较低呢?您所做的就是签名 加密是指使用公钥隐藏有效负载,然后使用私钥解密有效负载。当我想给你发送一条秘密消息时,我会使用你的公钥(因为我知道它)并加密我的消息。这将确保只有您才能使

当用户单击链接时,我使用本地URL方案向客户端提交有效负载,并且必须确保这只用于我的特定web应用程序中。 因此,我使用密钥对,使用私钥加密服务器上的有效负载,生成客户端上的协议处理程序可以使用公钥解密的链接,验证是否应该处理有效负载


那么,发送私钥加密的有效载荷而不是明文有效载荷加签名(如果是,原因是什么)是否安全性较低呢?

您所做的就是签名

加密是指使用公钥隐藏有效负载,然后使用私钥解密有效负载。当我想给你发送一条秘密消息时,我会使用你的公钥(因为我知道它)并加密我的消息。这将确保只有您才能使用私钥对其进行解密

签名是有效的,反之亦然。如果在加密过程中,我希望确保只有您可以解密我的邮件,通过签名,我希望确保邮件的所有收件人都可以确保邮件的真实性。如果您使用私钥(签名)对某些内容进行加密,任何使用您的公钥的人都可以对其进行解密并验证其发件人

在您的情况下,如果您只想证明您的身份(如证书、jwt令牌等),则需要使用签名方法。如果要安全地传输有效负载,请使用加密


希望这有帮助

发现还有其他堆栈交换站点很好地回答了这个问题:


在询问之前,我应该搜索更长的时间。

加密并不能阻止恶意方篡改有效负载。他们看不懂,但他们可以改变它。现在还不清楚你到底想防范什么。而且用私钥加密有效载荷也没有意义。这意味着任何拥有公钥的人都可以解密它,这就违背了加密它的意义。。。我甚至不确定是否有加密算法支持这种毫无意义的操作。看,你要签名。签名可防止有人篡改有效负载。加密并不能防止有人篡改有效载荷,或者制造他们自己的有效载荷。这是完全不安全的。就像我说过很多次的那样,加密并不能阻止某人更改您的有效负载,而且这样的更改可能不会被检测到。如果你设计了一些东西,这样的变化肯定可以被检测到,恭喜你发明了签名(但很糟糕)。请参阅中的“EXT.Hurling THROUGH SPACE-CONTINUOUS”,尽管整个内容非常值得一读。尤其是因为解密的密钥是公开的。攻击者具有无限的脱机权限,试图获得一个有效负载,当使用公钥解密时(攻击者知道密钥是什么),该负载会说出攻击者希望它说的话。私钥几乎是不相关的。人们不需要花很长时间就能发明出一种加密的有效载荷,它能准确地说出他们想要它说什么。我知道我想要的是签名,但有效载荷加上签名对于链接来说非常长,这就是我问这个问题的原因。@Anatol有些签名方案很小。比如,看看AmazonAWS在签署S3存储桶的链接时做了什么。这都是真的,但并没有真正回答我的问题。我知道我应该对有效负载进行签名,但询问使用私钥加密是否比使用私钥签名安全,因为身份在两种方式中都得到了证明。如果你能改变你的答案来回答这个问题,我很乐意接受(经过一些投票).或者这只是一个措辞问题,而你是说,我所做的实际上是签名,因此即使有效负载是加密传输的,而不是明文加上签名/加密哈希?重要的是要强调这里给出的答案之一,即签名加密有效负载的哈希,这与简单地加密有效负载不同。在后一种情况下,攻击者可以很好地控制加密的内容,但在前一种情况下,他们不能。如果我们谈论的是RSA,那么我们使用的是不使用RSA进行加密。我们可以使用RSA进行密钥交换,但DHKE更可取,甚至ECDHKE更好。在任何情况下,如果没有适当的填充,都不应使用RSA。如果仍要使用PKCS#1.5填充或OAEP填充shemes进行加密。签名RSA-PSS是您的选择。我最终得到了
BASE64(GZIP(签名(有效载荷)+有效载荷))