用的就是2个不同的哈希函数来检查文件完整性的好方法?

我有一个网站,用户可以上传他们的文件; 这些被存储在服务器上,它们的元数据记录在数据库中。 我采取一些简单的完整性检查,即“是这个文件的内容,现在字节的字节相同的,因为它上传的时候?”

举个例子:对于内容userfile.jpg哈希是39f9031a154dc7ba105eb4f76f1a0fd4和SHA-1散列878d8d667721e356bf6646bd2ec21fff50cdd4a9 如果这个文件的内容更改,但有相同的MD5哈希之前和之后,是有可能的SHA-1散列也将保持?同一个 (有散列,有时你可以得到一个哈希冲突-这可能发生在两个不同的散列算法一次?)

或者是计算两个不同的哈希值的文件毫无意义的(我应该尝试一些其他的机制来验证完整性)?



编辑:我真的不担心意外损坏,但我应该防止用户更改文件被忽视(生日攻击和朋友)。

我可能会去一个散列,SHA-512 - 检查没有发生,往往是一个性能瓶颈,无论如何,“正如布鲁斯说,有足够的速度快,不安全的系统在那里已经 - @在MichaelGG评论“。

--------------解决方案-------------

MD5可能是安全的,你在做什么,但我们没有理由继续使用哈希已知的缺陷。 事实上,没有理由你不应该usign SHA256或SHA512,除非你有一些已知的主要性能瓶颈。

编辑:为了澄清,没有理由使用两种算法; 只需使用一个适合你的需要。 如果你担心的人做你的MD5碰撞(如,这是一个安全威胁?),然后使用一个算法,不弱,如SHA256。

编辑2:要解决的显然还是常见的误区:寻找一个散列随机碰撞不是1/2的n次方的概率。 它更接近1/2 ^(N / 2)。 因此,一个128位的散列大概可以相撞,2 ^ 64的尝试。 见生日攻击的详细信息。

自行检查MD5哈希足以满足大多数的目的。 但如果你一定要,就在检查另外的SHA1没有坏处。 请记住追赶的东西,你会错过只用MD5校验的可能性极小。

注意,在可扩展性方面,该附加检查增加了在服务器上不必要的负载。

对于文件的完整性(如意外/随机损坏),一个哈希应该足够了。 128位= 2 -128概率一个未检测到错误的,这是对于所有的实际目的足够小。

对于文件加密的完整性(如保证别人没有恶意取代的备用文件),我想你在谈论的皮带和-吊带的方法。

MD5被认为是“弱”在这个意义上,它是可以构造两个文件具有相同的哈希值的CPU时间需要比它低得多的量将采取的强力搜索(“冲突性”MD5已被打破)。

但它不是(据我所知),“弱”,从的角度来看,如果你有一个任意文件X,别人可以创建一个文件Y中相同的哈希以更容易的时间比蛮力搜索(MD5还有“原像电阻”)。 (区别就像之间要参加一个聚会,并找到两个人的生日相同,对发现另一个人用同样的生日和你的区别。)

即使MD5在这方面被打破,这是不可能的,有人能拿出一个算法来创建文档匹配任意MD5哈希 arbritrary SHA1哈希。

这听起来有点像两个格言之间的紧张关系“不要把所有的鸡蛋放在一个篮子里”与“把所有的鸡蛋放在一个篮子里,看着篮子里”。 或者像两个插销锁与1死锁这是好两倍,收费的两倍多花钱。 理想情况下,最好的办法是花的CPU时间计算,而不是使用不同的算法少了两个安全的128位散列一个安全的256位散列。 (是的,我知道,SHA-1是为160bit,这只是一个例子),你更有可能得到更好的性能,这种方式安全性的期望水平-也就是说, 如果 256位散列不破。 如果它坏了,你可能会更好用两个算法的做法只是为了对冲你的赌注。

但同样,如果这仅仅是诚信,以防止错误,一次MD5哈希是好的。

编辑:举一些有用的资料来源:1 2 3,“MD5被认为是有害的今天”,RFC4270,NIST的对SHA-3竞争的最新更新,并且“SHA-3动物园”。

一般来说,如果使用MD5哈希值不匹配,使用SHA1(或任何其它类似的散列)将不会要么匹配。 我不会说有没有可能的情况下,它可能不会发生(因为大家都知道有两种算法的碰撞),但我会说,这将可能永远不会发生在你的情况。

我的想法是,提供出一个哈希可能足以; 多个哈希变得艰巨验证(需要验证的是够糟糕的,这取决于该平台的可用工具),我严重怀疑你会看到一个文件如此惊人的腐败是导致一个完美碰撞。

注:忽略有关验证是一个痛苦的东西; 然而,在重读的问题,我修改这一点 - 我把原来的意思是哈希验证的用户下载该文件。 当然,如果, 是什么意思,那么我所说的仍然适用,我想。

因为两个散列计算不同,两个文件具有相同的MD5哈希没有更可能具有相同的SHA-1散列比两个随机文件。 如果您有任何散列随机碰撞的几率(球场)2 ^ 128,你在这两个随机碰撞的几率将是2 ^ 256。

实际上,你从极低到非常,非常低。

它是由128位,以避免有人将256位加密的equivilent随机猜测你的128位密钥。

作为粗略估计,机会一个MD5假阳性为1 /(2 ^ 128),机会一个SHA-1的假阳性为1 /(2 ^ 160),所以有机会为假阳性为两种算法是1之间/(2 ^ 128)和1 /(2 ^ 288),但你可以相当肯定,这是近1 /(2 ^ 288)的两种算法已被彻底统计检验。

至少,使用两种不同的哈希值的时候,你保护得非常好对蓄意攻击在算法之一。

编辑:经过一番研究,我偶然发现了这个维基百科需要注意的是MD5的生日攻击,​​可以在1分钟内完成的,所以它看起来最好使用不同的算法MD5与SHA-1在这里。 生日攻击的SHA-1需要2 ^ 69行动的时刻。

分类:哈希 时间:2015-03-15 人气:0
本文关键词: 散列,加密,验证
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.600 (s). 10 q(s)