是否可以将SHA256哈希截断为128位?

时间:2010-06-11 22:54:44

标签: hash md5 sha256 sha

MD5和SHA-1哈希具有抵御冲突攻击的弱点。 SHA256没有,但它输出256位。我可以安全地获取第一个或最后一个128位并将其用作哈希吗?我知道它会变弱(因为它的位数较少),但它会起作用吗?

基本上我想用它来唯一地识别文件系统中可能有一天会包含万亿个文件的文件。我知道生日问题,128位散列应该会产生大约1万亿的机会,万亿个文件会有两个不同的文件具有相同的散列。我可以忍受这些可能性。

我不能忍受的是,如果有人可以轻易地,故意地插入具有相同散列和文件的相同开头字符的新文件。我相信MD5和SHA1这是可能的。

3 个答案:

答案 0 :(得分:7)

是的,那会有效。从理论上讲,最好将两半合并,但即使截断SHA256也比MD5强。您应该仍然认为结果是128位哈希而不是256位哈希。

我在这种特殊情况下的特别建议是使用HASH + uniquifier进行存储和引用,其中uniquifier是您之前使用此哈希看到的不同文件数量的计数。这样,如果有人试图为SHA256存储未来发现的碰撞向量,你就不会完全失败。

答案 1 :(得分:4)

但值得吗?如果每个文件都有一个哈希值,那么基本上每个文件都有一个开销。假设每个文件必须占用至少 512字节(典型的磁盘扇区),并且您正在紧凑地存储这些哈希值,以便不会使每个哈希值比哈希值大得多

因此,即使您的所有文件都是512字节,也就是最小的文件,您正在谈论16 / 512 = 3.1%32 / 512 = 6.3%。实际上,我敢打赌你的平均文件大小更高(除非所有文件都是1个扇区...),因此开销会更少。

现在,哈希所需的空间量与您拥有的文件数呈线性关系。那个 的额外空间是多少?即使你有你提到的万亿文件 - 那是1 000 000 000 000 * 16 = ~29 TiB,这是一个很大的空间,但请记住:你的数据将是1 000 000 000 000 * 512 = 465 TiB。实际上,这些数字毫无价值,因为它仍然是3%6%开销。但是在这个级别,你有半PB的存储空间,15​​ TB的数据是否重要?在任何级别,3%节省是否意味着什么?请记住,如果它们更大,则可以节省更多。 (其中,它们可能是:在该硬盘大小上获得512字节扇区大小的好运。)

因此,3%或更少的磁盘节省是否值得在安全方面存在潜在风险。 (我将不予回答,因为它不是我的一杯茶。)

或者,您是否可以以某种逻辑方式将文件组合在一起,以便您拥有更少的文件? (我的意思是,如果你有数万亿个512字节文件,你真的想要对磁盘上的每个字节进行哈希处理吗?)

答案 2 :(得分:0)

是的,那会有用。

为了记录,已知有针对MD5的使用中的碰撞攻击,但SHA-1攻击在这一点上完全是理论上的(尚未发现SHA-1碰撞......)。

相关问题