【问题标题】:Predicting Future CRC Value预测未来的 CRC 值
【发布时间】:2019-05-05 06:16:40
【问题描述】:

以下代码显示了在前向散列中使用的 CRC32(我们使用持久上下文多次散列同一个项目):

In [1]: from zlib import crc32

In [2]: crc32('aaaa')
Out[2]: -1382488763

In [3]: crc32('aaaa',-1382488763)
Out[3]: -1081835450

In [4]: crc32('aaaa' * 2)
Out[4]: -1081835450

我的问题是: 给定-1382488763的已知初始crc,我们可以在不知道原始内容的情况下预测前向哈希的值吗?澄清一下...我可以仅从 -1382488763 得出 -1081835450 吗?

【问题讨论】:

  • 有一些方法可以优化重复项的 crc 计算,但您的问题是在不知道重复项是什么的情况下是否可以这样做。
  • 好的,重新阅读您的问题。所以基本上你在问:知道我已经输入了 4 个元素,并且知道结果,我可以确定地重建输入值 aaaa 吗?请注意,crc(32('aaaa', -1382488763) 对我没有任何意义。 CRC32 有 一个 输入参数。如果您有两个,请说明您的意思。
  • @MaartenBodewes 根据zlib documentation 它被用作生成运行校验和的起始值。
  • @MaartenBodewes crc32('aaaa',-1382488763) 表示使用第二个参数作为初始CRC,并通过它运行消息aaaa。所以它应该给出与 aaaaaaaa 的 CRC 相同的东西,Out[4] 确实证明了这一点。

标签: hash cryptography crc crc32


【解决方案1】:

没有。 crc32() 采用初始 CRC,将消息应用到它,并获取结果 CRC。你需要这个消息。

如果您可以在不知道aaaa 的情况下确定crc32('aaaa',-1382488763),那么为什么crc32() 函数需要第一个参数?

如果您想知道是否可以仅在给定未重复消息的 CRC 的情况下计算重复消息的 CRC,那么不能。但是,如果您知道消息的 CRC 消息的长度,那么可以计算该消息的两次或多次重复的 CRC,而无需知道消息本身。正如您在 cmets 中所指出的,这就是 zlib 中的 crc32_combine() 所做的。

【讨论】:

  • 也许我可以更彻底地指定...虽然我不知道校验和缓冲区的内容,但我知道它的长度。假设我之前控制了它,获取了它的 crc,然后删除了它。我设法通过使用您有用的 crc32_combine 函数解决了这个问题。谢谢!
  • 我还是不明白。如果你只知道 -1382488763 后面跟着四个字节,但你不知道字节,那么你无法预测结果 -1081835450。您需要知道这些字节,或者至少您需要知道它们的 CRC(使用相同的多项式)。
  • 是的——我知道字节,因为它们总是相同的(我一遍又一遍地校验同一个项目,将输出循环回以下输入。)
【解决方案2】:

是的,从某种意义上说,你可以。只有一个 4 字节值:“AAAA”,它产生特定的校验和。所以有可能找到这个值 if 你知道输出 - 例如通过迭代所有可能的字节输入。然后,您可以通过再次提供上一条消息来扩展 CRC32 计算来猜测下一个输出。

注意事项:

  • 我假设这里是 ASCII 编码;
  • CRC32 不是 单向 哈希,因此您可以计算有关输入消息的信息,而无需恢复到蛮力;
  • 我不清楚您为什么要重复最初的输入消息,我希望知道 :)

【讨论】:

  • 问题是不知道消息生成的CRC,你能确定生成的CRC吗?显然不是。是的,如果您知道消息,您可以获得 CRC,如果您知道 CRC,您可以获得 32 位消息。 (顺便说一句,这个消息可以用简单的线性代数非常快速地解决。所以是的,你不需要暴力破解它。)
  • 我觉得 org.消息将被重复。当然,如果您甚至不计算要计算的内容,您也无法计算 any 哈希。但在这种情况下,您 1. 可以计算中间校验和的原始值 2. 将其提供给中间 CRC32 以计算最终总和。所以我已经回答了这个问题:如果我只是有一个超过 4 个字符的中间散列,比如 AAAA,我可以计算 AAAAAAA 上的散列。是的,这是可能的。
  • 我只是按照问题的实际含义进行说明,即“澄清......我可以仅从 -1382488763 推导出 -1081835450 吗?”显然“澄清”实际上并没有澄清问题。
  • 我同意,这个问题还不清楚。这是我们能做的最好的事情——除了投票结束,我已经这样做了。
猜你喜欢
  • 2022-08-03
  • 2018-02-17
  • 1970-01-01
  • 2021-03-06
  • 2021-10-24
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多