加密散列函数是否达到每个可能的值,例如他们是否满足?

时间:2010-04-17 14:06:36

标签: math hash cryptography

采用常用的二进制哈希函数 - 例如,SHA-256。顾名思义,它输出256位值。

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

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

C 成为通过在 B 的每个成员上运行SHA-256获得的值集。显然这在实践中无法完成,但我猜我们仍然可以对它进行数学分析。

我的问题:必要时, C A 。但 C = A

编辑:正如一些答案所指出的,这完全取决于有问题的函数。所以,如果您知道任何特定哈希函数的答案,请说出来!

5 个答案:

答案 0 :(得分:38)

首先,让我们指出SHA-256不接受所有可能的二进制字符串作为输入。如FIPS 180-3所定义,SHA-256接受长度低于 2 ^ 64 位的任何比特序列作为输入(即不超过18446744073709551615比特)。这很常见;所有哈希函数都以某种方式限制在正式输入长度中。一个原因是安全性的概念是在计算成本方面定义的;有一个关于计算能力的门槛,任何攻击者都可以集合。超出给定长度的输入将需要超过最大计算能力来简单地评估功能。简而言之,密码学家对无限期非常警惕,因为无穷小往往会阻止安全性被定义,更不用说量化了。因此,您的输入集 C 应限制为最多 2 ^ 64-1 位的序列。

话虽如此,让我们看看有关哈希函数主观性的知识。

散列函数尝试模拟随机预言,这是一个概念性对象,它在“记住”先前输入和输出的唯一约束下随机选择输出,如果给出已经看到的输入,它返回的输出数量与之前相同。根据定义,只有通过尝试输入和耗尽输出空间,才能证明随机预言是无差异的。如果输出的大小为 n 位,那么预计将需要大约 2 ^(2n)不同的输入来耗尽大小 2 ^的输出空间ñ。对于 n = 256 ,这意味着关于 2 ^ 512 消息(例如512位的所有消息)的散列应该足够(平均)。 SHA-256接受的输入远远超过512位(实际上,它接受输入高达18446744073709551615位),因此似乎高度合理 SHA-256是完全的。

然而,尚未证明SHA-256是完全的,而且预期。如上所示,随机预言的一个主观性证明需要大量的计算能力,远远超过像preimages( 2 ^ n )和冲突( 2 ^(n / 2))。因此,良好的散列函数“不应该”允许实际证明诸如主观性之类的属性。这将是非常可疑的:哈希函数的安全性源于其内部结构的难以处理性,这种难以处理的行为应该坚决反对任何数学分析的尝试。

因此,对于任何合适的散列函数,都没有形式地证明了主观性,甚至对于诸如MD4的“破坏”散列函数也没有。它只是“高度怀疑”(输入比输出长得多的随机预言应该是主观的)。

答案 1 :(得分:6)

不一定。鸽笼原则指出,一旦生成超过A大小的一个散列,就有可能发生1的碰撞,但它表明A的每个元素都已生成。< / p>

答案 2 :(得分:3)

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

Int256 Hash (string input) {
    return 0;
}

然后很明显C!= A.所以“例如,SHA256”是一个非常重要的注意事项。

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

答案 3 :(得分:1)

不一定。这取决于哈希函数。

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

答案 4 :(得分:0)

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

  • B的基数
  • B中哈希的重新分区(B中的每个值都必须具有相同的哈希值)