【问题标题】:Can the input of this hash function be calculated based on the output?这个哈希函数的输入可以根据输出计算吗?
【发布时间】:2019-02-26 18:37:01
【问题描述】:

我有以下哈希函数,我想知道是否有一种方法可以根据哈希值计算此函数的输入。提前致谢

def hash(message):
    key = [0x0f, 0xff, 0x00]
    for char in message:
        n = ord(char)
        key[0] ^= n
        key[1] &= n
        key[2] |= n
    return ’’ + chr(key[0]) + chr(key[1]) + chr(key[2])

【问题讨论】:

  • 计算输入是什么意思?你想要什么计算?
  • 如果可以从 3 个字符的输出哈希中恢复原始输入,那么您将发明世界上最好的压缩算法。
  • 你的分析告诉你什么?

标签: python hash cryptography


【解决方案1】:

总之,。没有任何有意义的哈希函数可以反向应用。

哈希函数的作用是尝试创建原始消息的“签名”。签名必须足够小,通常用于验证或作为某个存储的索引。

为此,输出域必须明显小于输入域,或者换句话说,多个输入可以对应同一个输出。在您的情况下,字符串 "000""000000000" 将具有相同的散列值,并且仅给定散列,您将无法区分其中一个。

【讨论】:

    【解决方案2】:

    就哈希函数的第二个原像而言;只要你有足够的时间和金钱,任何哈希函数都有无限多的解决方案。

    现在假设,您有时间和金钱,并生成了给定哈希值的所有可能的第二个原像,最高可达 n 位,并假设我们有 x 个解决方案。

    for i in space(1..2^n)
       check hash(i) == TheHash
    

    即使 x=2,攻击者也无法确定输出散列的真实原像。但是请记住,从攻击的角度来看,攻击者已经找到了 x 个解决方案来破坏您的哈希。

    【讨论】:

      【解决方案3】:

      这是可能的,但是除了尝试所有可能的消息之外,从其哈希值生成消息是不可行的。

      【讨论】:

        猜你喜欢
        • 2017-10-28
        • 1970-01-01
        • 1970-01-01
        • 2011-08-17
        • 2017-12-26
        • 1970-01-01
        • 2018-06-07
        • 1970-01-01
        • 2021-06-26
        相关资源
        最近更新 更多