
1.2 比特币技术原理
区块链是密码学、分布式网络和数据存储、共识算法等技术的集合创新,下面从八个方面详细介绍比特币的技术原理,以比特币为案例深入解析区块链技术。
1.2.1 非对称加密算法
非对称加密算法是一种密钥的保密方法。非对称加密算法需要两个密钥:公开密钥(Public Key,简称公钥)和私有密钥(Private Key,简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方;甲方再用自己的私钥对加密后的信息进行解密。甲方想要回复乙方时正好相反,使用乙方的公钥对数据进行加密,同理,乙方使用自己的私钥来进行解密。另一方面,甲方可以使用自己的私钥对机密信息进行签名后再发送给乙方;乙方再用甲方的公钥对甲方发送回来的数据进行验签。甲方只能用其私钥解密由其公钥加密后的任何信息。非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要(见图1-1)。

图1-1 对称与非对称加密算法原理
公钥和私钥符合严格数学关系的一对一对应,一个公钥有且只有一个对应的私钥。公钥加密的信息只有相应的私钥才能解密,私钥签名的内容只有相应的公钥才能解密。私钥签名—公钥解密通常用在数字签名中(证明文件是由私钥拥有者认证的)。
常见的非对称加密算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)。
非对称加密在区块链中的使用方式如下(见图1-2):
公钥用于生产比特币钱包地址;
私钥用于对交易数据签名,确认交易不可伪造、不可抵赖;
公钥验证某交易的签名,确认交易发起方的真实性。

图1-2 非对称加密算法在比特币中的应用
1.2.2 哈希与默克尔树
哈希(Hash)是信息的提炼函数,通常其运算结果长度要比信息小得多,且为一个固定长度。加密性强的哈希一定是“不可逆的”,这就意味着通过哈希运算结果无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致哈希运算结果的明显变化,这被称为“雪崩效应”。哈希还应该是“防冲突的”,即找不出具有相同哈希运算结果的两条不同信息。具有这些特性的哈希运算结果就可以用于验证信息是否被修改。
默克尔(Merkle)树是一种哈希二叉树,用于快速校验大规模数据的完整性。其叶子节点上的值通常为数据块的哈希值,而非叶子节点上的值是该节点的所有子节点的组合结果的哈希值(见图1-3)。

图1-3 默克尔树示例图
默克尔树大多用来进行完整性验证处理。在处理完整性验证的应用场景中,特别是在分布式环境下进行这样的验证时,默克尔树会大大减少数据的传输量及计算的复杂度。
哈希和默克尔树的应用可以快速定位数据错误(数据篡改)以及快速校验部分数据是否在原始数据中,从而在算法上保证区块内部数据的不可篡改。
1.2.3 UTXO记账方式
UTXO是英文“Unspent Transaction Output”的缩写,意为“未花费的交易输出”,它是比特币交易生成及验证的主要方式。
与“比特币”这个名称的直观概念不同,比特币并没有一个真实的数字货币形式或者载体,也不像传统的银行账户一样保存账户余额。比特币仅仅通过分布式共享账本记录了每一笔交易,类似财务记账的会计分录。因此,实质上没有“比特币”,只有UTXO共享账本(见图1-4)。

图1-4 UTXO共享账本在比特币中的应用
比特币的设计中采用UTXO的记账方式,基于如下几点考虑:
1)UTXO确保了比特币的匿名性和隐私性,一个用户的比特币余额是钱包软件聚合用户的UTXO计算出来的,如果用户启用了新的地址用于转账和交易,新地址与原地址之间的关系很难被追踪,更好地保证用户的隐私,而传统的账户余额模型无法做到。
2)UTXO模型通过链式的方式组织所有交易的输入和输出,每一笔交易的输出最终都能追寻到比特币被挖出时的区块的第一笔交易,使得“每一个币”(最小单位是聪,即亿分之一)的来源都可以追溯,确保比特币的信用基础。3)UTXO由于只记录有用的交易信息,大大简化数据的存储。比特币运行近10年,其账本数据规模才200GB左右。
4)UTXO结构有利于并行处理交易,提升了系统的交易验证速度。
1.2.4 区块与链
区块链是一个链式存储结构,区块就是链式存储结构中的数据元素,区块记录交易信息,所有区块按照时间顺序连接形成单向链式结构,其中第一个区块被称为创世区块(见图1-5)。

