代码之家  ›  专栏  ›  技术社区  ›  levand

加密散列函数是否达到每一个可能的值,例如,它们是可预测的?

  •  27
  • levand  · 技术社区  · 14 年前

    以一个常用的二进制散列函数为例——例如sha-256。顾名思义,它输出一个256位的值。

    是所有可能的256位二进制值的集合。 非常大,但有限。

    是所有可能的二进制值的集合。 是无限的。

    C 是通过在每个成员上运行sha-256获得的一组值 . 显然,这在实践中是不可能做到的,但我想我们仍然可以对它进行数学分析。

    我的问题: 必要时, C 艾斯 . 但确实 C = ?

    编辑:正如一些答案所指出的,这完全取决于所讨论的has函数。因此,如果您知道任何特定哈希函数的答案,请这样说!

    5 回复  |  直到 9 年前
        1
  •  37
  •   Thomas Pornin    14 年前

    首先,让我们指出sha-256不接受所有可能的二进制字符串作为输入。由定义 FIPS 180-3 ,sha-256接受长度小于 2 ^ 64 位(即不超过18446744073709551615位)。这是非常常见的;所有哈希函数在形式输入长度上都受到某种限制。一个原因是安全性的概念是根据计算成本来定义的;任何攻击者都可能聚集计算能力的阈值。超过给定长度的输入需要超过最大计算能力才能简单地评估函数。简言之,密码学者对无穷大非常谨慎,因为无穷大倾向于阻止甚至定义安全性,更不用说量化了。所以你的输入集 C 应限于以下序列: 2 ^ 64 -1 位。

    也就是说,让我们看看关于散列函数surjective的已知信息。

    哈希函数尝试模拟 随机预言机 ,一个概念对象,在它“记住”以前的输入和输出的唯一约束下随机选择输出,如果给定一个已经看到的输入,它将返回与以前相同的输出。根据定义,只有通过尝试输入并耗尽输出空间,才能证明随机Oracle是具有主观性的。如果输出有大小 n 比特,那么预计大约 2 ^(2n) 需要不同的输入来耗尽大小的输出空间 2 ^ n . 为了 n=256 这就意味着 2 ^ 512 消息(例如所有512位的消息)应该足够(平均)。SHA-256接受的输入比512位长得多(实际上,它接受的输入高达18446744073709551615位),所以看起来 非常合理 SHA-256令人沮丧。

    然而 ,还没有证明sha-256是主观的,也就是说 预期 . 如上图所示,随机Oracle的推测性证明需要大量的计算能力,而不仅仅是像preimages这样的攻击。( 2 ^ n )和碰撞( 2 ^(n/2) )因此,一个好的散列函数“不应该”允许一个属性(如surjectivity)被实际证明。这将是非常可疑的:散列函数的安全性源于其内部结构的难处理性,这种难处理性应该坚决反对任何数学分析的尝试。

    因此,对于任何一个合适的散列函数,甚至对于诸如MD4这样的“中断的”散列函数,都没有正式的证明其可预测性。这只是“高度怀疑”(输入比输出长得多的随机Oracle应该是主观的)。

        2
  •  6
  •   Ignacio Vazquez-Abrams    14 年前

    不一定。鸽子洞原理指出,一旦超过A的大小再产生一个散列,碰撞的概率为1,但确实是1。 声明的每个元素都已生成。

        3
  •  3
  •   mafu    14 年前

    它实际上取决于散列函数。如果使用此有效哈希函数:

    Int256 Hash (string input) {
        return 0;
    }
    

    很明显,C!因此,“例如,Sa256”是一个非常重要的注意事项。

    回答你的实际问题:我相信,但我只是猜测。维基百科没有提供任何有意义的信息。

        4
  •  1
  •   Sebastian Paaske Tørholm    14 年前

    不一定。这取决于散列函数。

    如果哈希函数是 surjective 但是有一些事情通常更重要,比如碰撞的可能性很低。

        5
  •  0
  •   Grimmy    14 年前

    情况并非总是如此。但是,哈希算法所需的质量是:

    • B的基数
    • 重新划分B中的哈希(B中的每个值必须具有相同的成为哈希的概率)