![]() |
1
37
首先,让我们指出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
不一定。鸽子洞原理指出,一旦超过A的大小再产生一个散列,碰撞的概率为1,但确实是1。 不 声明的每个元素都已生成。 |
![]() |
3
3
它实际上取决于散列函数。如果使用此有效哈希函数:
很明显,C!因此,“例如,Sa256”是一个非常重要的注意事项。 回答你的实际问题:我相信,但我只是猜测。维基百科没有提供任何有意义的信息。 |
![]() |
4
1
不一定。这取决于散列函数。 如果哈希函数是 surjective 但是有一些事情通常更重要,比如碰撞的可能性很低。 |
![]() |
5
0
情况并非总是如此。但是,哈希算法所需的质量是:
|