这是微不足道,使用安全的散列函数喜欢沙-256,和继续使用MD5安全的鲁莽行为。然而,有一些复杂的散列函数的漏洞,我想更好的了解。

冲突已 产生于MD4和MD5.根据NIST,MD5不是一个安全的散列函数。只需要 239 操作产生的碰撞 而且永远不应该 使用的密码.然而SHA-1是脆弱的一个 类似的碰撞击 在这一碰撞可以发现,在269 操作,而暴力280.没有一个已经产生SHA-1和碰撞 NIST仍然列出了SHA-1作为一个安全的信息摘要功能.

所以当它是安全使用一个破碎的散列函数?即使一个功能是破裂仍然可以"大不够"。 根据Schneier 散列函数易受到碰撞击仍可以用作一个 HMAC.我相信这是因为安全的HMAC是依赖于其秘密的关键和碰撞不可能找到直到这关键是获得。一旦你有钥匙的用HMAC它已经坏了,所以这是一个有争议的问题。什么样的散列函数的漏洞将会损害安全的一个HMAC?

让我们把这酒店一点进一步。它随后成为安全使用的一个非常微弱的信息摘要像MD4于密码,如果一个盐是前面添加到密码吗?铭记MD4和MD5攻击的前缀的攻击,并且如果一个盐是前面然后攻击者无法控制的前缀的信息。如果盐是一个真正的秘密,是不是已知的攻击,那么不管它是所附的密码?它是安全的假设攻击者不能产生碰撞,直到整个信息已经得到的?

你知道的其他情况下其中一个破碎的散列函数能够用在安全上下文中没有引入一个漏洞?

(请后的支持的证据,因为它是真棒!)

有帮助吗?

解决方案

实际上碰撞更易于什么你名单上的两MD5和SHA-1。MD5冲突可以找到在时间上相当于 226.5 操作(其中一个"操作"计算的MD5过短信息)。看看 这页 对于一些细节和执行的攻击(I写的代码;它找到一个碰撞内平均14秒2.4千兆赫酷睿2x86在64位的模式)。

同样,最着名的攻击沙-1是在大约 261 操作,不 269.它仍然是理论性的(没有实际的冲突产生的尚)的,但它在该领域的可行的。

作为影响安全性:散列函数通常是说已经三个特性:

  • 没有preimage:给予 y, 它应该不可能找到 x 这样, h(x)=y.
  • 没有第二preimage:给予 x1, 它应该不可能找到 x2 (不同 x1)这样的, h(x1)=h(x2).
  • 没有碰撞:它应该不可能找到任何 x1x2 (不同)这样的, h(x1)=h(x2).

一散列函数 n位输出的,还有一般的攻击(其工作无关的详细信息的散列函数)在 2n 作为两个第一个属性, 2n/2 操作的三分之一。如果,对于给定的散列函数、攻击被找到,其中,通过利用特殊的详细信息的散列函数的运作,找到一个preimage,第二preimage或碰撞的速度比相应的通用攻击,然后将散列函数是说是"打破"。

然而,并非所有用途的散列函数依靠所有三个属性。例如,数字签名的开始通过散列的数据,这是签署了,并随后的散列值用于其他算法。这种依赖性以preimages和第二preimages,但是数字签名是不是,本身受到影响的冲突。冲突可能是一个问题在一些特定的签字方案,其中攻击就可以选择数据,是要签名受害人(基本上,攻击计算碰撞,有一个消息签署的受害者,并签署成为有效的其他信息)。这可以抵消由加上一些随机的字节的签名的消息之前计算的签名(攻击和解决方案,其中证明在这方面的X.509证书)。

HMAC安全依靠 其他的 财产的散列函数必须履行;即,"压缩功能"(基本砖上的散列函数是建立)行为作为 以伪随机的功能 (PRF)。细节是什么PRF是相当技术性的,但是,大体上讲,一个PRF应该是无法区分 随机Oracle.随机oracle建模为黑盒,其中包含一个侏儒,一些骰子和一个大的书。在某些输入数据,侏儒的随机选择一个输出(与骰子)和写下书中的消息输入和输出这是随机选择的。Gnome使用这本书来检查他是否已经看到了同样的输入信息:如果是这样,然后返回侏儒相同的输出超过以前。通过建设,你可以什么都不知道的输出一个随机oracle上给予消息直到你可以试试。

随机oracle模型允许HMAC安全证明可以定量调用的PRF。基本上,这证明国家HMAC无法打破而不调用PRF一个巨大的次数,并通过"巨大的"我的意思是计算上不可行的。

