5

我记得一个人告诉我,如果我让他更改 4 个字节,他可以使文件具有他想要的任何校验和(CRC-32)。

我听说过给哈希加盐。我想知道是否有人让他的文件与我的文件匹配,是否会加盐 MD5 或 SHA-1 哈希会改变结果,因此两个文件不再冲突?还是仅更改结束哈希值?

4

4 回答 4

6

您正在混淆哈希值的两种不同用途:

  • 用于防止随机(非恶意)错误的校验和。

  • 计算用于存储密码、签名消息、证书的加密消息摘要......

CRC 是第一个应用程序的不错选择,但完全不适合第二个应用程序,因为它很容易计算冲突(用数学语言来说:CRC 是线性的)。这就是你的朋友本质上告诉你的。

MD5 和 SHA1 是用于第二种应用程序的加密哈希。但是,MD5 已经被破解,SHA1 现在被认为是弱的。尽管如此,即使 MD5 可以被破解,也需要很长时间才能找到 MD5 碰撞(几天到几周)。

至于盐,它通过混合一些随机的非秘密值来使加密哈希的计算本地化,这个值称为。这可以防止计算全局表,这使得从散列值计算可能的值(例如密码)变得容易。表格的计算非常昂贵,但如果没有加盐,成本将分摊到许多破解密码上。

于 2009-03-09T09:41:05.557 回答
4

如果您使用的哈希不是 CRC-32,则攻击(针对 CRC-32)是无关紧要的 - MD5SHA-1不容易受到这种攻击(目前)。

当前针对 MD5 的攻击是攻击者创建两个具有相同哈希的文档。

盐用于密码验证——它们防止攻击者对密码数据库执行离线攻击——每个用户的密码在散列之前都有一个附加到纯文本的盐——然后是一个预先计算的明文彩虹表<->散列文本没用。

于 2009-03-09T09:41:53.247 回答
1

如果摘要函数已被破坏,则向哈希函数添加盐实际上并没有任何作用,因为必须将盐公开才能使用,并且攻击者也可以调整他们的文件以将其考虑在内。

这个问题的解决方案是使用安全散列函数。MD5 已证明容易受到哈希冲突的影响,但我相信 SHA-1 没有(到目前为止)。

于 2009-03-09T09:33:15.450 回答
0

加盐通常用于密码哈希以避免字典攻击。有很多基于 Web 的反向哈希字典,您可以在其中输入哈希(例如:1a79a4d60de6718e8e5b326e338ae533)并返回文本:“示例”。有了盐,这几乎是不可能的。如果您在密码前添加随机盐,字典攻击会变得更加困难。

至于冲突,我认为您不必担心整个文件具有相同的 md5 或 sha1 哈希。这并不重要。哈希的重要用途是证明您收到的文件与文件权威人士批准的文件相同。如果向文件中添加盐,则需要发送盐,以便用户可以验证哈希。

这实际上使攻击者更容易欺骗您的文件,因为他可以在虚假文件中提供虚假盐。用户通常可以判断该文件是否是伪造的,因为它不再发挥应有的作用。但是用户应该如何知道正确的盐和攻击者的盐之间的区别呢?

于 2009-03-09T09:34:45.603 回答