购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 区块链的诞生与发展历程

区块链作为支撑数字经济发展的关键技术之一,得到了国家政策的支持。早在2016年12月,《“十三五”国家信息化规划》就将区块链定为战略性前沿技术之一。2019年10月24日,习近平总书记在主持中央政治局第十八次集体学习时强调,“区块链技术的集成应用在新的技术革新和产业变革中起着重要作用。我们要把区块链作为核心技术自主创新的重要突破口,明确主攻方向,加大投入力度,着力攻克一批关键核心技术,加快推动区块链技术和产业创新发展”。

区块链(Blockchain)也可以称为分布式账本技术(Distributed Ledger Technology,DLT),其主要利用分布式节点共识机制来生成和更新数据,利用密码学的方式保证数据传输和访问的安全,利用由自动化脚本代码组成的智能合约来编程和操作数据,具有分布式存储、防伪造、防篡改、透明可靠等特征。

作为一种融合了密码学、博弈论、网络通信等多种科学技术的集合创新技术,区块链具有多个层面的价值。从技术层面来说,通过构建P2P自组织网络、时间有序难篡改的密码学共享账本、分布式共识机制,从而在技术层面实现多中心的信任。从经济学层面来说,区块链天然的弱中心、分布式的特点能够带来一种新的价值传递方式,使交易双方可以通过区块链的技术背书实现点对点的价值交换,大幅简化中间环节。从社会治理层面来说,区块链可以实现数据和价值跨平台、地域、系统、部门、业务、国境的有序流通和共享,也可以支撑有效的协同管理和服务。作为推动供给侧改革的利器之一,这一技术的推广应用将创造出全新的商业模式和服务模式,有望构建新型的产业协作方式,提高协同流通的效率,加速社会数字化进程。

1.1.1 区块链的诞生

20世纪80年代,密码朋克(Cypherpunk)就有了加密支付工具的最初设想。蒂莫·西梅(Timothy May)提出了不可追踪的电子支付工具——加密信用(Crypto Credits),用于奖励那些致力于保护公民隐私的黑客们;1990年,大卫·乔姆(David Chaum)提出以盲签名技术为基础的、注重隐私安全的、不可追踪的密码学网络支付系统——Ecash;1998年,戴伟(Dai Wei)提出了匿名的、分布式的电子支付系统——B-Money;2005年,尼克·萨博(Nick Szabo)提出了比特金(Bitgold)的设想。但由于当时消费者对互联网上的隐私和安全问题并不十分重视,这些早期基于密码学的支付工具的尝试无一例外都失败了。

2008年,全球金融危机的爆发进一步推动了分布式、点对点支付工具的研发和实验。2008年10月31日,中本聪在一个隐秘密码学讨论小组中第一次发布比特币白皮书 Bitcoin A Peer-to-Peer Electronic Cash System (《比特币:一个点对点的电子现金系统》),描述了如何建立一套全新的、无中心化运营的点到点交易系统,而区块链是实现比特币的支撑技术。有别于传统的集中式记账技术,比特币网络的运行不需要任何中心化的支持机构参与,而是通过区块链中点对点通信和透明可信的规则,构建难伪造、难篡改和可追溯的块链式数据结构,分散式地管理事务处理。其数据信息存储在区块中,通过逻辑上的链接形成一条带有时序性的链型结构,通过使用数字签名与完整性校验保证区块中数据的真实性和完整性。

2009年1月3日,比特币系统正式开始运行,中本聪成功地从创世块中挖出第一批比特币(合计50枚),比特币也成为第一个基于区块链技术的应用。2010年,比特币交易所诞生,5月22日有人用10000个比特币购买了两个比萨,这是第一次有人用比特币购买实物的交易,自此比特币在极为小众的群体中流通起来,区块链作为支撑比特币系统运行的底层技术,也开始进入公众的视野。

1.1.2 区块链技术演进

一种技术的发展必然要经过不断的更新迭代,区块链技术发展至今可以说经历了3个阶段:技术起源、区块链1.0,区块链2.0(见图1-1),本节将主要介绍这3个阶段和区块链演进过程中的技术探索。

图1-1 区块链的技术演进

1.技术起源阶段

1)P2P(Peer to Peer)网络

P2P网络技术又称对等互联网技术或点对点通信技术,是相对于中心化网络而言的,是一种分散式地连接各对等节点的组网技术。P2P网络是区块链技术的底层网络基础,与中心化网络中心服务器服务全网的模式显然不同的是,在P2P网络中各个计算机节点具有相等的地位,节点间通过特定的网络协议进行信息或资源的交互,如图1-2所示。

