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

我正在考虑编写自己的哈希值,我想即使我做得不好,如果用户不知道我的哈希值,他也可能无法欺骗我的哈希值。

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

有帮助吗?

解决方案

如果哈希冲突是一个主要问题,MD5通常被认为是不安全的。 SHA1同样不再被美国政府接受。 竞赛正在寻找替代哈希算法,但目前的建议是使用SHA2系列 - SHA-256,SHA-384或SHA-512。 [更新:2012-10-02 NIST 已选择< a href =“http://en.wikipedia.org/wiki/Keccak”rel =“noreferrer”> SHA-3 是算法 Keccak ]

你可以尝试创建自己的哈希&#8212;它可能不如MD5好,并且“通过默默无闻的安全性”同样不可取。

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

Public TimeStamp 使用一系列算法。例如,请参阅 sqlcmd-86.00.tgz 插图。

其他提示

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

最佳选择是使用生成最长散列的公钥单向散列算法。 SHA-256创建一个256位散列,因此伪造者在创建匹配给定文档的文档之前必须尝试2个 255 不同的文档(平均),这是非常安全的。如果那还不够安全,那就是SHA-512。

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

为什么要尝试创建自己的哈希算法? SHA1HMAC有什么问题?

是的,哈希有重复。
任何比明文短的散列都必然是较少的信息。这意味着会有一些重复。哈希的关键是重复很难逆向工程。

考虑CRC32 - 通常用作哈希。这是一个32位的数量。因为宇宙中有超过2 ^ 32条消息,所以会有CRC32重复。 同样的想法适用于其他哈希。

这里有一个难度级别(针对攻击者)。找到具有相同哈希值的两个文件比生成一个匹配给定哈希值的文件更容易,如果您不必遵守表单/内容/长度限制,则更容易执行后续操作。

因此,如果可以使用定义明确的文档结构和长度,无论您使用什么底层哈希,都可以让攻击者的生活更加艰难。

这称为“哈希冲突”,避免这种情况的最佳方法是使用强哈希函数。MD5比较容易人为构建冲突文件,如图 这里. 。同样,已知有一个 相对有效的方法 对于计算冲突的 SH1 文件,尽管在这种情况下“相对高效”仍然需要数百小时的计算时间。

一般来说,MD5 和 SHA1 的破解成本仍然很高,但并非不可能。如果你真的很担心,请使用更强的哈希函数,例如 SHA256.

除非您是一位非常专业的密码学家,否则自己编写实际上并不是一个好主意。大多数简单的想法都已被尝试过,并且存在针对它们的众所周知的攻击。

如果你真的想了解更多,请看看 Schneier 的 应用密码学.

我不认为拿出自己的哈希算法是一个不错的选择。

另一个不错的选择是使用 Salted MD5 。例如,MD5哈希函数的输入附加了字符串“acidzom!@#”;在传递给MD5功能之前。

Slashdot

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top