重新定义金融:加密货币与数字资产(第二版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

比特币背后的区块链基础原理

起源于比特币的区块链技术日益兴起并且逐渐引起广泛关注,它也经常被认为是一种颠覆式的新技术。实际上,区块链只是一个新的技术组合,其关键技术包括具备高性能计算与通信功能的P2P网络、基于密码学的共享账本、能够存储与处理大规模数据的分布式数据库和智能合约等技术,这些都是存在10年以上的技术。本小节介绍区块链的概念原理与关键技术,以便大家理解为什么它会被称为“可信任机器”。

一、区块链的含义

(一)对等网络的分布式数据库

区块链本质上是一个分布式数据库,它可以存储数据(如存储交易数据),所有节点之间共享信息,并且发生在一个点对点的对等网络中。

1.存储数据

区块链存储的数据种类是无限的,比如比特币的底层区块链可以存储交易数据。

2.节点之间信息共享

如图1-2所示,在传统中心化数据库中,终端与终端之间连接通信需要经过中央处理器统一处理;而区块链不同,终端与终端之间可以直接互通,每个节点(终端)存储相同的记录,并且可在所有节点之间传播。

图1-2 中心化数据库vs分布式数据库

3.对等网络

节点与节点之间除了相互连通、彼此对等、遵守共同的协议规则、协同处理交易外,每个节点在对外提供服务的同时也使用网络中其他节点提供的服务。

虽然网络节点的地位相同,但功能和参与程度并不相同。以比特币网络为例,它的节点完整功能包括:路由功能(network routing node,N)、区块链数据库(full blockchain,B)、挖矿(miner,M)与钱包服务(wallet,W)。这些节点的具体功能如图1-3所示。

图1-3 比特币节点的具体功能

其中路由功能是每个节点都具备的,而其他3个功能则因为节点的不同而不同,比如说:

挖矿节点(W+M+B+N):具有全部4种功能,能够验证交易、生产区块、转账和交易。

全节点(B+N):具备完整区块链功能,其数据库是完整的。这类节点能够验证交易,能够在这个基础上搭建钱包、交易所、区块浏览器等各种去中心化应用(DApp)。

简化支付验证(simple payment verification,SPV)节点(W+N):即轻量级的比特币节点,不需要运行完整的区块链数据库,通常没有挖矿功能,只有一个钱包的功能。这类节点通常运行在手机和电脑里的钱包中,是最为常见的节点。

总体来说,我们称区块链为分布式数据库,有两个原因:①数据安全由系统的所有节点共同记录,所有节点既不需要属于同一组织,也不需要彼此相互信任;②数据由所有使用同一个网络的节点共同存储,每个参与的节点均可复制获得一份完整记录的拷贝并且获得新数据的更新。

(二)按时间连接的分布式账本技术

区块链之所以被称为“区块链”,是因为它就是一堆包含交易信息的区块,通过前后首尾相接的方式联结起来的链式结构,每个区块都是链式结构中的一节。区块链可以视作一个账本,每个区块可以视作一页账,将每页账按记录时间的先后顺序联结起来就形成了账本。

如图1-4所示,系统设定每隔一段时间(如比特币网络是平均10分钟)就进行一次交易记录的更新和广播,将截至该时段仍未确认的数据信息和交易记录放在一个新产生的区块中。新区块的合法性得到所有广播的节点认可后,将以链状的形式被各节点加到自己原先的链中,就像给旧账本里添加新一页。

图1-4 简化版基于时间顺序的区块加链结构

我们以比特币的区块为例,简单解释区块的结构,要注意不同区块链系统使用的区块结构可能有差别。如图1-5所示,比特币系统的区块包括两部分:区块头(head)与区块体(body)。

图1-5 比特币系统区块结构

其中,区块头的子结构包括版本号(version number)、父区块哈希值(parent block Hash)、默克尔根值(Merkle root)、时间戳(timestamp)、难度目标值(difficulty target)以及随机数(nonce),后面三个都是与矿工竞争挖矿相关的数据。其具体定义如表1-1所示。

表1-1 区块头结构

区块体则包含经过验证的、区块在创建过程中发生的所有价值交换的数据记录,即交易计数和交易详情。通常,比特币系统的每一个区块体记录的第一笔交易是关于此区块的挖矿奖励与所记录的所有交易的手续费总和。关于交易信息所用的存储结构方式——默克尔树,下文将详细讲解。

二、区块链运行的关键技术

(一)数据结构:默克尔树

默克尔树(Merkle tree),也被称为二叉树,是一种在快速归纳和检验大规模数据完整性方面效率很高的数据结构。在比特币网络中,所有交易都记录在默克尔树的“叶子节点”(如图1-5的Hash1~8)里,每个交易两两配对,构成“非叶子节点”(如图1-5的Hash12),配对一直进行,直到只产生一个哈希值,即默克尔根值。

使用默克尔数据结构可以大幅提高比特币网络的安全性与效率。一方面,只要树中的任何一个节点被篡改,根节点哈希就不会匹配,从而可以验证节点之间传播数据的一致性;另一方面,它可以保证不管比特币系统的区块记录多少笔交易,区块头存储的默克尔根值的字节大小都维持在32字节(Byte),SPV节点只需要下载区块头就可以验证交易是否存在于区块中。

(二)密码学原理:哈希函数与加密算法

比特币系统用到哈希函数的地方有很多,比如:交易信息经过多次哈希算法生成的默克尔根值;通过不断变更随机数与区块头其他数值作为哈希函数的输入,得出小于难度目标值的解,从而完成工作量证明(挖矿);输入区块头所有数据,利用哈希函数获得区块哈希值,即每个区块的唯一识别符。

哈希函数是比特币系统中的一个关键技术,为比特币系统带来很大的便利。哈希函数有三个特色:

一是输出固定长度。输入任意长度的字符串,以哈希函数为基础的哈希算法可以产生固定长度的输出。比特币系统中,除了生成地址中的一个环节使用了REPID-160算法,但凡有需要做哈希运算的地方都使用SHA-256算法,即输入任何一串数据都将得到一个256位(bit)或32字节长度的哈希值。

二是不可篡改。不可篡改的特征确保了在传播过程中区块中的资料不被其他节点篡改。比如,如果改变交易数据从而改变默克尔树根值(区块哈希值的输入之一),所得的区块头哈希值就会完全不同。更严谨的是,比特币系统常使用双SHA-256运算,即使用两次SHA-256运算,以提高抗碰撞抗碰撞是指避免两个不同的输入值得出相同的结果的情况发生。性。

三是不可逆/单向性。如图1-6所示,哈希函数是难以逆转的。这意味着无法通过输出值倒推输入值,此特点在一定程度上保障了比特币系统的安全性。

图1-6 不可逆的哈希函数

(三)非对称的加密算法

在比特币系统中,每个用户都至少有一对私钥和公钥。如果使用公钥(私钥)加密一段数据,则必须用配对的私钥(公钥)解密,这种方式被称为非对称加密。如图1-7所示,私钥是一个随机生成的256位二位制数,通过不可逆转的椭圆曲线乘法Secp256k1可以计算得到公钥。而公钥经过两次哈希运算得到20字节的公钥哈希,再经过Base58check编码后可以生成比特币地址。

图1-7 私钥、公钥与地址的生成

总体来说,在比特币系统中,私钥就好比是不可被公开的账户密码,公钥就如同可被公开的银行账户,而钱包地址则相当于银行卡卡号。如图1-8所示,私钥代表了对比特币的控制权,必须始终保持机密。交易发起方用私钥对交易(包括转账金额和转账地址等)签名,并将签名后的加密交易信息用公钥广播。各节点接收到交易后可以用公钥解密,从而验证交易是否合法。整个过程交易发起方无须暴露私钥。

图1-8 简化版比特币交易加密过程与广播

(四)共识机制

共识机制是区块链网络最核心的运行动力。分布式账本技术虽然可以避免因单节点失败而引发的整个系统崩溃,但是也会存在记账行为不一致的问题。每个节点处于不同的环境,接收不同的信息,假如同时记账,必然导致账本不一致。因此,我们需要达成哪个节点有权记账的共识和数据记录不可逆的共识。

1.比特币系统的共识机制

在比特币网络中,“矿工”在挖矿节点将交易记录独立打包进新区块,并且要完成POW工作量证明算法的验算(不断寻找一个随机数,使得新区块头数据加上这个随机数的哈希值满足难度),才能获得创建新区块的记账权。

获得记账权的矿工把符合难度条件的区块在网络中广播出去,全网其他节点独立对新区块进行校验并组装进区块链。如图1-9所示,每个节点也会对区块链进行独立选择,在工作量证明机制下选择累计工作量最大的区块链。

图1-9 比特币网络的最长链原则

此外,比特币网络还存在每个全节点依据综合标准对每个交易进行独立验证的共识。这种独立验证作为比特币网络除POW机制外的第二道防护,保障分布式数据记录不可逆。

2.其他区块链共识机制

目前主流加密货币多采用纯POW机制,比如比特币、莱特币、门罗币以及升级前的以太币。由于POW机制存在浪费电力资源的缺点,因此其他一些加密货币采用POS机制时,要求节点提供一定数量的代币或者同时考虑持币时间来竞争记账权。由于POS机制一般需要节点时刻在线,进而衍生出DPOS股份授权证明,其核心是从全网节点中选出部分节点,然后在子节点集合内进行POS共识。此外,还存在一些非主流的共识机制,因此有一些项目采用混合共识机制。主流共识机制优缺点比较见表1-2。

表1-2 主流共识机制优缺点比较

三、交易流程

区块链的交易是构成区块的基本单位,也是大多数区块链记录的实际有效内容。比特币交易包含交易参与者价值转移的相关信息,每笔交易都可以通过比特币区块浏览器查询。比特币的交易流程如下:

一是交易的创建。交易创建者用私钥证明所支付的比特币的所有权,并针对转账金额以及接收者的钱包签署一个数字签名,并将这个签名附加在这枚货币的末尾,制作成交易单。

二是交易通过P2P网络传播。交易创建者将交易单发送到比特币网络,传播的形式多样,比如通过Wi-Fi、蓝牙、近场通信(NFC)、Chirp、条形码或者复制粘贴至一个网页表格。极端情况下,交易可以通过封包无线电、卫星或短波、扩频或跳频的方式进行,以避免被侦测或以阻塞通信的方式进行传输。

三是交易验证。任意一个节点一旦收到交易信息,就会对交易的有效性进行验证,一方面验证交易创建者的确有足够的比特币去完成交易,另一方面验证创建者不曾将这些比特币用到与别人的交易之中,从而避免“双花”问题。此外,此节点还需要校对公钥和签名。如果交易被验证无效,这个节点就会拒绝接收交易并且反馈给交易创建者。

四是验证结果通过P2P网络传播。如果交易被验证有效,第一个节点就会将交易广播到邻近的节点,这些节点验证交易的有效性后,会继续通过P2P网络传播。

五是交易放入交易池。每个节点在确认有效后,将把交易放入交易池,等待矿工打包确认。

六是交易的确认。当矿工从交易池中选择交易并打包进新区块后,交易得到确认,交易接收者就可以花费收到的比特币。

四、可信任机器:分布式与不可篡改

区块链被称为可信任中心,源于其分布式和不可篡改特征,而这两个特征由前文所述的区块链技术特点支撑。

(一)分布式

总体来说,分布式体现在记账与存储两个方面。

记账方面,区块链不需要依赖一个中心机构来负责记账,节点之间根据共识协议争夺记账权,并且通过“全网见证”,所有交易信息会被如实记录。

存储方面,由于网络中的一些节点(如比特币网络的全节点)都有一份完整的账本副本,即使部分节点被攻击或者出错,也不会影响整个网络的正常运转。同时,所有全节点都有一份副本,这意味着所有的账目和信息都是公开透明、可追溯的。所有参与者都可以查看历史账本并追溯每一笔交易,也有权公平竞争下一个区块的记账权。

(二)不可篡改

不可篡改体现为交易不可篡改与区块链不可篡改。

交易不可篡改一方面是因为合法的交易需要私钥签名,否则无法被节点验证;另一方面,每一笔交易都通过历史账本回溯。

而区块链的篡改则对算力具有很高的要求。以比特币网络为例,假如某个区块的数据被篡改,此区块的头哈希就会发生变化,将无法与下一个区块的父哈希相匹配,篡改者需要继续修改下一个区块的父哈希,并一直修改之后的每个区块。也就是说,篡改者需要满足以下三个条件才能完成篡改并有可能被认可:

①同时入侵所有参与记录的节点并篡改数据;

②重新计算被更改区块后续的所有区块;

③形成一个更长的区块链分叉提交给网络中的其他节点。

在比特币网络中,产生一个新区块的难度不小,要连续产生多个区块组成新分叉的计算难度更是惊人。一个恶意节点要做到这点需要拥有全网至少51%的算力基础,这即使在目前全网算力巨大的背景下也是很难实现的。

在现实世界中,几乎所有行业都涉足交易,并需要诚信可靠的交易环境作为行业健康发展的前提支撑。具备分布式和不可篡改特征的区块链则可以创造信任、赋能产业。

(作者:陈万丰)