图1-2 网络模式

2)非对称加密

非对称加密算法是利用一对密钥对来进行信息加解密的算法,这对密钥指的是公有密钥(Public Key)和私有密钥(Private Key),又称为公钥和私钥。常用的非对称加密算法有RSA、ECC等。非对称加密算法解密过程如图1-3所示。区块链中通常使用非对称加密的公私钥来构建对等节点间的保密通信,保证消息的可信及可验证性。

图1-3 非对称加密算法解密过程

3)分布式数据库

分布式数据库本质上是一种物理上分散但逻辑上集中的数据管理系统,其所管理的数据分散在各个物理节点上。从逻辑上来说,这些数据属于同一个系统,数据属于一个组织实体,但从物理上来看却可能分散在计算机网络的若干站点上。由此看来,分布式数据库有两个重要特点:分布性和逻辑相关性。借助分布式数据库的思想,区块链扩大分布式的范围,将数据由一个实体管理扩展为由多个实体共同存储与维护。

2.区块链1.0

2009年1月,比特币的正式上线运行标志着区块链进入1.0阶段,依赖区块链技术和激励机制的设计,比特币在完全分布式环境、无单一运维管理主体的情况下成功运行了十年多。

区块链在1.0阶段的基本技术组成如下。

1)分布式共享账本(Distributed Shared Ledger)

分布式共享账本指的是将账本分布式地存储在很多不同的服务器上,不论这些服务器身处何处,都能准确、及时地记录全网发生的每一笔交易,同时通过网络通信方式使得每个服务器上存储的账本都保持一致。这是一种不需要被任何中心化主体存储或确认的数据记录方式,在同一个网络里的所有参与者都可以获得一个唯一、真实账本的副本。由于账本是全网同步的,通过各账本的数据同步与交叉验证,任意一个肆意篡改的账本都会被识别出来。

2)块链式数据结构

块链式数据结构是比特币底层区块链中数据存储的结构,如图1-4所示。在比特币与其他后续发展的区块链中,记录在区块链中的最小事务单位是“交易”(Transaction),交易代表着用户在链上发起的转账、支付、兑换等金融活动。区块是由特定的节点将一笔或者多笔交易打包形成的一个交易集合,其存储结构分为区块头和区块体两部分。其中,区块体包含这个区块的所有交易,以默克尔树(MerkleTrees)的形式组织存储,区块头包含父区块哈希值、版本号、时间戳、生成区块的难度、随机数和交易体组成默克尔树根的默克尔根值(Merkle Root)。由于区块头中包含前一区块经过哈希加密算法处理所得的哈希值,逻辑上形成了首尾链接的块链式存储结构。

图1-4 块链式数据结构

在区块链技术体系中,哈希加密算法的运用发挥着重要作用。哈希加密算法具有显著的单向性与碰撞约束,使其加密后的信息很容易被验证但很难还原。此外,哈希加密算法的一个重要特征是只要输入的字符串发生一丝一毫的变化,其输出的哈希值将会显著不同。基于哈希加密算法的这一显著特性,以及块链式存储结构,攻击者需要花费巨大的代价才能篡改历史区块中的交易信息。因为一旦篡改某个历史区块中的交易信息,该区块的哈希值就将发生变化,进而引起该区块之后所有区块的哈希值变化,攻击者必须将该区块连同之后的所有区块的哈希值重构才可以完成交易修改。

3)默克尔树

默克尔树是区块链的基本组成部分之一,以比特币为例,区块头中的默克尔树根是由区块体中存储的一笔笔交易不断重复两两哈希过程而得到的唯一哈希值。

默克尔树以其发明者拉尔夫默克尔(Ralph Merkle)的名字命名,它是哈希大量聚集数据“块”的一种方式。在区块链中交易就是数据“块”,构成默克尔树的叶子节点。如图1-4所示,笔者将这些块从下至上依次两两分组,为每组建立一个包含每个块哈希指针的新的数据结构,直到得到一个单一的哈希指针,即根哈希(Root Hash)。在这样的机制下可以从根哈希指针回溯到任意数据块,最终能保证原始交易未经篡改。因为一旦攻击者篡改了树底部的一些数据块,会导致上一层的哈希指针不匹配,从而使得任何篡改行为都会被检测到。

4)工作量证明机制(Proof of Work)

共识机制描述的是系统中各节点参与决策达成一致的过程。在区块链这样一个分布式的系统中,需要在互不信任的节点间建立一套信任机制,才能完成对每笔交易的验证与确认,通过技术背书在机器间建立“自信任”的网络。

