有意创建两个文件以具有相同的哈希?

6 hash cryptography hash-collision

如果有人故意尝试修改两个文件以具有相同的哈希值,那么有什么方法可以阻止它们?md5和sha1可以阻止多数情况吗?

我正在考虑写自己的,我想如果用户不知道我的哈希,我可能无法愚弄我的做法,即使我做得不好.

防止这种情况的最佳方法是什么?

Jon*_*ler 18

如果哈希冲突是一个主要问题,MD5通常被认为是不安全的.SHA1同样不再被美国政府接受.目前正在寻找替代哈希算法的竞争,但目前的建议是使用SHA2系列 - SHA-256,SHA-384或SHA-512.[ 更新时间:2012-10-02 NIST选择SHA-3作为算法Keccak.]

您可以尝试创建自己的哈希 - 它可能不如MD5好,并且"通过默默无闻的安全性"同样不可取.

如果您需要安全性,请使用多个哈希算法进行哈希 能够使用多种算法同时创建具有散列冲突的文件是不太可能的.[并且,根据评论,让我说清楚:我的意思是发布文件的SHA-256和Whirlpool值 - 不是组合哈希算法来创建单个值,而是使用单独的算法来创建单独的值.通常,损坏的文件将无法匹配任何算法; 如果,有人已设法使用一种算法创建碰撞值,那么在其他算法中产生第二次碰撞的可能性可以忽略不计.

所述公共时间戳使用的算法的数组.例如,请参阅sqlcmd-86.00.tgz以获取说明.

  • 关于安全性的第二部分并非如此 - 如果没有对它们如何交互的深入数学理解,那么组合多个哈希算法是不可取的.一个孔可以被另一个放大. (2认同)
  • 不要乱用 - 使用SHA512. (2认同)

Bil*_*ard 5

如果用户不知道您的散列算法,他也无法在您实际签署的文档上验证您的签名。

最好的选择是使用生成最长哈希的公钥单向哈希算法。SHA-256 创建一个 256 位哈希,因此伪造者在创建与给定文档匹配的文档之前必须尝试 2255不同的文档(平均),这是非常安全的。如果这对您来说仍然不够安全,则可以使用 SHA-512。

另外,我认为值得一提的是,保护自己免受伪造数字签名文档的一种很好的低技术方法是简单地保留您签名的任何内容的副本。这样,如果归结为争议,您可以证明您签署的原始文件已被更改。

  • 您不用将指数除以 2,而是将其减一,这就是为什么它是 255 而不是 256。 (2认同)
  • 注意匹配给定目标和尝试生成碰撞对之间的差异。比尔谈论前者,乔纳森谈论后者。 (2认同)