目录
一、内容简介
区块链主要是一种链式数据结构,hash 函数加密数据,确保了区块链数据的不可篡改等特性,在区块链中占据了很重要的地位。
二、知识点
hash 函数
区块数据结构
hash 函数特性
hash 函数和区块链的联系
三、什么是 hash 函数,区块链用 hash 函数做什么
1、hash 函数
单向散列函数 one-wayhash function,通常被称为哈希函数。比特币领域中提到的 哈希函数 是指特定算法支持的 hash 函数,一般使用 SHA-256 算法。这个函数的特点是对于不同的输入 X, 都可以得到一个固定长度的 256bit 的二进制 Y 值, Y = hash(X),如图所示:
2、哈希函数的特性
(1)输入可任意长度,输出是固定长度
哈希函数不用知道输入信息代表的是什么意思,也无所谓信息的长度有多长,只要输入hash函数出来的都是固定长度的比特值。输入一本《三国演义》或者仅仅输入一个字母a,出来的都是256位比特长度的数据。
(2)计算速度快
(3)防碰撞
对于不同的输入 X, 一定要产生不同的值 Y。 不管怎样 hash 函数肯定会存在碰撞,这里就涉及碰撞概率问题。
当 Y 是 22 个字符串长度时,300万亿次结算结果里面,碰撞概率是 1000 亿分之 1。随着 Y 长度增加,碰撞概率会更低, SHA-256 是 64 位字符串,因此发生碰撞概率极低。
(4)隐藏性或者单向性
hash 函数的计算过程是单向不可逆的,可以通过 X 计算得到 一个 Y,但是反过来很难通过 Y 去反推出来 X 的值。区块链需要保证用户的隐私和安全,所以 hash 函数在这方面的作用非常突出。
(5)谜题友好 puzzlefriendly
Y = H(X),这个说的是看 X 不知道 H 是什么。也就是说知道了 X,没法一眼看出来输出的 H(X) 是什么。因此知道输入信息 X 也不知道哈希值 Y 是多少,虽然可以很快计算出来,但是无法预判,反向计算也是很困难的。
3、区块链与 hash 函数的关系
在比特币网络中的计算机上都保留着一条区块链表,每个区块的生成的生成都要填写 hash 值。
这个 hash 值的输入包括 区块编号,区块的多条交易数据,前一区块的 hash 值,一个随机数。
通过这种链式结构,在知道一个区块的情况下,就可以一直追溯到第一个区块,这样形成的链条就是区块链。
通过以上介绍,我们知道了 hash 函数在区块链结构中的重要作用,如果说分布式账本节点从架构上保证了比特币账本的安全性,那么 hash 链表则是从数据结构层面保证了账本的不可篡改性。