工作量证明机制是区块链1.0阶段中比特币的共识机制。比特币有两种不同的奖励机制来鼓励节点进行记账工作。一种是区块奖励,即所谓的“挖矿”,创建区块的记账节点都可以在这个区块里加入一笔特别的交易,这笔交易就是一个造币的交易,形成这个区块的节点可以获得这笔收益;另一种是交易费,即比特币交易的一部分支付给记账节点作为记账报酬。由于比特币获得一些国家和商业机构的价值认可,其奖励机制的设计使得运维比特币系统的所有的记账节点都有动力诚实地记账,并维持系统的正常运行。

3.区块链2.0

为解决区块链1.0阶段应用开发局限、吞吐量性能较低、能量消耗大的问题,区块链的技术架构在进一步地调整与改进,2015年7月以太坊的问世,标志着区块链进入2.0阶段。以太坊引入智能合约的概念,支持图灵完备的编程语言Solidity来编写智能合约及分布式应用,有了智能合约系统的支撑,区块链的触角开始从单一的记账领域延伸到涉及合约功能的其他金融、政务、民生等诸多领域。另外,IBM超级账本项目——Hyperledger Fabric联盟链的诞生,使得区块链的应用进一步扩展到对监管合规性、数据安全、性能等要求更高的场景中,技术赋能的业务领域逐渐扩大。

区块链2.0时代主要有以下几个典型特征。

1)智能合约

智能合约的引入扩展了区块链的编程能力,是区块链2.0的一个典型特征。1995年,跨领域法律学者尼克·萨博(Nick Szabo)提出了“智能合约”(Smart Contract)的概念,即“一个智能合约是一套以数字形式定义的承诺(Commitment),包括合约参与方可以在上面执行这些承诺的协议”。智能合约允许在没有第三方参与的情况下,实现双方或多方的可信交易。但由于早期缺少可信的分布式执行环境,智能合约并没有实际落地。直到比特币的诞生,人们意识到区块链能够与智能合约相结合,达到相辅相成的效果。从以太坊开始,智能合约已成为区块链上的一种计算机程序,当合约中的条件得到满足时,便会自动触发执行合约内容。

2)共识机制

随着区块链应用场景的丰富,适用于不同场景的共识机制也相继诞生。例如,联盟链常用的拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法、公链常用的股份授权证明(Delegated Proof of Stake,DPOS)等。

拜占庭容错技术能够很好地解决分布式系统中节点宕机和传输错误的情况,但由于早期拜占庭系统算法具有指数级的复杂度,所以应用范围受限。直到1999年PBFT算法的提出,将算法复杂度降为多项式级别,拜占庭容错技术才得到了广泛的应用。

在PBFT算法中,存在视图(View)的概念,在每个视图里,所有节点都在相同的配置下运行,同时只有一个主节点而其他节点作为备份节点。主节点负责对客户端的请求进行排序,按顺序发送给备份节点,而备份节点会检查主节点对请求的排序是否存在异常。如果出现异常,就会触发视图更换(View Change)机制,由下一编号的节点作为主节点,进入新的视图。

PBFT算法执行流程如图1-5所示,服务器之间交换信息3次,整个过程包含5个阶段。

图1-5 PBFT算法执行流程

(1)请求(Request):客户端向主节点发送请求,请求信息格式为<REQUEST,O,T,C>,O为执行的操作,T为本地时间,C为客户端编号。

(2)预处理(Pre-Prepare):收到请求的主节点记录请求信息并进行编号,之后广播一条Pre-Prepare信息给其他备份节点。Pre-Prepare信息格式为<PRE-PREPARE,V,N,D>,其中,V为请求所在的视图,N为主节点给请求的编号,D为Digest编号。如果备份节点所在视图与V相同,且从未接收到在同一视图下的编号也是N但Digest编号不同的Pre-Prepare信息,则同意该信息,并进入Prepare阶段。

(3)处理(Prepare):进入该阶段的备份节点将广播一条Prepare信息,并接收其他节点发送的Prepare信息。Prepare信息格式为<PREPARE,V,N,D,I>,其中I为备份节点的编号。如果节点接收到2F个(F为系统最大允许出错的节点数量)Prepare信息且Prepare信息的V、N、D相同,则该节点进入Commit阶段。

(4)执行(Commit):进入该阶段的备份节点将广播一条Commit信息,同时接收其他节点发送的Commit信息。Commit信息格式为<COMMIT,V,N,I>,当接收到2F+1个(包含自己)具有相同V和N的Commit信息后,节点等待其他低编号的请求执行后即可执行该条请求。

