剖析区块链(四): 核心技术之哈希函数

哈希函数在区块链当中起着至关重要的作用,它的做法是将繁杂的交易信息加密压缩成固定字节的简单哈希值,并成为该区块的标识,保证区块链中交易信息不被篡改。还有不论是连接相邻区块,还是构建merkle树,以及交易验证、数字签名等等重要环节都用到了这个算法。


剖析区块链(四): 核心技术之哈希函数_第1张图片

1.概念

哈希:Hash,一般翻译为“散列”,也有直接音译为“哈希”的,就是把任意长度的输入通过哈希算法变换成固定长度的输出,该输出就是哈希值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。我们常说的哈希算法、哈希函数通常都是意指同一个东西。


2.原理

基于一种密码学上的单向哈希函数,通常业界使用y =hash(x)的方式进行表示,该哈希函数实现对x进行运算计算出一个哈希值y。这种函数很容易被验证,但是却很难破解。由x很容易计算出y,但从y很难推导出x。也就是只有加密过程,没有解密过程。


剖析区块链(四): 核心技术之哈希函数_第2张图片

3.特点

(1)加密过程不可逆,意味着我们无法通过输出的哈希值倒推原本的明文是什么。

(2)输入的明文与输出的哈希值一一对应,任何一个输入信息的变化,都必将导致最终输出的哈希值的变化。

(3)对于任意大小的输入,最终计算出的哈希值的长度很小,并且是固定长度。

(4)两段内容不同的明文,很难使得它们的哈希值相同。即对于任意两个不同的数据块,其哈希值相同的可能性极小。


4.SHA256算法

常使用的哈希算法包括MD5、SHA-1、SHA-256、SHA-384及SHA-512等。在区块链中通常使用SHA-256算法进行区块加密,对于任意长度的消息,SHA256都会产生一个256bit长的哈希值,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,通常用一个长度为64的十六进制字符串来表示,也就是我们看到的64个字符。


区块链通过该算法对一个交易区块中的交易信息进行加密,并把信息压缩成一串数字和字母组成的散列(哈希)字符串。区块链的哈希值能够唯一而准确地标识一个区块,任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块中的信息没有被篡改。


以下图为例,将明文加密为哈希值


剖析区块链(四): 核心技术之哈希函数_第3张图片

然后将句号改变为感叹号,哈希值完全变了。


剖析区块链(四): 核心技术之哈希函数_第4张图片

 

5.哈希指针(Hash Pointer)

哈希指针是指该变量的值是通过实际数据计算出来的,且指向实际的数据所在位置。即哈希指针既可以表示实际数据的存储位置,又可以表示实际数据内容(某个时间戳下该数据的哈希值)。


总结一下,从哈希指针这个角度来看区块链的结构,可以说区块链就是按时间顺序将数据区块通过哈希指针的方式连接起来的一个链表。哈希指针其实就是一串数据的哈希值,一串数据的哈希值就是这串数据的“指纹”、摘要,因此就可以用这个哈希值来指向这串数据。


区块链里的每一个区块都有对应本区块的哈希指针,而除了创世区块(即第一个区块)之外,其他每个区块都存储了前一个区块的哈希指针,从而形成如下所示的一个链条,即区块链。


剖析区块链(四): 核心技术之哈希函数_第5张图片

这样的数据结构可以保证数据无法篡改,因为一旦篡改了任何区块的数据,对应的哈希指针就会出错,那么它后面的那个区块的哈希指针,就不能够和篡改数据后的区块生成的哈希指针匹配,因此一旦有恶意篡改就能校验到。


以上就是对于哈希函数的介绍,如果对你有所帮助不胜荣幸。

你可能感兴趣的:(剖析区块链(四): 核心技术之哈希函数)