对像MD5这样的哈希蛮力有什么大不了的

Jan*_*hek 9 security hash md5 cryptography sha1

我花了一些时间阅读/sf/ask/193777391/(我强烈推荐!).

在其中,它讨论了哈希冲突.也许我在这里遗漏了一些东西,但是你不能只用MD5加密你的密码,然后再说SHA-1(或其他任何一个,没关系.)这不会增加所需的处理能力蛮力哈希并减少碰撞的可能性?

roo*_*ook 5

首先,md5和sha1不是加密函数,它们是消息摘要函数.此外,大多数哈希在现实世界中使用像John The RipperRainbow Crack这样的字典攻击而被打破.

John The Ripper最适合盐渍密码,攻击者知道盐值.Rainbow Crack适用于含有少量未知盐和直接哈希的密码md5($pass).

Rainbow Crack需要很长时间来构建表格,但在此之后密码会在几秒钟内中断.这取决于磁盘驱动器的速度.


tst*_*ter 4

您正在谈论两个不同的(尽管相关的)问题。首先是碰撞的可能性,其次是对大量值运行算法以找到创建哈希的原始值的能力。

  1. 碰撞。如果运行 sha1(md5(text)),您首先会获得 md5 的哈希值,然后将其传递给 sha1。假设 sha1 函数有 128 位输出,md5 也有 128 位输出。md5 函数中发生碰撞的几率是 1/2^128。那么你在 sha1 中发生碰撞的几率是 1/2^128。如果其中一个发生冲突,则函数整体发生冲突,因此结果是(1/2^128) + (1/2^128)1/2^127
  2. 暴力破解。运行 sha1(md5(text)) 只会使查找原始字符串所需的时间增加一倍。就安全性而言,这不算什么。例如,如果每个算法都有 128 位的输出空间,并且暴力破解需要 1 小时,那么运行相同的暴力破解两次才能获得原始字符串将需要 2 小时。这与将输出空间增加到 129 位相同。然而,如果你真的想让暴力破解变得不可能,你所要做的就是将输出大小加倍(可以与加密中的密钥大小进行比较)。

  • 嗯,这个答案对于碰撞来说是不正确的。md5 空间中的冲突将转移到 sha1 函数,因为 md5 函数的熵减少意味着 sha1 函数的输入熵减少,因此这对函数能够产生的哈希总数的熵减少。生产。1/2^128 是完全错误的。 (2认同)
  • 这比关于碰撞的情况更糟糕。MD5 的任何冲突 (`MD5(text1)=MD5(text2)`) 也是 SHA1+MD5 的冲突 (`SHA1(MD5(text1))=SHA1(MD5(text2))`。因此,由于 MD5 已被破坏在碰撞方面,SHA1+MD5 也被破坏了。 (2认同)