(5)答复(Reply):该节点对客户端进行答复,答复信息格式为<REPLY,V,T,C,I,R>,V为请求所在的View,T为请求对应的时间戳,I为答复节点编号,R为执行的结果。客户端收到F+1个节点的答复,且请求对应的时间戳和执行结果都相同,则认为请求已被系统记录处理。如果因网络延迟等原因客户端未收到足够答复,则重复发送请求到服务器。如果请求已被执行,则服务器只需重复发送答复信息。

此外,当节点执行完请求后,还需要进行垃圾回收,把之前记录的该请求的信息清除掉,否则会占用系统资源。但由于网络延时等原因,不同的节点可能处于不同的状态,在清除记录前需要在全网达成一致,因此PBFT算法中还设计了检查点(Check Point)协议。

4.技术前沿探索

经历过2.0阶段后,区块链的应用超越金融领域,涉及社会治理、智能化领域,包括物联网、公益慈善、医疗、教育、审计、公证、司法仲裁等领域,应用范围扩大到社会的方方面面。但随着区块链应用范围的不断扩展,商业需求对区块链底层技术的要求也在不断提升,2.0阶段之后的区块链技术开始探索如何提升链上性能、优化链式结构、实现链跨链互操作等功能。

1)区块链不可能三角

以太坊创始人Vitalik Buterin在Sharding FAQ提出区块链的“不可能三角”模型,如图1-6所示。在一个区块链系统中,很难做到同时满足分散性、高效性、安全性3个属性的要求,其中高效性指的是链上交易处理效率,可以理解为每秒处理交易的笔数(TPS)。由于无法同时满足这3个要求,区块链的设计就只能从三者中选择其二,如比特币就是选择部分牺牲高效性,而确保分散性和安全性。而联盟区块链实质上是在确保安全性和高效性的基础上进行“部分中心化”或“多中心化”的妥协。面对这样的技术瓶颈制约,区块链技术的发展只能不断思考如何权衡三者的关系。

图1-6 区块链“不可能三角”模型

2)有向无环图

有向无环图(Directed Acyclic Graph,DAG)是计算机领域的一种数据结构,其独特的拓扑结构经常被用于处理动态规划、数据压缩等多种算法场景。

由于区块链传统的单链式结构决定了打包出块无法并发执行,大大制约了交易处理的效率,故有人提出用DAG来存储区块链上的交易,将传统的块链式结构变为网状拓扑结构,进而解决区块链的效率问题。有学者指出相比传统链式结构的区块链,在区块打包时间不变的情况下,DAG区块链可以并行打包 N 个区块,网络中的交易量就可以容纳 N 倍。DAG结构示意如图1-7所示。

图1-7 DAG结构示意

由计算机科学家雷蒙贝尔德开发的哈希树(Hashgraph)方案就是采用DAG技术将交易以时序先后组织起来。DAG中的交易并不需要矿工来验证,并摒弃了传统区块链中的交易以区块连接的形式,这意味着其比传统结构的区块链的交易处理速度更快。

3)分片

在传统区块链中,通常在一段时间里只产生一个区块,全网参与共识的节点将竞争唯一的记账权,或者针对一个新生成的区块达成共识。为了寻求更高的可扩展性,可以通过提高区块生产速度或者增加区块大小的方法来完成扩容。然而,这两种方式会带来频繁分叉或者网络延迟的问题。分片技术则提供了另一种区块链扩容的解决思路,即通过改变网络中验证区块的方式来增加吞吐量。

区块链中的分片技术是受传统数据库分片的启发,传统数据库分片指的是将数据分割为多个部分并分发至不同的服务器上。而在区块链分片中,网络中的节点将被划分至不同片区,网络中的交易也将被分配到不同的片区中进行处理。因此,原本区块链中由共识节点处理全网所有交易的逻辑变成了每个节点只处理一小部分传入交易,并且不同分片网络中的节点将并行执行。这种将网络分片的方式使得在同一时间内区块链上可处理和验证的交易数量变多,从而达到扩展区块链吞吐量的目的。目前主流分片方式主要有3种:网络分片(Network Sharding)、交易分片(Transaction Sharding)和状态分片(State Sharding)。

4)跨链技术

如果说共识机制是区块链的灵魂,那么跨链技术就是实现价值互联网的桥梁,它是把联盟链从分散的孤岛中拯救出来的良药。

