加密哈希函数是否达到每个可能的值,例如它们是否是满射的?

lev*_*and 28 math hash cryptography

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

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

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

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

我的问题:根据需要,Ç一个.但C = A吗?

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

Tho*_*nin 39

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

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

散列函数试图模拟一个随机oracle,这是一个概念对象,它在"记住"先前输入和输出的唯一约束下随机选择输出,并且,如果给定已经看到的输入,则返回与先前相同的输出.根据定义,只有通过尝试输入和耗尽输出空间,才能证明随机预言是无差异的.如果输出具有n位的大小,则预期将需要大约2 ^(2n)个不同的输入来耗尽大小为2 ^ n的输出空间.对于n = 256,这意味着散列大约2 ^ 512条消息(例如512位的所有消息)应该足够(平均).SHA-256接受的输入远远超过512位(实际上,它接受高达18446744073709551615位的输入),因此看起来很可能 SHA-256是满射的.

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

因此,对于任何有利的散列函数,都没有正式证明了主观性,甚至对于诸如MD4之类的"破坏"散列函数也没有.它只是"高度怀疑"(一个输入比输出长得多的随机预言应该是暴露的).

  • 为什么需要大约2 ^(2n)个不同的输入才能耗尽2 ^ n个可能的输出?优惠券收集器问题表明,平均需要大约k kn k次尝试收集每个k类别中的一个.如果k = 2 ^ n,则k ln k = ln 2 n 2 ^ n,其远小于2 ^(2n). (3认同)

Ign*_*ams 6

不必要.鸽笼原理指出,一旦生成了超过A大小的一个哈希值,就存在1的碰撞概率,但它没有说明A的每个单个元素都已生成.

  • +1.鸽笼原则是关于注入性(即其不可能性). (3认同)