哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果咍希一段明文而且哪怕只更改该段落的一个字母,随后的哈希值都会发生变化。要找到哈希值相同而输入值不同的字符串,在计算上是不可能的。所以数据的哈希值可以检验数据的完整性。在哈希算法中如果输入数据有变化,则哈希也会发生变化。哈希算法可用于许多操作,包括身份验证和数字签名(也称为“消息摘要”不过一般用于快速查找和加密算法。
区块链的数据是存储在区块中的,每个区块都有一个区块头,区块头存储区块中所有数据经过哈希算法获取的一个哈希值,同时每个区块中存储前面一个区块的咍希值,这样每个区块都会通过所存储的前一个区块的咍希值串联起来,这样就形成了区块链。如果有人试图篡改其中的一笔交易,势必会导致该交易所在区块的哈希值发生变化,为了使得被篡改的交易得到所有节点的认可,篡改者需要以被篡改的节点为起点,重新计算后面的所有区块,但是如果要让所有的节点都承认和接受这些篡改,那基本上是不可能芫成的事情了。从这里我们可以发现哈希算法的应用使得篡改的成本已经远远超过收益了。
区块链系统常用的哈希算法是SHA256和RIPEMD160。SHA256是SHA算法的一个变体。SHA(安全散列算法)是由美国国家安全局(NSA)设计,美国国家标准与技术研究院(NIST)发布的一系列密码散列函数,包括SHA-1、SHA-224、SHA-256、SHA-384和SHA-512等变体。这些算法主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA )。SHA256算法在抗碰撞性和效率之间做了一个平衡处理,在很多区块链系统中均支持SHA256哈希算法。
对于哈希算法来说,抗碰撞性越高,相对需要的计算资源越大,对系统性能也会有一定的影响。因此很多区块链系统可以通过配置参数修改算法,使用者可以根据业务需求选择合适的哈希算法。