哈希算法的优势

时间:2010-09-22 11:54:37

标签: hash cryptography

我注意到了诸如

之类的东西
  

MD5因冲突而被破解,不再具有加密安全性;请改用SHA-1。 SHA-1因冲突而被破解,不再具有加密安全性;改为使用SHA-2。

根据我目前的理解,从数据h(d)获取特定哈希d的机会对于所有哈希结果是相等的。这意味着,哈希算法的唯一强化机制是返回更长的哈希值。

这也意味着所有哈希(当不考虑哈希结果长度时)对暴力强制同样不安全,并且加密破坏仅指除暴力搜索之外的更快攻击。

这是真的吗?现代加密散列算法使用哪些措施来防止碰撞攻击?

6 个答案:

答案 0 :(得分:11)

语句“X哈希函数已被破坏”意味着哈希函数算法存在缺陷,因此可以比通过强制执行更快地生成冲突。看看this post by Bruce Schneier - 他说现在可以更快地生成SHA-1碰撞,就是这样。

所以是的,他们对暴力破解同样不安全,但这并不是“X哈希函数被破坏”的说法。

答案 1 :(得分:7)

准确地说,可以对哈希函数执行三次“攻击” h

  1. Preimages :给定“输出” y (正确大小的位序列,例如MD5为128位),找到一条消息 m (任意比特序列),使 h(m)= y

  2. 第二张原像:给出消息 m ,找到另一条消息 m',与 m ,这样 h(m)= h(m')

  3. 碰撞:找到两条消息 m m',彼此不同,以便 h(m )= h(m')

  4. 良好的哈希函数是一种能够尽可能最好地抵抗这三种攻击的函数。什么是最好的?它取决于哈希输出大小 n

    考虑一个理论上完美的哈希函数,包含一个黑盒子;盒子里有一个侏儒,一些骰子和一本大书。当被要求输入散列值时,对于给定的输入消息,gnome使用骰子生成随机输出,然后将其返回。但他也在他的大书中写下了这个信息和输出。如果再次要求他输入相同消息的哈希值,那么他将返回与之前相同的值。这种设置是理论家称之为随机预言的设置。随机的oracle从不与自己发生矛盾,但在给出一个精确的问题之前,你对它在给定问题(和输入信息)上会回答的内容一无所知。

    如果随机oracle输出长度为 n 位的字符串,则可以在时间 O(2 n 中找到预映像和第二个预映像,以及时间碰撞 O(2 n / 2 。这里的时间表示对随机预言的请求。对preimages的抵抗很容易理解:攻击者只是尝试消息,直到通过纯粹的运气,oracle输出预期值;他不能做得更好,因为即使是侏儒也不知道他会得到什么新的输入。由于oracle的随机性质一致,预期的试验次数 2 n 。对第二个preimages的抵抗力沿同一条线流动。对于碰撞,这与所谓的birthday paradox相关。

    如果哈希函数的阻力看起来与随机预言的阻力匹配,则认为哈希函数是安全的。它不能做得更好;我们要求它也不会变得更糟。

    当有人想出一种方法来寻找具有高于在随机预言中工作的通用方法的成功率的预成像,第二预成像或碰撞时,哈希函数被称为“破坏”。据说SHA-1被破坏了,因为找到了一个查找冲突的方法,成本约为 2 61 (SHA-1有160位输出,因此应该抵抗碰撞到 2 80 的工作因素。请注意,没有运行完整方法,即我们没有实际的冲突。 2 61 仍然非常高,在可行的边缘(它需要几千台机器,运行几个月或几年)。但 2 61 如果比 2 80 小50万倍,那么这就是休息。

    有时,发现攻击非常昂贵的“中断”(例如, 2 112 的攻击 2 的理论阻力> 168 的)。然后我们谈论一个“学术”的突破:比预期的阻力更快,但仍然完全可以用地球技术撤销。

    请注意,并非所有哈希函数的使用都依赖于对冲突的抵抗。实际上,大多数用法都依赖于对前像或第二前像的抵抗。对于那些攻击,SHA-1目前和新的一样好,其 2 160 阻力。

    相反,即使是具有128位输出的完美散列函数也应该被认为是弱的,至少对于碰撞抵抗:通用攻击,工作因子 2 64 < / em>,属于技术上可行的范围。这就是为什么较新的散列标准使用较大的输出(例如SHA-2从224位输出开始)的原因。足够大的输出可以抵御一般攻击。

答案 2 :(得分:3)

  

现代加密有哪些措施?   哈希算法用于防止   碰撞袭击?

密码学家Bart Preneel的博士论文是对这一主题的一个很好的概述:Analysis and Design of Cryptographic Hash Functions

您可能对provably secure cryptographic hash functions的概念特别感兴趣,它存在但目前不被认为是实用的。

答案 3 :(得分:2)

MD5不是collision resistant。维基百科的定义指出:

  

碰撞阻力是加密哈希函数的一个属性:a   哈希函数是抗冲突的   如果很难找到两个输入   哈希到相同的输出;就是两个   输入a和b使得 H(a)=   H(b)中

MD5生成一个128位哈希,现在可以在几秒钟内完成。

  

现代加密哈希算法使用哪些措施   防止碰撞袭击?

防止它的一种方法是增加散列结果的大小(输出大小,以位为单位)。这允许密码学家 time 调查漏洞。自从我这样做以来已经很久了......但是,简而言之: - )

答案 4 :(得分:1)

我只有部分答案。 =)

  

根据我目前的理解,从数据d获得特定散列h(d)的机会对于所有散列结果是相等的。

事实并非如此。散列点是每次为某些数据d获得相同的散列h(d)。因此,该算法可能没有产生散列的任何“机会”。哈希算法面临的困境是,从d计算h(d)应该很容易,但是从h(d)计算有效d应该很难。

如果从h(d)计算d可以比蛮力更快地完成,则算法被认为是“不加密安全的”。

通过使用返回d的前几位的哈希函数,很容易看出并非所有哈希算法都必须同样不安全。无论你采取多少比特,都很容易发现碰撞。

答案 5 :(得分:1)

是的,“加密破解”意味着这一点。我担心我不是专家,所以我无法回答第二个问题。