Hash 散列函数的周期性

Hash 散列函数的周期性,hash,sha,Hash,Sha,考虑简单的散列函数:hash=INPUT%4。这个函数是周期性的,如果我们用序列号0,1,2,3,4,5,…调用它,生成的散列序列将具有四个周期:0,1,2,3,0,1,2,3,0,… 我的问题是,现代加密散列函数(如SHA256)是否在这种意义上是周期性的?换句话说,有些整数0绝对不是。如果是这样的话,那么发现碰撞就微不足道了。加密散列函数的强度由查找散列(a)=散列(b)的难度定义。理想情况下,您需要找到散列(b)的所有值以找到冲突,如果散列是很多位,这是不可行的 这是一个非常好的观点,谢谢

考虑简单的散列函数:
hash=INPUT%4
。这个函数是周期性的,如果我们用序列号
0,1,2,3,4,5,…
调用它,生成的散列序列将具有四个周期:
0,1,2,3,0,1,2,3,0,…


我的问题是,现代加密散列函数(如SHA256)是否在这种意义上是周期性的?换句话说,有些整数
0绝对不是。如果是这样的话,那么发现碰撞就微不足道了。加密散列函数的强度由查找散列(a)=散列(b)的难度定义。理想情况下,您需要找到散列(b)的所有值以找到冲突,如果散列是很多位,这是不可行的

这是一个非常好的观点,谢谢。这是理论上证明的,还是实际证明的?例如,如果
k
n
非常大(目前未知),实际上不可能找到碰撞,但理论上我们可以。你应该在数学溢出上问:)我认为如果k是有限的,你可以证明它。但是在无穷远处,当散列从一个实数变为两位数时,我认为实际上需要一个k。我可能有一个草图可以工作:你需要证明不存在k,所以对于所有的a:Hash(a)=散列(a+k)。所以,我们需要证明每k存在一个a,其中Hash(a)!=散列(a+k)。现在我们需要Hash(x)!=散列(x'),如果x'是x且正好翻转了一位。一个简单的一位散列可以做到这一点,它将获取x中的所有位并对它们进行异或运算。因此,要为任何k找到a,只需选择a,使a=(a+k)有一个位翻转。这可能是a=1注意模散列如何不满足单位翻转属性,但我认为真正的散列函数可以满足,或者至少可以通过附加上面的一位散列来轻松满足。