RSA加密安全无需签名?

时间:2017-05-31 22:03:59

标签: java encryption rsa

我目前正在开发一个与服务器“对话”的控制面板。

当然,我希望它们之间发送的每个请求都是加密的。

我对加密非常陌生,只是想知道发送使用RSA加密的未签名请求是否安全?

1 个答案:

答案 0 :(得分:0)

这取决于您需要保护什么,尤其是您要发送的内容。如果您要向服务器发送需要保护的信息,使其不被服务器读取,那么RSA可以自行运行。但是,从服务器的角度来看,任何具有足够技术知识的人都可以将该消息发送给作为您的服务器。对RSA加密数据进行签名只是确保服务器正在接收的数据的发送者实际上是您而不是假装是您的某人/某事。如果你想要快速和肮脏的版本,请跳到最后。

由于您不熟悉加密,我将提供简要说明。您可能知道RSA使用公钥 - 私钥系统。任何拥有公钥的人都可以加密数据并将其发送到服务器。但是,只有服务器具有能够解密该数据的私钥。这意味着有人拦截发送到服务器的消息(出于所有意图和目的)无法获取发送的原始消息。然而,某人/某物可以将他们想要的任何加密数据发送到服务器并且"说"是你(如果做得好,服务器就不知道了)。签名进入的地方。签名过程会添加消息 decrypted 的散列(虽然它不是首先加密,但它使用RSA解密算法)与发件人&# 39; s私钥。然后,接收方可以使用发送方的公钥和RSA加密算法来接收原始散列值。没有发件人的私钥,没有可行的方法来生成此签名,因此如果签名中的散列与消息的实际计算散列相同,则必须由声称已发送该消息的任何人发送(或带有公钥的人)。

例如,让我们说Alice正在尝试使用RSA加密向Bob发送消息。她发送加密的消息,但它被Eve拦截。假设密钥足够大,Eve将无法在没有Bob私钥的情况下解密消息。所以,夏娃不能从那个消息中得到很多用处。但是,让我们说Mallory拦截了这条消息。她仍然无法阅读,但她可以用Bob的公钥加密给Bob加密,并让它看起来来自Alice。 Bob无法知道消息实际上并非来自Alice。但是,如果Alice和Bob也使用签名,则Mallory将无法模仿Alice(除非Mallory知道Alice的私钥)。 Alice的消息将包含使用Alice的私钥加密的消息(尽管使用RSA解密算法)。拥有Alice公钥的任何人都可以解密该哈希值,但是如果没有Alice的私钥,Mallory将无法生成Mallory邮件的签名哈希值。 Alice的消息将使用Bob的公钥加密,并且她将在末尾添加消息的散列(再次,使用RSA解密算法)和她自己的私钥。如果Bob收到来自Alice的签名消息,他将使用他的私钥解密该消息并使用Alice的公钥来解密签名(尽管使用RSA加密算法)。然后他会计算消息的哈希值。如果计算的散列与签名中的散列相同,则该消息只能来自具有Alice的私钥的人(出于所有意图和目的,Alice,除非她的安全性受到损害)。

因此,RSA完全可以确保拦截消息的人无法读取消息,但是签名消息对于服务器来说是必要的,以确保消息来自您而不是模仿者。如果你发送一些重要的东西,你也应该使用签名。

关于RSA如何安全:How safe and secure is RSA?

RSA一般(虽然提防维基百科):https://en.wikipedia.org/wiki/RSA_(cryptosystem)

注意:如果你对解释关于哈希加密的RSA签名系统的措辞感到困惑,我会在这里尝试更清楚一些。哈希值使用发件人的私钥加密。这样,只有发送者能够加密哈希,因为只有他们知道他们的私钥。但是,RSA系统使用公钥进行加密,使用私钥进行解密(这是有意义的,只有收件人才能读取消息)。签名需要反向工作,这样只有具有私钥的发件人才能签名,但拥有公钥的任何人都可以查看哈希。因此,签名反向运作。加密签名使用RSA解密算法,解密签名使用RSA加密算法。正如RSA确保只有收件人才能阅读邮件一样,签名反向运行,只有发件人才能签名。

此外,对于那些担心安全性最小的漏洞的人来说,添加散列确实会降低消息的安全性。拥有发件人公钥的任何人都可以在拦截邮件时找到邮件的哈希值。散列函数会压缩消息长度,因此对于给定的散列,可能存在许多具有相同散列的不同消息,它们只是非常不同的消息(对于可以采用理论上无限输入大小的散列,有无限多种可能性)。因此,对于给定的散列算法,存在一种反向算法,该算法可以采用散列并为不同的消息长度提供可能的消息。因此,加密消息的散列可用于获得不同的可能消息值。然后可以使用接收者的公钥对这些值进行RSA加密。如果该加密值与原始加密消息匹配,则解密消息就是该值。这是破解RSA加密的两种方法之一:更受欢迎的公钥分解,以及通过RSA加密运行所有可能的消息来强制所有可能的消息。使用第二个时,使用哈希只会限制必须测试的消息数量,这使得它更容易破解。但是,这很少会出现问题,除非消息非常短(从那时起首先尝试的消息数量非常少,散列可以减少到更少的可能性)。所以,你真的不需要担心这个问题,除非你发送一个非常非常短暂的信息,这是非常绝密的。请记住,这种类型的攻击根本不会破坏私钥,如果攻击者设法解密一条消息,他们将不得不再次通过整个过程来解密另一个消息。因此,它不是一种有效的方法,因此几乎从不使用。我主要是把它放在这里,所以人们不觉得有必要愤怒地评论包含签名的那个缺陷。