更快地找到正确的块顺序以获得已知的SHA1哈希?

时间:2011-03-02 04:14:31

标签: hash

假设通过连接几个数据块来计算已知的SHA1哈希值,并且块的连接顺序是未知的。找到给出已知散列的块的顺序的直接方法是为每个可能的排序计算SHA1散列,直到找到已知的散列。

是否可以通过分别为每个块计算SHA1哈希来加快速度,然后通过仅操作哈希来找到块的顺序?

4 个答案:

答案 0 :(得分:4)

简而言之,没有。

如果您使用SHA-1,由于Avalanche Effect,明文中的任何微小变化(在您的情况下,您的块)都会显着改变其相应的SHA-1。

假设您有4个块: A B C D A + B + C + D(已仲裁)的SHA1哈希假设 A,B,C和D 的SHA1哈希不相关单独计算。

由于它们不相关,因此您无法在合并的块(A + B + C + D,B + C + A + D等)和每个单个块()之间绘制任何关系( A,B,C或D)

如果你能识别出它们之间的任何关系,那么SHA1哈希算法将会遇到麻烦。

答案 1 :(得分:3)

实际答案:没有。如果你使用的哈希函数是好的,那么它应该看起来像Random Oracle,其输出在确切的给定输入上是完全未知的,直到尝试输入。因此,在您达到所需的确切输入顺序之前,您无法从计算的哈希值中推断出任何内容。 (严格来说,可以存在一个散列函数,它具有散列函数的常用属性,即碰撞和前映像阻力,而不是一个随机的oracle,但是离开RO模型仍然被认为是哈希函数的弱点。)(严格地说,对于一个单一的,无键的函数来说,随机的oracle是不合适的。)

理论答案:取决于。假设,为简单起见,您有 N 512位的块,那么您可以安排成本不超过 N * 2 160 N> = 42 时,SHA-1的评估低于 N!。这个想法是两个连续块之间的SHA-1的运行状态限制为160位。当然,无论如何,这种成本是荒谬的。更一般地说,你的问题是在自定义集 S (你的 N N!序列)中找到输入SHA-1的原像因此,成本具有 S 大小的下限和SHA-1的前像素阻力,以较低者为准。 S 的大小为 N!,当 N 增加时,其增长非常快。 SHA-1在预图像方面没有已知的弱点,因此它的电阻仍假设为 2 160 (因为它具有160位输出)。

编辑:这种问题适用于proposed "cryptography" stack exchange,当(if)实例化时。请承诺帮助创建它!

答案 2 :(得分:2)

根据你的散列库,这样的东西可能有用:假设你有块A,B,C和D.你可以处理块A的散列,然后克隆该状态并计算A + B,A + C和A + D,而不必每次重新计算A.然后你可以克隆每一个从A + B,A + C + B和A + C + D计算A + B + C和A + B + D,依此类推。

答案 3 :(得分:1)

不。计算完整的SHA1哈希需要按顺序放入块。下一个散列块的计算需要当前散列块的输出。如果不是这样,那么操作文档会更容易,这样你就可以随意重新排序这些块,这将大大降低算法的实用性。