区块链中的密码学技术之一哈希算法
哈希算法
密码哈希算法函数是一类数学函数,可以在有限合理的时间内,将任意长度的消息压缩为固定长度的二进制串,其输出值称为哈希值,也称为散列值。以哈希函数为基础构造的哈希算法,在现代学中扮演着重要的角色,常用于实现数据完整性和实体认证,同时也构成多种密码体制和协议的安全保障。
碰撞是与哈希函数相关的重要概念,体现着哈希函数的安全性,所谓碰撞是指两个不同的消息在同一哈希函数作用下,具有相同的哈希值。哈希函数的安全性是指在现有的计算资源(包括时间、空间、资金等)下,找到一个碰撞是不可行的。
在比特币系统中使用了两个密码学哈希函数,一个是SHA256,另一个是RIPEMD160。
RIPEMD160主要用于生成比特币地址。SHA256是构造区块链所用的主要密码哈希函数。无论是区块的头部信息还是交易数据,都使用这个哈希函数计算相关数据的哈希值,以保证数据的完整性。同时,在比特币系统中,基于寻找给定前缀的SHA256哈希值,设计了工作量证明的共识机制;SHA256也被用于构造比特币地址。即用来识别不同的用户。
哈希函数的三个主要性质:抗碰撞性、原像不可逆、难题友好性。简单的说所谓碰撞是指两个不同的消息在同一个哈希函数作用下,具有相同的哈希值。哈希函数H的抗碰撞性是指寻找两个能够产生碰撞的消息在计算上是不可行的,但并不意味着不存在两个碰撞的消息。
原像不可逆通俗的说,指的是知道输出值,很容易通过哈希函数计算出哈希值;但知道哈希值,没有办法计算出原来的输入值。难题友好性指的是没有便捷的方法去产生一满足特殊要求的哈希值。
哈希指针链是一类数据结构,除了包含通常的指针外,还包含一些数据信息以及与这些信息相关的密码哈希值,这就使得正常的指针可用于取回信息,哈希指针用于验证信息是否发生改变。
若攻击者想在日志链表中的任意位置改变数据,为保持一致性,他必须向表头方向修改所有的哈希指针,最终由于不能改变链表头部而失败。因此,只需单个哈希指针,基本上就能保证整个链表的哈希值得一致性,从而达到防篡改的目的。