至于什么是哈希,员外之前已经写过对应的文章了,所以在此就不再赘述了,如有需要,请翻阅:『学概念找员外』哈希到底是什么?。然后我们接下来会深挖哈希的几个特性,今天先说哈希函数的碰撞阻力。
为什么会碰撞
无论是哪种哈希算法,他们最终输出的结果的位数都是确定的,比如:
- MD4 1990年 输出128位 (已经不安全)
- MD5 1991年 输出128位 (已经不安全)
- SHA-0 1993年 输出160位 (发布之后很快就被NSA撤回,是SHA-1的前身)
- SHA-1 1995年 输出160位 (已经不安全)
- SHA-2包括SHA-224、SHA-256、SHA-384,和 SHA-512,分别输出224、256、384、512位。 (目前安全)
大家可以看到,不管上面的这些哈希算法还安不安全,他们的输出位数都是有限的,只是看起来输出位数大的会比位数的小的更安全一些。但是会绝对的安全吗?这是不可能的,为什么呢?
我们可以从数学的角度来推导一下,就拿目前看来安全的SHA-512算法为例,它输出的结果是512位。哈希算法输出的结果是字母与数字的组合,数学好的同学们可以计算出来会有多少种组合,员外数学不好,所以就假设这个结果为N吧。这个N会是一个非常非常大的数字,但是它不会无穷大。
在哈希算法中,每一个输入的字符串都有且唯一对应着一个输出的结果,也就是在这个哈希算法的工厂里面,你放进去一块与众不同的原料,生产出来的这个成品也必将与众不同。然后我们来做推导,SHA-512算法有N个可能输出的结果,也就对应着N个输入的字符串。就意味着这个N是这个算法输出的结果的上限。如果我们输入N+1个字符串,在输出的这些结果里面,必将有一个与其中的另外一个相同。
只是目前这个SHA-512算法在目前还没有发现或者说在理论上压根不太可能出现完全相同的两个值,所以目前来看是安全的。因为想要找到完全相同的两个值,计算量超级大,需要花费非常非常多的时间。员外查了一下资料,—如果一台电脑每秒计算10000个哈希值,计算2的128次方个哈希值,需要花10的27次方多年时间!
哈希的应用
除了目前被广泛应用在区块链数字货币领域之外,被应用更广的就是文件的存储了。同样员外在之前的文章里面也提到过了,戳此查看:『学概念找员外』哈希到底是什么?,感谢!
网友评论