SHA1 和 RSA 有什么区别?它们只是不同的算法,还是它们从根本上(即用于不同的事物)在某种程度上不同。
6 回答
根本不同。
SHA1是一种哈希算法,它是一种单向函数,将任意大小的输入转换为固定长度的输出(在本例中为 160 位)。加密散列函数是这样一种函数,它不应该找到两个给出相同输出的输入,除非通过蛮力(例如,对于 128 位函数,您应该平均需要尝试 2^64 消息才能找到这样的由于所谓的生日悖论而导致的“碰撞” - 谷歌搜索更多信息)。
事实上,对于 SHA1,情况已不再如此——该算法(至少在密码学术语中)现在已被破坏,Xiaoyun Wang 等人描述的碰撞攻击击败了经典的生日攻击。SHA2 系列没有被破坏,NIST 正在进行一个过程,以就 SHA3 算法或算法系列达成一致。
编辑- Google 现在已经生成并发布了一个实际的 SHA1 冲突。
RSA是一种非对称加密算法,将输入加密为可以解密的输出(对比无法反转的哈希算法)。它使用不同的密钥进行加密(公共密钥)与解密密钥(私有密钥)。因此,这可用于接收来自其他人的加密消息 - 您可以发布您的公钥,但只有拥有私钥的您才能解密已使用它加密的消息。
如果您反转 RSA 的密钥,它可用于生成数字签名 - 通过使用您的私钥加密某些内容,任何人都可以使用公钥对其进行解密,如果他们确定公钥属于您,那么他们拥有相信您是加密原始文件的人。这通常与散列函数一起完成——你对输入进行散列,然后用你的私钥对其进行加密,为你的输入消息提供一个固定长度的数字签名。
前面的答案已经足够解释了。但我认为你问这个问题只是因为 SHA 和 RSA 经常一起出现。所以让我解释一下为什么。
首先,请记住
RSA 效率不高,但 SHA 有效。
假设您下载了 Windows 7,并想确定它是否是 Microsoft 的原始 Windows 7。如果微软只是通过 RSA 加密 Windows 7,那将需要很长时间才能做到这一点,我们根本无法忍受。所以微软在 Windows 7 上使用 SHA1 并生成一个 160 位长的数据。然后微软用 RSA 签署这个 160 位长的数据(使用它的私钥)。
然后,您需要做的就是确保您的公钥来自 Microsoft。然后也使用 SHA1 生成 160 位长的数据。然后使用 RSA 的公钥解密微软的签名。然后你只需比较这两个 160 位长的数据,看看它们是否匹配。
SHA1 是一种散列算法(文档和证书签名),而 RSA 是一种加密/解密算法(安全通信)。
SHA1 是一种加密散列函数,而 RSA 是一种加密算法。
散列函数接受一段数据并返回一个固定长度的字符串。在密码散列函数中,所有返回字符串具有相同的概率。仅给定哈希数,您无法确定输入,也无法找到另一个给出相同哈希的输入(概率非常小的异常)。Sha1 有一些安全漏洞。
加密算法给出了一段数据,但输出不是固定长度 - 你的加密。给定输出(加密),您可以(如果您有正确的密钥)确定输入。
正如其他人所评论的那样,它们是根本不同的东西,服务于不同的功能。您使用 RSA 将信息打乱成看似随机的形式,同时使用 SHA1 来确保消息的完整性(即所有位都没有更改)。在安全应用程序中,您将使用一种或两种,具体取决于您需要的功能。
安全散列算法 (SHA) 算法采用长度小于 264 位的消息并生成 160 位消息摘要。该算法比 MD5 略慢,但较大的消息摘要使其更安全地抵御暴力冲突和反转攻击。安全散列标准 (SHS, FIPS 180) 中指定的算法由 NIST 开发。SHA-1 是 SHA 的修订版,于 1994 年发布;修订版纠正了 SHA 中未发布的缺陷。它的设计与 Rivest 开发的 MD4 系列哈希函数非常相似。SHA-1 也在 ANSI X9.30 标准中进行了描述。
RSA 是一种用于公钥加密的算法。它是已知的第一个适用于签名和加密的算法,也是公钥密码学的第一个重大进步之一。RSA 广泛用于电子商务协议中,并且在足够长的密钥和使用最新实现的情况下被认为是安全的。
最显着的区别是 SHA 是一种加密算法,而 RSA 既是加密算法又是签名算法。
2005 年 8 月 16 日宣布,可以在 SHA-1 中的 2^63 操作中找到冲突。这项研究成果归功于北京清华大学的王晓云教授,以及Andrew Yao教授和Frances Yao教授。它扩展了 Wang、Yin 和 Yu 的工作,证明可以在 2^69 次操作中发现碰撞。这意味着在 SHA 中比在 RSA 中更容易发生冲突 - 但值得注意的是,从未发现有两个相似的密钥发生冲突。