【问题标题】:Hash collision H(x)=H(y) with x!=y, does that also mean H(x+z)=H(y+z) for random z?哈希冲突 H(x)=H(y) 与 x!=y,这是否也意味着随机 z 的 H(x+z)=H(y+z)?
【发布时间】:2013-10-29 15:08:19
【问题描述】:

假设 H 是某个散列函数(例如 MD5 或 SHA256 或其他什么),我对这个散列有冲突:两个不同的数据 x 和 y,它们具有相同的散列。

换句话说,x≠y,但 H(x)=H(y)。

现在如果我连接一些随机数据 z,H(x+z) 会和 H(y+z) 一样吗?

这个想法是:x 和 y 发生冲突可能意味着它们碰巧使 H 函数处于相同状态(从而导致相同的哈希)。从那时起,无论我们附加什么其他数据,它们的哈希值都将保持相等。

我为this MD5 collision 测试了上述内容,它似乎在那里工作。但不知道一般情况下是不是这样?

【问题讨论】:

标签: hash append collision


【解决方案1】:

这种特殊技术称为length extension attack。散列函数是否易受攻击显然取决于特定的散列函数。基于Merkle–Damgård construction 的哈希函数(例如MD5 和SHA-1)易受攻击。 SHA-3 不易受攻击,HMAC constructions 也不易受攻击。

【讨论】:

    【解决方案2】:

    取决于 has 功能。由于散列函数不是homomorphic(即,其中:f(x) = f(y) 暗示x = y),因此f(x + z)f(y + z) 不会映射到同一个项目。考虑一个反例:

    给定哈希函数

    f(x) = (x * 3) + 1 mod 6
    

    然后是f(2) = 1f(6) = 1。让z = 1。那么:

    f(2 + z) = 4 and f(6 + z) = 1
    

    因此f(2) = f(6)f(2 + z) ≠ f(6 + z)

    但是,如果哈希函数是同态的,那么根据同态的定义:

    f(p + q) = f(p) + f(q)
    

    因此:

    f(x + z) = f(x) + f(z) 
    f(y + z) = f(y) + f(z)
    

    但从 f(x) = f(y) 开始,正如您最初所说的那样:

    f(x) + f(z) = f(y) + f(z)
    

    所以它们的哈希值是一样的。

    【讨论】:

      【解决方案3】:

      (请放纵,这是我的第一个答案:D) 不一定:

      考虑以下数据(作为数字列表)

      x = [8 0 4]
      y = [8 1 0]
      z = [5]
      

      和散列函数:

      H([a b c]) = a + b*c
      H([a b c d]) = H([b c d]) + H([a b c]) 
      

      然后,x 和 y 发生碰撞:

      H(x) = H([8 0 4]) = 8 + 0*4 = 8
      H(y) = H([8 1 0]) = 8 + 1*0 = 8
      

      但是在追加数据时,哈希值不相等:

      H(z + x) = H([5 8 0 4]) = H([5 0 8]) + H([8 0 4]) = 5 + 8 = 13
      H(z + y) = H([5 8 1 0]) = H([5 8 1]) + H([8 1 0]) = 13 + 8 = 21
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-18
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        • 2022-11-04
        • 2012-01-07
        • 1970-01-01
        相关资源
        最近更新 更多