【发布时间】:2011-03-02 21:21:34
【问题描述】:
MD5 和 SHA-1 哈希在碰撞攻击方面存在弱点。 SHA256 没有,但它输出 256 位。我可以安全地获取前 128 位或后 128 位并将其用作散列吗?我知道它会更弱(因为它的位数更少)但否则它会起作用吗?
基本上,我想用它来唯一标识文件系统中的文件,这些文件可能有一天会包含一万亿个文件。我知道生日问题,一个 128 位的哈希应该在万亿文件中产生大约万亿分之一的机会,即会有两个具有相同哈希的不同文件。我可以忍受这些可能性。
我不能忍受的是,如果有人可以轻松地、故意地插入一个具有相同哈希值和文件开头字符的新文件。我相信 MD5 和 SHA1 是可能的。
【问题讨论】:
-
我原以为生日悖论的几率会比这低,但维基百科同意你的观点:en.wikipedia.org/wiki/Birthday_paradox#Probability_table
-
所以...没有对生日悖论维基百科文章的另一个模糊参考,有人可以用相对非技术性的简短语言总结为什么可以截断哈希算法的输出?如果这是一个好主意,为什么哈希算法不只是为您省去麻烦并截断自己呢?换句话说,哈希算法产生的输出在算法的参数范围内总体上保证对于每个输入都是唯一的。实际算法本身是否保证前 128 个字符是唯一的?
-
你真的能从一篇关于生日悖论的文章中推断出截断 SHA-256 的输出是有效的,该文章讨论了一般的散列,但没有提到截断散列算法的输出的影响,让仅截断任何特定散列算法的输出的影响? SHA-256 产生 256 位结果,是吗?它确实 not 输出 128 位结果。该算法的作者在哪里声明,如果你任意丢弃 128 位结果,你是安全的?就此而言,截断的 SHA-256 比完整的 160 位 SHA-1 更安全吗?