概念科普
哈希算法:在互联网的世界中,每台服务器上面会有无数多个文件,视频、音乐、压缩包、照片等等各种东西,当然还用作加密和签名。这些东西跟我们人一样,每一个文件都需要一个名字。即使是中国仅有15亿人口,还是会有很多重名的人,更别说互联网世界中天文数字量级的文件了,所以就需要一种特殊的算法来解决这个问题,为服务器中每一个文件起一个与众不同的名字,这些名字长这个样子0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc942feb2da115a3f415dcbb8607497386656d7d1f34a42059d78f5a8dd1ef
,这就是哈希算法。
哈希算法还有两个特点:
- 原始文件或数据哪怕发生一个标点符号的改变,整个文件或数据的哈希值都会产生巨大的变化;
- 整个算法的过程是不可逆的,也就是你是不可能从这个哈希值上面得出源文件是什么的。
哈希碰撞:哈希算法有多种,比如常用的MD5、SHA-1、SHA-2、murmurHash 和 quickHash。对于某一种哈希算法来说,经过哈希算法求出的值的位数是一定的,也就是说它能记录的文件数量是有限的,但是文件的数量是无限的,所以必将会出现重名的情况,这种重名的情况,就是哈希碰撞。
其中这个MD5算法已经被验证可以很容易的发生“碰撞事故”,它在 2^21 复杂度内即可完成碰撞,在我们现有的智能手机上面,只需要几十秒钟的时间即可。然后谷歌也于17年早些时候在 2^64 复杂度内完成了第一次 SHA-1 碰撞。至此,MD5 和 SHA-1 已经在安全领域被废弃,比如加密和数字签名。
Blake2算法
Blake2 其实是一个系列算法,并不只有一种,分为 Blake2b、Blake2s、Blake2bp、Blake2sp和Blake2x。在MD5、SHA-1、SHA-2、SHA-3这几种算法中,数SHA-3算法的安全性为最高。但是Blake2系列的算法可以保证比 SHA-3 更高的安全性,而且在计算速度上面,比 SHA-3 更快。
Blake2b算法:这种算法是为 64 位CPU做的优化,它可以生成长度最长为 64 位的哈希值;
Blake2s算法:为8-32位CPU设计,它可以生成长度最长为 32 位的哈希值;
Blake2bp和Blake2sp:其实是上面Blake2b和Blake2s算法的衍生版,这两种算法可以多核并行运算,即多个任务同时开启运算,在保证了安全性的前提下,大幅度的提升运算效率。
Blake2x算法:这个算法就比较强悍了,因为它最多可以生成 4GiB(其实就是普通人理解的4G大小)的哈希值,想想都恐怖,比你硬盘里面存的一部小电影还大。它可以用于 KDF(密钥派生)和 DRBG(固定随机数序列),这两个概念,我们后续再说。
Blake2算法的应用
虽然写了这么多Blake2算法的优点,而且距离 2008 年Blake2算法被 NIST 认可,认为它具有跟 SHA-3 同等级别的安全性,这之间已经过去十余年了,但是这个Blake2算法并没有得到广泛的应用,这是为什么呢?说实话员外也不清楚,只能从网上找来一点可信的说法来贴出来了:
很多人选择使用SHA-3而不选择BLAKE2的理由可能是BLAKE2并不是一种规范标准(虽然BLAKE也有自己的标准化文档RFC),而且BLAKE2也没有得到FIPS的许可认证。