sha1sum可以为两个不同的文件返回相同的结果吗? 我从理论和实践的角度来问这两个问题。
答案 0 :(得分:3)
是。散列的要点是避免有意义的冲突,因此对文件的微小更改会导致哈希值发生较大变化,因此攻击者很难产生冲突。
考虑一下:SHA-1哈希是160位。因此,无法表示任何大于160位的文件的所有可能状态!
答案 1 :(得分:2)
在数学上,所有散列函数都有冲突 - 也就是说,两个输入可以返回相同的散列。对于输入为N
位且输出为M
位的任何函数都是如此,其中M<N
。
虽然我没有密切关注加密新闻,但SHA-1被认为是broken,所以理论上如果你能找到合适的工具,你可以生成两个具有相同SHA1输出的文件。
答案 2 :(得分:2)
SHA-1产生的哈希值只有160位。如果文件长度超过160位,则哈希不再能代表文件的所有可能值,因此如果您要尝试文件中的所有可能值,则一些冲突将是不可避免的。
有一种已知的攻击方式可以创建与SHA-1的冲突,但执行它是非常昂贵的。但是,这种攻击可以让攻击者找到两个产生相同结果的值。 不让攻击者创建一个与我已经创建的文件产生相同哈希的文件。
就替代方案而言,SHA-256 不只是SHA-1“加宽”以产生256位结果而不是160位 - 内部相当复杂(使用六个独立的每轮的功能与SHA-1的三个功能相比,这使得密码分析变得更慢,更困难。已经取得了一些进展,但大部分都是纯理论。
例如,我所知道的最好的攻击仅对故意削弱的SHA-256版本(42轮而不是标准的64轮)起作用。即便如此,它仍然是纯理论 - 它产生了从理论上预期的2 256 产生一个原像的工作,到2 251.7 - - 现在仍然远太多了。
奇怪的是,在针对SHA-256的冲突攻击中似乎有相当少的 进展。我所知道的最好的攻击只能在大约20发左右的时候发挥作用(对19发子弹进行攻击,攻击最多可达23发左右)。
答案 3 :(得分:1)
关于SHA-1碰撞的维基百科:link。一些实数。