不幸的是,我们没有随机的神谕,因此在实践中,我们必须使用的散列函数。没有任何证据证明的散列函数确实存在,与PRF财产;现在,我们只有候选人,即职能,对此我们无法证明(尚未),其压缩能不PRF。

如果 压缩的功能是一个PRF 然后 散列函数是自动防冲突。那是神奇的一部分的PRF。 因此, 如果我们能找到碰撞散列函数,那么我们知道,内部压缩功能不是一个PRF。这不会变的碰撞进攻击HMAC。能够产生碰撞将无助于打破HMAC。然而,这些冲突表明,安全证明相关HMAC不适用。保证是无效的。这只是相同的,比笔记本计算机:开口的情况并不一定突破的机,但事后,你是你自己的。

Kim-Biryukov-Preneel-香 文章,一些袭击HMAC介绍,特别是伪造的攻击HMAC-MD4.攻击的攻击的不足MD4(其"弱点"),使它成为一个非PRF。变种的同样的弱点被用以生成的碰撞上MD4(MD4是彻底破碎;一些袭击产生碰撞的速度比计算的散列函数本身!).这样的碰撞并不意味着HMAC攻击,但这两种攻击的饲料相同的来源。但是,请注意,伪造的攻击具有成本 258, ,这是相当高(没有实际的伪造产生的,结果仍是理论上的),但大大低于阻水平预计将从HMAC(一个强大的散列函数的一个 n位输出,HMAC应抵抗了 2n 工作的因素; n=128 为MD4).

因此,尽管冲突不 每se 意味着弱点在HMAC,他们是坏消息。在实践中,冲突是一个问题对极少数的设置。但我们知道是否冲突影响给予使用的散列函数是棘手的足够,这是非常不明智的,以保持使用一散列函数为它碰撞是证明。

为SHA-1,攻击仍然是理论性的,和SHA-1被广泛部署。情况已经描述了这样的:"警报,但是没有可见的火或烟雾。这是时间走向的出口--但不能运行。"

更多信息,关于这个问题,开始通过阅读的第9章 Handbook of Applied Cryptography, 通过梅内泽斯、范Oorschot及*范斯顿,必须阅读的学徒密码破译(不要混淆"应用加密技术",由B.施奈尔,这是一个写得很好的简介,但无处可为彻底的"手册").

其他提示

唯一的时间是安全的使用一个破碎的散列函数是当后果的冲突是无害的或微不足道的,例如当分配的文件桶上的一个文件系统。

当你不在乎它是否是安全的,或者不。

说真的,它不采取任何额外的努力,使用安全的散列函数中几乎每一种语言,并且性能的影响是可以忽略不计,因此我不明白为什么你不会。

[编辑之后实际上读取你的问题]

根据Schneier散列函数易受collsion攻击仍然可以被用作HMAC。我相信这是因为安全的HMAC取决于其秘密的关键和碰撞不可能找到直到这关键是获得。

实际上,它是本质上是因为能够产生碰撞的一散列并不一定帮助你产生碰撞的 散一散列 (结合的异或使用通过Hmac).

它随后成为安全使用的一个非常微弱的信息摘要像md4于密码,如果一个盐perpended的密码?

不,不,如果散列有一个 preimage攻击 它可以让你在前面加上数据输入。例如,如果哈希 H(pass + salt), 我们需要一个preimage的攻击,这使我们能够找到pass2这样 H(pass2 + salt) = H(pass + salt).

有了追加的攻击在过去,所以我敢肯定,在前面加攻击,也是可能的。

网站下载使用MD5hash作为一个检验和确定如果该文件被损坏的期间下载的,我会说一个破碎的散列是好足够的用于这一目的。

可以说,一个中间人决定修改文件(说zip archive,或exe)。现在,攻击者已经做的两件事--

  1. 找到一个散列冲突,并创建一个修改的文件出来的
  2. 确保新建立的文件 也是 一个有效的exe或zip archive

一个破碎的散列,1个是更容易一点。但是,确保碰撞的同时满足其他已知的性质的文件是太昂贵的计算.

这完全是我自己的答案,我可能是可怕的错误。

答案完全取决于你是什么使用它的。如果你需要防止有人产生碰撞的几毫秒,我就不太担心比如果你需要防止有人产生碰撞的内的几十年。

什么问题你实际上是试图解决?

大部分的担心使用类似MD4密码是有关少到目前已知的攻击,于事实,即一旦已经分析了点冲突的产生是容易的,这是一般的推定是相当多的可能性,有人将能够使用这些知识,以创建一个preimage攻击--当/如果发生这种情况,基本上所有的可能用途,散列函数变得脆弱。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top