区块链(blockchain)本质:一种特殊的分布式数据库。
区块链的最大特点:去中心化。
由于去中心化的特点,需要保证数据的可信,因此有区块链有另一特点:不可篡改。
在介绍不可篡改前,先明白什么是Hash:
Hash
-
hash:计算机可以对任意内容,计算出一个长度相同的特征值。其形式为:h = H(x)
无论x是什么,比如字符串:123、morning、bitcoin,根据哈希函数 H(x)可以得到一个固定长度的16进制数字(哈希值)
-
哈希碰撞:一个安全的哈希算法需要满足”碰撞率低“。即两个不同的输入,尽可能得到不同的哈希值。 如果不同的输入下得到了相同哈希值,即发生哈希碰撞。
-
哈希函数还必须满足:“输出无规律”。即某两个字符串尽管只有某一位不同,但得到的哈希值完全不同。
不可修改
区块链是由一个个区块(block)构成的有序链表,每一个区块都记录了一系列交易,并且,每个区块都指向前一个区块,从而形成一个链条。
区块分为:
-
区块头:包含很多信息,比如当前区块的哈希、上一个区块的哈希、Merkle哈希
关于Nonce字段:阮一峰笔记
-
区块体。
Merkle hash
区块本身记录的主要数据就是一系列交易。
Merkle哈希就是把一系列数据的哈希根据一个简单算法变成一个汇总的哈希。具体例子见:Merkle哈希
根据哈希的特点,修改任意一个交易哪怕一个字节,或者交换两个交易的顺序,都会导致Merkle Hash验证失败,所以,Merkle Hash记录在区块头部,它的作用就是保证交易记录永远无法修改。
Block hash
区块本身用Block Hash——也就是区块哈希来标识。是通过计算区块头部的哈希得到的。就是说,把区块头的各项特征值,按照顺序连接在一起,组成一个很长的字符串,再对这个字符串计算哈希。
因此:这一点对区块链有重大意义。如果有人修改了一个区块,该区块的哈希就变了。为了让后面的区块还能连到它(因为下一个区块包含上一个区块的哈希),该人必须依次修改后面所有的区块,否则被改掉的区块就脱离区块链了。由于后面要提到的原因,哈希的计算很耗时,短时间内修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力。(工作量证明机制)