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

Sun*_*rai 14 hash md5 sha sha256

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

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

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

Jos*_*hua 8

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

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

  • 我找不到任何参考文献,说在理论上将两半的XOR合在一起更好,我对此持怀疑态度.有趣的想法与uniquifier. (10认同)

Blu*_*eft 0

是的,那会起作用的。

根据记录,已知存在针对 MD5 的正在使用的冲突攻击,但 SHA-1 攻击目前完全是理论上的(尚未发现 SHA-1 冲突......)。

  • SHA-256(OP正在谈论的散列)是SHA-2,而不是SHA-1 - 我认为?到目前为止,还没有发现 SHA-2 的冲突……甚至理论上也没有。 (2认同)
  • 2^128 倍大?哇!;)我想你可能想检查一下你的数学,或者你的措辞...... (2认同)
  • 今年早些时候就发现了 SHA-1 冲突:https://shattered.io/ (2认同)