【问题标题】:Why use SHA1 for hashing secrets when SHA-512 is more secure?当 SHA-512 更安全时,为什么要使用 SHA1 来散列秘密?
【发布时间】:2011-02-08 02:14:54
【问题描述】:

我的意思不是让这成为一场辩论,但我试图了解为什么这么多应用程序使用 SHA1 来散列秘密背后的技术原理,而 SHA512 更安全。也许只是为了向后兼容。

除了明显更大的大小(128 个字符对 40 个字符)或速度稍有差异之外,人们使用前者还有其他原因吗?

另外,我相信 SHA-1 是几年前首次被 VCR 的处理器破解的。有没有人破解过 512(可能是用吹叶机),或者它在不加盐的情况下仍然可以安全使用?

【问题讨论】:

  • 并非所有哈希使用都与安全相关
  • @Joe 你确定吗?我听说最近发生了所有这些量子计算,各种加密都被黑了,它可以在几秒钟内破解很多算法。
  • 哦等等。没关系。散列与加密不同。忘记那个细节了。
  • @Javier 查看我的标题,以及与安全有关的问题。我问的是安全性,而不是对象比较或校验和等。

标签: hash sha1 sha512


【解决方案1】:

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,所以虽然偏执狂通常在安全性方面是好的,但你真的必须做数学来确定它是否有意义......在安全性方面的收益是否超过了时间和存储成本?

【讨论】:

  • @Michael 我的真正意思是:为什么人们仍在使用 SHA1 作为安全设备(不是用于校验和或其他目的)。
  • @orokusaki;您可能想更新问题来说明这一点。 :-)
  • @Dean J 我认为标题和问题中的more secure? 部分会解决这个问题。关于sha1 和安全性,我还能指的是什么?
  • @orokusaki;您很容易不知道在安全范围之外使用了哈希值。由于您必须向 两个 为您输入答案的人澄清它,很明显您第一次时不够清楚。
  • boston.com 文章的链接,说明为什么更改密码现在是在付费墙后面。这是 npr 上的另一种选择:npr.org/templates/story/story.php?storyId=125914112
【解决方案2】:

如果您需要快速散列某些内容,或者只需要 160 位散列,则可以使用 SHA-1。

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

如果我不可能得到超过第 10^50 个值的一小部分,那么使用更简单、更快的算法对我所拥有的值进行哈希处理会更快。

【讨论】:

    【解决方案3】:

    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,您将获得大约 6 MB/s,使用完整的 CPU。这已经远远低于网络带宽。 SHA-512 在同一台机器上不会超过 1.5 MB/s。在这样的系统上,性能上的差异是不可忽略的。此外,如果我在我的 Linksys 路由器上使用 SHA-1 进行某些通信协议,那么链接另一端的机器也必须使用 SHA-1。

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

    【讨论】:

    • @Thomas 感谢您提供的重要信息。我只是在 colo 的私人机器中使用 SHA512 进行密码保护,因为我不想要盐渍数据(出于某些强迫症的原因),但我希望它是防破解的(至少在一段时间内)。安全是一个问题,但不存在丢失信用卡号码等的风险。
    • @Thomas Wow,你的回答给我留下了深刻的印象,所以我查看了你的网站和简历。博士在这东西呃。那么,你认为我的密码是个坏主意吗?
    • @orokusaki:对于 colo 中的私人机器的密码保护,密码学是多余的。 如果潜在的攻击者真的有动机,他们只需要对系统进行物理访问(例如,在您输入密码时安装键盘记录设备)。因此,您可以使用任何让您感到“安全”的东西。
    • 我仍然想知道 SHA1 或 SHA256 是否更安全。例如,如果我使用 PBKDF2 进行 10,000 次迭代,那么使用 SHA1 或 SHA256 作为散列算法之间的安全差异是什么?
    • “好消息……” 比赛现在结束了。我们有一个赢家:Keccak (csrc.nist.gov/groups/ST/hash/sha-3/winner_sha-3.html)。你能更新最后一段吗?
    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2017-10-08
    • 2021-12-11
    • 2012-07-18
    • 2021-03-04
    • 1970-01-01
    相关资源
    最近更新 更多