当SHA-512更安全时,为什么要使用SHA1来实现散列机密?

时间:2010-04-14 19:55:55

标签: hash sha1 sha512

我并不是说这是一场辩论,但我正在努力理解为什么这么多应用程序使用SHA1来散列秘密的技术原理,当SHA512更安全时。也许这仅仅是为了向后兼容。

除了明显更大的尺寸(128个字符与40个字符)或轻微的速度差异外,还有其他原因让人们使用前者吗?

此外,SHA-1我认为几年前VCR的处理器首次破解了它。还有人破坏了512(可能还有一台吹叶机),或者没有盐腌还可以安全使用吗?

3 个答案:

答案 0 :(得分:42)

SHA-1的大多数用途都是为了互操作性:当我们实施强制要求SHA-1的协议时,我们使用SHA-1。易于开发也考虑在内:各种语言和编程环境中的SHA-1实现比SHA-512实现更常见。

此外,即便如此,大多数哈希函数的使用都没有性能问题(至少,哈希函数是瓶颈时没有性能问题),有些架构的SHA-1比SHA-512效率高得多。考虑一个基本的Linksys路由器:它使用Mips衍生CPU,时钟频率为200 MHz。这种机器可以重新编程,例如,使用OpenWRT(用于嵌入式系统的小型Linux)。作为路由器,它具有快速网络(100Mbit / s)。假设您想要散列某些数据(例如,作为某些VPN软件的一部分 - 路由器看起来像是运行VPN的良好候选者)。使用SHA-1,使用完整的CPU可以获得大约6 MB / s的速度。这已经远低于网络带宽。 SHA-512在同一台机器上不会超过1.5 MB / s。在这样的系统上,性能的差异是不可忽视的。另外,如果我在Linksys路由器上使用SHA-1进行某些通信协议,那么链路另一端的机器也必须使用SHA-1。

好消息是,正在进行竞争以选择代号为SHA-3的新标准哈希函数。一些竞争候选者提供类似于SHA-1的性能,甚至更好,同时仍然产生512位输出并且(可能)与SHA-512一样安全。

答案 1 :(得分:24)

SHA1和SHA512都是哈希函数。如果您将它们用作加密哈希,那么也许这是使用SHA512的充分理由;但是,有些应用程序仅使用这些功能来识别对象。例如,Git使用SHA1来廉价地区分对象。在这种情况下,由于使用SHA1时两个文档之间发生冲突的可能性非常小,因此当SHA1超出适合该任务的范围时,SHA512的额外空间要求确实没有理由。

在加密哈希和使用盐的选择方面,您可能有兴趣阅读Don't Hash Secrets。即使使用SHA512,使用盐也是一个好主意(并且它也很便宜,所以为什么不这样做?),因为你可以猜出顶级密码,看看它们是否有相同的哈希,但作者指出HMAC是一种更安全的机制。在任何情况下,您都必须确定与额外时间+空间相关的成本以及与违规可能性相关的成本,并确定您想要的偏执程度。正如微软最近发现的那样,constantly changing passwords is a waste of money and doesn't pay off,所以虽然在安全性方面偏执通常是好的,但你真的需要做数学来确定它是否有意义......安全性的好处超过时间和存储成本?

答案 2 :(得分:3)

如果您需要快速哈希,或者只需要160位哈希,那么您将使用SHA-1。

为了快速地将数据库条目相互比较,您可以获取100个字段并从中生成SHA-1哈希值,产生160位。那些160位是10 ^ 50ish值。

如果我不太可能只有10 ^ 50个值的一小部分,那么使用更简单,更快速的算法来散列我所拥有的东西会更快。