跨链是让区块链上的数字资产、有价值的信息、服务、资源等“价值”跨过链与链之间的沟壑,进行直接的流通。从本质上来说,价值没有办法在两条互不相关的区块链间直接转移,但是对于具体的某个用户,用户在一条区块链上存储的资产,能够以某种形式兑换成另一条链上的资产,这就是价值的跨链;或者当一条链能依据另一条链上的事务来触发做出相关的反应时,就是信息的跨链。

目前主流的跨链技术包括:公证人机制(Notary Schemes)、侧链/中继方案(Sidechains/Relays)、哈希锁定技术(Hash-Locking)、分布式私钥控制。例如,公证人机制的主要思想是寻找一个两条链共同信任的第三方来声明在每条链上发生的特定交易。这个第三方即公证人,公证人可以是某一个组织,也可以是一条区块链。相较于侧链技术,中继技术适用范围更广,中继链可以通过特定的协议,使参与到其中的所有区块链都能够互相操作,也就可以实现整个区块链生态的跨链。

5)隐私保护

虽然区块链多方记账的技术原理使得账本在多方之间公开透明,但是在区块链上仍然要保护好流转的用户数据的安全与隐私。目前已有一些通过密码学技术、安全多方计算、数据分区机制来保护用户隐私安全的方案。这些技术可以用来保护数据隐私性、签名者隐私性、地址隐私性等。然而,隐私安全的防范手段远不止于此,随着密码学与区块链技术的高速发展,将会涌现出更多的新技术。同时也应该意识到,任何单一技术都无法做到完全的保护,需要将多种技术结合到一起才能对用户隐私实施有效的保护。以下将以零知识证明为例介绍相关的区块链隐私保护方法。

零知识证明(Zero-Knowledge Proof)是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的,零知识证明指的是证明者能够在不向验证者提供任何有效信息的情况下,使验证者相信某个论断是正确的。早期零知识证明需要证明者与验证者通过交互消息的方式才能完成证明,这种证明过程被称为“交互式零知识证明”。20世纪80年代末,Blum等人提出使用短随机串交互过程实现零知识证明,只须由证明者发出一次消息,无须证明者与验证者交互,验证者就可以验证消息的正确性,该证明过程被称为“非交互式零知识证明”。在区块链系统中通常使用的是“非交互式零知识证明”。下面以两个典型场景来说明“零知识证明”的意义。

(1)场景一:信箱问题

证明者向验证者表明自己是名邮递员,并拥有信箱钥匙。信箱只可以通过钥匙打开,并不存在其他打开方式。验证者怀疑证明者没有信箱钥匙,此时,证明者如何证明其拥有信箱钥匙呢?当验证者在场时,证明者打开信箱锁,证明其言论正确性,但此时验证者可以看到钥匙形状,钥匙信息泄露。验证者将带有自定义内容的信件投递到信箱,证明者单独打开信箱,向验证者展示信件内容,证明其拥有信箱钥匙。该证明思路就属于“零知识证明”。

(2)场景二:阿里巴巴与强盗问题。

一位名叫阿里巴巴的青年男子被强盗俘虏,强盗向他拷问打开山洞石门的咒语,如果阿里巴巴告诉强盗咒语,他将没有利用价值而被杀死。如果阿里巴巴始终不说,强盗觉得阿里巴巴可能不知道咒语、没有价值,阿里巴巴也将被杀死。怎样做到让强盗相信阿里巴巴知道咒语,却又不告诉强盗呢?阿里巴巴想到一个好方法,强盗在距离阿里巴巴一定距离的地方拿着弓箭指着他,强盗举起右手,阿里巴巴念咒语打开石门;强盗举起左手,阿里巴巴念咒语关闭石门。强盗不停地随机举起左右手,阿里巴巴都能按照既定规则执行,证明其拥有咒语。

根据以上实例总结,“零知识证明”模型应满足以下条件。

(1)可靠性:证明者论断是真实的,则验证者以大概率接受证明者论断;证明者论断是虚假的,则验证者以大概率拒绝证明者论断。

(2)零知识性:证明者向验证者证明其论断的正确性,但并未向证明者透露其他有用信息。

零知识证明经过学者们三十多年的探索和研究,取得了许多重要的成果。目前,已经有很多基于RSA或DSA数字签名实现的零知识证明方案。零知识证明技术主要用于隐私保护场景,在许多行业中都有广泛应用。例如,在身份识别领域已有Fiat-Shamir身份识别、Schnorr身份识别、Guillou-Quisquater身份识别等零知识证明方案。 kRZkKbOUPJgFJqhLu5Q7pkyve8XtxLVTtRcIzUhQ7DVVilpT+KgrRZba+WYXE+VM

点击中间区域
呼出菜单
上一章
目录
下一章
×