为什么SHA256函数无法逆向?
为什么SHA256函数无法逆向?
About
为什么说 MD5 是不可逆的?
可以看我的这个回答,内容大同小异,至于其他的试图从信息论回答,是毫无价值和营养的,not even wrong。
当然我也继续补充一些内容,为什么布尔方程组求解是困难的,就意味着hash函数是困难的。
1.你要明白现实意义上的hash函数,既md5,sha256等等都是通过异或和置换两个基本函数来实现全部的流程的。在密码学领域中,hash也可以通过rsa或者其他数学算法来实现,但是这不是本文的主题。
而所有的置换,移位,异或其实都可以转换为布尔表达式。
我们假设输入比特为x0,x1。那么输入比特设为y0,y1。
Y0=x0+x1就是异或。
Y1=x0*x1就是相乘。
而置换本身就可以类似一种离散数学或者电路求最小析取式的一种式子。
类似于y0=x0 *x1+(1+x0) * (1+x1).
就意味着当x0=1,x1=1或者x0=0,x1=0的时候,第一个比特输出1。
其中用加法分割开来的每一个最小项的和被称为项数。
而密码算法就是通过一系列流程迭代进去,每一轮迭代出来的yi又作为下一轮的xi输入进去,使得最终输出的yi所对应的项数异常复杂。算法让项数成指数增长,最终每一个比特的输出存在着比几十亿还要大的多的项数。
2.目前想要解开这样的一个方程组除了遍历,没有什么好的办法。(当然其实还有一些方法的,但是复杂度依然是指数级别的,可以见这篇文章https://blog.csdn.net/hanss2/article/details/124956384)
而密码分析以及王小云等人的方法是通过分析宏观上最终输出的某一个比特的项数中的含有某一(几)个输入比特的个数不均匀,显著大于其他比特,从而对结果产生更大的相关性,从而使得碰撞概率提高,将预期复杂度降低到可以接受的时间内所对应的复杂度。