图1-5 区块链的链式数据结构
区块是储存数据的单位,可分为主体和头。主体包括记录的数据或者交易的具体内容。区块链的功能主要由区块头实现。区块头数据结构说明如图1-6所示。
哈希算法的特性和区块链接机制保证所有上链数据不可篡改。其中本区块默克尔根节点哈希值(Hash Merkle Root)用于验证本区块记录的交易的完整性,如有任何数据篡改则无法通过哈希验证。前一区块哈希值(Hash Prevrious Block)用于保证时序链结构的完整性,任何时序链结构的替换或者篡改都无法通过哈希验证。


图1-6 区块头数据结构
1.2.5 P2P分布式网络
区块与链的结构仅保证了单个节点数据存储的完整性与数据可验证性。要实现数据不可篡改的目标,需要基于P2P分布式网络实现数据的分布式共享存储,在P2P网络的每一个节点都保存数据的备份,只要存在经验证没有被篡改的数据,就可以对真实数据进行全网恢复。
P2P分布式网络又称对等互联网络技术,依赖网络中所有参与者的计算能力和带宽,而不是依赖较少的几台中心化服务器。在P2P的网络中,所有网络节点都是同等地位,没有服务端和客户端之分,每一个节点既是服务端也是客户端(见图1-7)。

图1-7 P2P网络结构示意图
P2P网络的特点:
去中心化:网络中的资源和服务分散在所有节点上,信息的传输和服务直接在节点之间进行,无须中间环节和中心化服务器的介入与存在。
健壮性:耐攻击,高容错,服务和信息分散在各个节点之间进行,部分节点和网络遭到破坏对网络整体影响很小。
1.2.6 共识机制
由于P2P网络下存在较高的网络延迟,各个节点收到数据的先后顺序不可能完全一致。因此,区块链系统需要设计一种机制,对在差不多时间内发生的事务的先后顺序达成共识。这种对一个时间窗口内的事务的先后顺序达成共识的算法被称为“共识机制”。“共识机制”既是认定一个区块产生的一致性和有效性的手段,也是防止对全网数据进行篡改的手段。
目前主要的共识机制包括概率性共识机制及确定性共识机制。所谓概率性共识机制,是指在区块链形成过程中,可能存在多个节点同时记账的情况,在一段时间后通过比较机制来确定记账的有效性。因此,节点记账是否有效存在不确定性。确定性共识机制是指在开始记账之前先确定当次负责记账的节点,然后再开始记账过程,记账节点的记账行为确定是有效的。
常见的基本共识机制包括:POW(Proof of Work,工作量证明机制)、POS(Proof of Stake,权益证明机制)、DPOS(Delegated Proof of Stake,委托权益证明机制)、PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法)等。其中POW属于概率性共识机制,其他属于确定性共识机制。
1.POW工作量证明机制
系统中每个节点为整个系统提供计算能力(简称算力)。通过一个竞争机制,让计算工作完成最出色的节点获得系统的奖励,即完成区块的生成和数据的记录,同时该节点将得到新生成货币的分配,简单理解就是多劳多得。比特币、莱特币等货币型区块链就是应用POW机制的。
优点:完全去中心化,节点自由进出,算法简单容易实现,破坏系统花费的成本巨大,只要网络破坏者的算力不超过网络总算力的50%,网络的交易状态就能达成一致。
缺点:最大的缺点是浪费能源;区块的确认时间难以缩短,如比特币每秒只能做七笔交易,不适合商业应用;对节点的性能与网络环境要求较高;容易产生分叉。另外,POW作为一种概率性共识机制,在确定最长链之前,记账工作不能确定,确定最长链之后,非最长链的工作将被废弃,造成工作浪费。
2.POS权益证明机制
与要求每个节点执行一定量的计算工作不同,权益证明要求节点提供一定数量虚拟货币的所有权证明。权益证明机制的运作方式是:当创造一个新区块时,节点需要创建一个“币权”交易,交易会按照预先设定的比例把一些虚拟货币发送给节点本身。
优点:相对于POW更加节能,不需要耗费大量能源去计算。POS根据每个节点拥有虚拟货币的比例和时间,依据算法等比例地降低节点的计算难度,从而加快了寻找随机数的速度,能在一定程度上缩减达成共识的时间;同时和POW一样,破坏系统的成本较高。
缺点:POS模式下,虚拟货币只能通过融资方式发行,无法保障持有者不因受利益诱惑而抛售,同时这种模式的信用基础不够牢固,也并没有从根本上解决难以应用于商业领域的问题。
3.DPOS委托权益证明机制
DPOS是POS的进化方案,DPOS类似于现代董事会的投票机制,通过选举代表来进行投票和决策。被选举出的N个记账节点来做新区块的创建、验证、签名和相互监督,这样就极大地减少了区块创建和确认所需要消耗的时间和算力成本。
优点:大幅缩小参与验证和记账节点的数量,能耗更低,同时极大地缩短了共识验证需要的时间,可以达到秒级的共识验证;由全体节点投票选择节点代表的机制理论上比POW/POS更加不容易被操纵。
缺点:DPOS理论上更加去中心化,但由于大部分节点因为种种原因投票积极性不高或不便投票,共识掌握在少数节点代表手中,对于一些节点代表作恶的行为也不能够及时响应,有较大的安全隐患。
4.PBFT实用拜占庭容错算法
实用拜占庭容错算法是一种采用“许可投票、少数服从多数”来选举领导者并进行记账的共识机制,该共识机制允许拜占庭容错,允许强监督节点参与,具备权限分级能力,性能更高,耗能更低,而且每轮记账都会由全网节点共同选举领导者,容错率为33%。实用拜占庭容错机制特别适合联盟链的应用场景。
优点:效率高;容错性高;节能环保。
缺点:当网络不稳定或参与者数量增多时,系统的稳定性和效率会显著下降。
共识机制的设计隐含了分布式网络去中心化的程度,根据去中心化程度不同,区块链技术分为公链、联盟链和私链。
1.2.7 挖矿发行与激励机制
比特币挖矿是将一段时间内比特币系统中发生的交易进行确认,并且形成新区块记录在区块链上的过程。挖矿的人(机器设备)叫作矿工。简单说,挖矿就是比特币记账的过程。
矿工是记账员,区块链就是账本,成功抢到记账权的矿工会获得系统新生的比特币奖励。因此,挖矿也就是生产比特币的过程,中本聪最初设计比特币时规定每产生21万个区块比特币奖励减半一次,直至比特币不能再被细分。因为比特币和黄金一样总量有限,所以比特币被称为数字黄金。
实质上,挖矿是用计算机解决一项复杂的数学问题,来保证数字货币网络分布式记账系统的一致性。数字货币网络会自动调整数学问题的难度,系统自动生成新的数字货币作为奖励,激励矿工参与记账,每十分钟全体矿工一起计算一道问题,形象地说,这个过程就像做抢答题——在很多人同时使用这个程序的过程中,最先算出答案的矿工就获得记一页账的权利。记账完成后,该名矿工将自动获得一定量的数字货币。这就是新增币的发行过程。不过,参与“挖矿”的人数越来越多,解开“密码箱”的难度也越来越大。
矿工挖矿过程中可以获得挖矿奖励。在项目初期,没有人愿意支付矿工服务费的时候,挖矿激励机制确保了矿工对比特币网络的自主投入和长期维护。挖矿发行和激励机制奠定了区块链通证经济(参见第10章“通证经济”相关内容)的最初雏形。比特币通过减少发行量的通缩机制来刺激比特币价格上涨的办法,也在后续的虚拟货币发行中被广泛抄袭沿用。
1.2.8 智能合约
比特币提出并实现了智能合约的初步想法。
所谓智能合约,简单意义上,是一段计算机程序,满足可准确自动执行即可。因此自动售卖机也是智能合约的一种实现。从系统角度,智能合约不只是一个可以自动执行的计算机程序,它本身就是一个系统参与者,对接收到的信息进行回应,可以接收和储存价值,也可以向外发送信息和价值。智能合约就像一个可以被信任的人,可以临时保管资产,总是按照事先的规则执行操作。区块链各个节点实时监控智能合约的状态、核查外部数据源、确认满足特定条件时激活并执行合约。
智能合约与传统合约相比具有许多优势:
不依赖第三方执行合约,消除中间人,大大减少了花费在合约上的成本。消除第三方意味着合约验证和执行的整个过程随着用户间的直接交易而变得快速。
合约条款不能更改,不受各种人为干预,用户受骗的风险较小。
合约会永远保存在网络上,不存在放错或丢失的风险。
比特币的智能合约仅提供了部分函数调用功能,功能有限,因此不是图灵完备的。以太坊首次实现了图灵完备的智能合约。