区块链的兴起让神秘的密码学进入大众视野,今天介绍密码学中的哈希算法。提到哈希算法,熟悉区块链的朋友首先想到的也许就是比特币挖矿。是的,比特币挖矿就是不断修改区块头部的随机数,然后计算区块的哈希值,直到这个哈希值满足特定标准的过程。那么哈希算法到底是什么,为什么挖矿这么重要的工作要用哈希算法?
一、哈希(Hash)算法概念
如上图哈希算法就是把任意长度的“目标文本”变成固定长度的“杂凑字串”的方法。比如下图:
二、哈希算法的性质
1.单向性
如上面的例子,可以将文本“Fox”计算出哈希值“DFCD3454", 而不能用由”DFCD3454“推算出他的输入”Fox“。正如将玻璃砸碎很容易,却很难将碎玻璃拼凑成一块完整的玻璃。
2、任意长度的消息计算成固定长度哈希值
因为哈希算法的一个目的是为了用最后哈希值代替原始值减小校验难度和传输成本。如果哈希值的长度过大甚至和原来消息一样大,哈希算法就失去了意义,因为这样校验原来信息和哈希值的难度差别不大。
3、计算哈希的时间短
无论原始数据有多大,哈希算法的计算时间要在可接受的范围内。
4、不同的输入就有不同的输出
这是哈希算法发明出来的目的之一,但是数学上任意长度的数据经过一个函数计算产生定长数据,该结果一定存在重复的可能性。哈希算法只是将这种可能性降到很小接近0。两个不同输入产生相同输出的现象叫做“碰撞”。
三、几大成熟哈希算法介绍
1、MD系列哈希算法
MD就是MessageDigest的简称。家族成员包括MD2,MD4和MD5都产生128位哈希值。目前MD系列算法都发生过碰撞。
2、SHA哈希算法
Secure Hash Algorithm,直译为安全散列算法。现共有SHA-1,SHA-224,SHA-256,SHA-384,SHA-512。
3、SM3杂凑算法
MD和SHA是国家通用的标准,SM3是我国算法标准。输入长度的上限是2的6次方,输出长度是256比特。