【问题标题】:Is it possible with enough information to reverse a hash?是否有足够的信息来反转哈希?
【发布时间】:2016-01-13 02:32:42
【问题描述】:

我知道,通过简单地对生成的数字使用数学运算,哈希是不可逆的,但我想知道是否有足够的信息来成功地反转哈希并准确地重新获得我开始使用的信息。

例如,我有一个文件,我通过md5() 运行它,得到6513F99D206D8714EA9EAA4A1EEA8538,然后我在文件底部添加一些可预测的垃圾并再次运行它得到CBB04474C52FF68F6B2AC38A9A8356A5

由于我有来自同一个文件的两个不同的校验和,而且我确切地知道文件末尾的垃圾是什么,现在是否足以将可能的答案缩小到一个?

显然这对于​​安全性来说是不切实际的,但我非常好奇这种特定场景以及是否有(或曾经有)足够的信息来在数学上反转哈希。

【问题讨论】:

  • “现在是否有足够的信息将可能的答案缩小到一个?” - 你到底想弄清楚什么?如果文件内容已知且垃圾已知,那么目标是什么?
  • @Artjom B. 最后,我想知道是否可以通过数学准确地反转哈希。我想这与哈希中包含的信息无关,只是它可以恢复的事实。
  • 我会说,这是不可能的,但这可能取决于散列函数。如果您有特定的哈希函数和明确的问题陈述,那么您可以在Cryptography 上提问。
  • 哈希是有损的,无论你输入多少 MB,输出总是相同的大小。所以不可能有一个精确的数学方法来取回原始值,有无限可能的文件导致相同的哈希值。你可以做的是暴力破解,并希望在找到匹配项时找到真正的文件。

标签: math hash cryptography theory


【解决方案1】:

让我们从基础开始。如果文件比散列长,那么它包含的信息比散列多,您无法从单个散列中恢复它。如果它更短,并且您知道这一事实,那么理论上您可以恢复它,例如通过尝试所有可能的文件达到该长度。你可能只有一场比赛。

更准确地说,您不必谈论文件长度,而是谈论熵。如果您知道该文件只是可打印的字母,则排除了许多候选人。如果它是可读的文本,那么更是如此。所以一般规则是,如果文件的熵小于散列的熵,您可以希望恢复文件。而且您必须知道情况确实如此,否则您不能真诚地排除较长文件导致相同哈希的可能性。

上面所有的人都在谈论一个哈希。现在你追加垃圾并计算另一个哈希。最多会使哈希中包含的信息量翻倍。之后就是同一个游戏了。您不能指望恢复比两个哈希值更多的信息。这通常并不多。

【讨论】:

  • “如果文件比散列长,那么它包含的信息比散列多,你不能从单个散列中恢复它。” 这个论点听起来很明显,但在概括时会不稳定。大多数文件也比 ZIP 压缩文件长,但后者包含相同(甚至更多)信息。
  • @Dubu:你说得对:我故意过度简化以获取核心信息。这就是为什么第二段通过谈论熵来使这一点更加精确。即便如此,上述所有内容都受到一些隐含的“一般”的影响,因为 afaik。无论输入长度如何,都没有理论可以排除某些特定哈希值只有一个原像的可能性,即使我认为这非常不太可能。但是长度受限的输入空间中的哈希分布也可能会出现偏差,所以是的,上面的内容并不精确,但试图访问。善意的谎言。
【解决方案2】:

当前接受的答案并不完全正确。真正的答案是视情况而定

首先,回想一下哈希函数从所有二进制序列的集合映射到有限集合,通常是固定长度的序列集合,称为哈希长度。因此,这个函数不能是一对一的——也就是说,必须有多个输入映射到的函数的 some 输出。所以一般来说,不可能有一种算法将哈希映射到生成该哈希的输入,因为这个过程没有明确定义(没有明确的答案)。

幸运的是,您正在询问是否要为 特定输入 反转哈希函数,因此实际上它可能是可能的。虽然哈希函数不是一对一的,但可能存在只有一个输入映射到的某个输出。如果您的输入是一个这样的输入,那么您很幸运,一个枚举所有二进制字符串、对每个字符串进行哈希处理并输出第一个哈希到正确值的二进制字符串的蛮力算法将返回正确的答案。您也可能有一些关于输入的附加信息。例如,您可能知道它是符合语法的英文文本或有效的 HTML 文档。即使有多个输入映射到给定的哈希值,也可能只有一个格式正确且大小适合您的硬盘驱动器的输入映射到该哈希值。在理想情况下,您有一组候选文件,您知道您的文件在其中 - 在这种情况下,几乎可以肯定最多一个散列到给定值,并且散列每个这样的文件,直到散列匹配正确的值会产生正确的答案.

坏消息是,虽然在理论上可能可以反转散列值,但密码散列函数已被设计为使这个过程变得非常低效。如果您无法将输入空间缩小到很小的范围,您可能不得不运行一个在宇宙热寂之前无法完成的大规模蛮力过程。

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 2017-11-11
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多