区块链(blockchain或block chain)是指通过数据加密、数据链式钩稽、多副本存储和分布式共识等机制, 实现去中心化的分布式数据管理技术.它最早是由中本聪提出, 并在比特币(bitcoin)中加以实现和应用[1].随着比特币应用的快速发展, 区块链技术所具有的防篡改、不可抵赖、强一致和完整性等特性, 特别是它的对等网络(peer-to-peer network)去中心化本质, 得到了工业界和学术界的广泛关注.在加密货币[1]、分布式账本[2]、单据管理[3]、首次代币发售(ICO)和众筹[4]、慈善[5]等领域, 区块链技术得到了广泛的探索和应用.
另一方面, 最早的区块链技术被设计用于比特币这一特殊的虚拟货币应用.它与应用紧密结合, 所能提供的数据管理功能简单, 同时基于工作量证明(proof-of-work, 简称PoW)的共识机制的计算量耗费巨大, 导致极低的系统吞吐率和很长的系统延迟.如何提供丰富的数据管理和数据处理功能, 提高系统性能, 成为区块链研究、开发和应用所关心的热点.以以太坊(Ethereum)[6]和Hyperledger[7]等为代表的开源项目则提供了相对完善的区块链的开发与应用基础, 推动了区块链普及、应用的快速增长, 以及新问题的发现与研究.
从数据管理角度看, 区块链的本质是一个构建在对等网络上、提供了可信数据管理功能的数据库系统.一个可信数据库管理系统从3个层面确保系统的可信性, 即存储的可信性、处理的可信性以及外部访问的可信性, 如图 1所示.
Fig. 1 The architecture of trusted data management systems
图 1 可信数据管理系统示意图
存储可信性是指数据处理结果一旦被确认, 不会丢失或被篡改.它要求系统提供传统数据库管理系统[8]和事务处理[9]中所要求的事务持久性(durability), 但同时也要求系统在存储、通信故障, 甚至在蓄意攻击时, 仍能确保数据存储的正确性.
处理可信性一方面是指数据处理的正确性, 另一方面是指处理过程和结果可审计与可溯源.前者要求事务的并发控制, 而后者则要求系统不仅保存数据的最终状态, 还要保存数据处理的过程.数据处理的正确性是对传统数据管理系统的基本要求.但是, 传统的数据库管理系统是集中式的, 保持事务的ACID属性已有成熟并相对高效的技术[8, 9].对等网络环境中的数据管理, 大都专注于查询处理的性能[10, 11].虽然已有大量关于分布式系统中的共识(consensus)机制研究[12, 13], 但在数据管理系统中, 由于性能问题, 共识机制和跨节点的协调通常只被用于选举主控节点, 而较少被直接应用于事务处理或被尽量避免[14].因此, 在区块链这样的去中心化对等网络环境中, 如何在确保系统“正确”的同时, 实现高效事务处理, 就成为一个突出的问题.
处理过程和结果的可审计及可追溯也是重要的研究问题.在传统的数据库管理系统中, 数据库中存储、维护的是当前的数据状态, 处理过程和数据的历史信息通常存储在数据库日志中, 仅被用于故障恢复[8, 9], 并不直接提供查询服务; 在系统无故障正常运行的情况下, 也不参与查询的处理.在节点不可信的对等网络环境中, 一些查询和事务在处理时需要验证数据的历史状态, 以确保当前状态的正确性.因此, 传统的数据管理技术无法被直接应用于这一场景.
数据溯源(data provenance)是数据管理中的一项重要技术, 在科学数据管理和数据仓库中有着广泛的应用[15].然而, 很多数据溯源技术仅针对集中式数据库或节点可信的分布式环境, 在区块链的应用场景下无法直接应用.
外部访问可信性是指对用户访问的认证.在实现机制上, 它依赖于分布式身份认证等技术, 也与具体的应用场景和业务紧密相关.本文的综述不涉及外部访问可信性.
与已有的从数字货币[16]、安全[17]、协议[18]、系统架构[19]、私有链[20]和研究挑战[21]角度所进行的区块链技术综述不同, 本文从可信数据管理的角度梳理区块链与相关数据管理技术的关联, 介绍在不完全可信的对等网络环境中的数据管理问题和相关技术, 并分析它们在新型应用场景中的适用性.由于外部可信性一方面与应用的具体模式紧密关联, 另一方面又可以部分地依赖于分布式认证[22]技术解决, 因此, 本文聚焦于存储可信性和处理可信性技术.
本文第1节简单介绍区块链的基本数据结构和概念.第2节从分布式共识的角度介绍存储可信性保障技术.第3节介绍处理可信性, 包括智能合约及其问题、数据溯源技术以及可认证查询处理.第4节简要介绍主要的区块链系统和应用.最后, 第5节对可信数据管理技术所面临的研究挑战进行分析.
1 区块链基础
区块链的基本数据结构包括两部分, 即区块内结构与区块间链式结构, 分别如图 2(a)和图 2(b)所示.一个区块包含头信息和体信息.头信息是区块的元数据, 用于验证区块, 并与其前驱和后继区块建立关联.通常, 头信息包含自身时间戳、前驱区块的签名值、一个特殊值(称为nonce)、验证要求(如难度目标).体信息则是交易的序列.
Fig. 2 Logic data structures of blockchains
图 2 区块链逻辑结构
只有当一个区块的签名结果满足验证要求时, 一个区块才能通过验证.例如, 在比特币中, 区块散列(签名)后的结果值必须小于某个特定值(该值由难度目标决定, 随着时间的变化, 难度逐渐增加)[1].当一个区块需要与其前驱建立关联时, 其体信息、前驱区块签名值、自身时间戳、验证要求等信息都已经确定, 唯一能调整以获得不同自身签名值的变量就是nonce值.只有当获得了合法的nonce值后, 区块才能通过验证, 与前驱区块进行链接.
区块内的交易序列常通过特殊的数据结构, 如Merkle-tree[23], 进行组织.Merkle-tree是一种树型数据结构, 最初提出时为二叉树, 但可被拓展为多叉树, 其叶子节点为数据项或数据项的散列值, 每一个内部节点的值为其所有子节点的散列值, 从而根节点的值可被视为整棵树的签名.利用这一性质, Merkle-tree可被方便地用来实现数据集相等测试、定位修改以及零知识证明.因此, Merkle-tree在区块链中被用于检测区块副本是否相同.
区块链的逻辑结构确保区块间的关系可验证.在系统中, 一个区块存储于多个节点, 以应对由于节点或网络故障所引起的区块副本丢失问题.
需要注意的是, 对于区块(k-1), 可能存在多个区块k1, k2, …, kp, 都能通过验证, 成为(k-1)的后继.如何让参与区块链的所有节点对区块链结构达成一致, 其本质是分布式共识(consensus)[12]问题.通常, 区块链仅承认链最长的那条链.下一节将对区块链中的分布式共识机制进行介绍.
区块链系统的另一个重要方面是其提供服务的接口.在比特币应用中, 区块链仅提供转账, 即事务的执行与查询.而随着应用需求以及以太坊和HyperLedger等系统的发展, 新的区块链平台提供了称为“智能合约(smart contract)”的用户代码执行机制.从可信性角度看, 智能合约不仅可被执行, 且其执行历史将被记录, 执行过程和结果可审计、可追溯.第3.1节将介绍区块链中的智能合约处理机制, 而对于数据溯源这一特殊问题则在第3.2节中加以介绍.
2 存储可信性
2.1 工作量证明机制
如前所述, 存储可信性解决区块的容错一致问题, 其本质是分布式共识问题.比特币中的区块链采用了被称为工作量证明(proof of work, 简称PoW)的机制来解决这一问题.PoW基于如下技术和假设:根据bk, t和hk-1计算使hk满足验证要求的nonce需要耗费算力, 每次计算nonce所需的算力在一定时间段内相当.这一计算过程被称为“挖矿”.因此, 如果需要篡改或伪造记录, 则需要构造一条比当前被公认的区块链(主链)更长的链, 因此需要的算力需要超过整个区块链中的其他(正在进行正常挖矿运算的)算力.或者, 更准确地说, 在考虑网络延迟时, 攻击者的算力接近50%就会破坏比特币区块链的正确性[24].而当考虑“自私挖矿(selfish mining)”——也就是当自身“挖矿”所获得的链比别人的链长时, 不发布自己的链, 在自己的链上继续挖; 当自身的链和别人已发布的链相比等长或者更短时, 立即发布自己的链, 并在别人已发布的链上继续“挖矿”, 那么, 攻击者接近1/4算力即会危及比特币的正确性[25].
PoW共识机制的另一个问题是其性能问题.如Vukolic[26]和Tseng[13]对PoW和传统的拜占庭容错问题进行了详细的对比分析所述, 由于比特币区块链为“公有链”, 即其参与读取、交易以及共识机制的用户是开放的, 其用户规模是动态的, 参与者是匿名的.这直接导致了PoW机制的低吐率和高延迟.但从另一个角度看, PoW机制实现了系统的高可扩展性, 支持从数千到数十万个参与者, 这一网络规模远远大于绝大多数金融机构信息系统的规模.
2.2 实用拜占庭容错机制
并非所有区块链应用的需求和对环境的假设都与比特币相同.例如, 在私有链(private blockchain或permissioned blockchain)或联盟链(consortium blockchain)中, 节点(参与者)就不再是匿名的, 节点规模远小于公有链, 且可信程度也远比在公有链中要高.实用拜占庭容错机制(practical Byzantine fault tolerance, 简称PBFT)可被用于该场景[27, 28].与PoW不同, 采用PBFT时, 区块仅有被选举出的唯一主控节点生成.PBFT由请求、预准备、准备、提交这4个阶段构成.预准备由主控节点发起, 准备阶段各节点分别验证主控节点发起的共识请求的正确性, 并将验证结果返回给主控节点, 并由主控节点汇总后在提交阶段确定是否提交.与PoW相比, PBFT适用于节点数少于20个的场景, 可拜占庭容错少于1/3的节点的攻击, 即有少于1/3的节点存在漏发、错发或选择性错发消息情况, 主要开销在于网络消息传输带宽, 吞吐率可达数千, 并将延迟降到毫秒级.此外, PBFT可确保系统的最终一致性.由于具有这些特性, PBFT被应用于HyperLedger Fabric.
2.3 Paxos和BVP
PoW和PBFT考虑的都是拜占庭容错问题.在私有链的场景下, 若假设节点或参与者不进行攻击, 则可进一步放宽假设.Paxos是重要的非拜占庭场景下的共识机制[29, 30], 可被用于私有链场景.与PBFT相比, Paxos的吞吐率可进一步提升到超过4万tps[31].
Paxos的改进版本也能处理拜占庭容错场景, 被称为拜占庭Paxos[32].Abraham和Malkhi提出了BVP[33], 用以利用TPM(trusted platform module)加密处理器[34]提供高性能的拜占庭容错.
2.4 其他面向区块链的共识机制
PoW、PBFT和Paxos分别是3个典型的可用于区块链的共识机制.除此以外, 不同的区块链项目也采用它们的改进版本或其他机制.PPCoin采用权益证明(proof of stake, 简称PoS), 面向公有链, 避免了PoW导致的算力消耗和能源消耗[35].PoS通过奖励机制鼓励参与节点成为验证者节点, 区块的产生由随机选取的验证者节点或验证者节点集合验证获批.PoS避免了PoW导致的大量算力和电力消耗.Ripple为另一个公有链平台, 采用其自身的RPCA机制实现共识[36].RPCA首先将共识问题归结到系统中的一组“受信任”节点, 然后采用类似于PBFT的投票选取主控节点方式, 实现共识.
此外, 还有Proof-of-Luck[37]、Raft[38]等共识机制被应用于区块链系统或应用.
3 处理可信性
比特币区块链仅支持“挖矿”和转账, 功能上仅适用于数字货币, 具有很大的局限性.在传统的数据库管理系统中, 用户通过提交事务来处理数据.事务常由过程型语言与SQL语句组合共同构成, 事务执行的过程或结果通过日志进行记录.以太坊首先采用智能合约实现区块链中的数据处理[6], 而区块链的逻辑结构本身就和日志具有相似之处.
3.1 智能合约
智能合约是指通过信息技术手段实现的可自动执行的任务合约[39], 其概念出现远早于区块链技术.智能合约包含执行条件和执行逻辑.当条件满足时, 执行逻辑会被自动执行.从数据管理角度看, 智能合约与数据管理系统中的触发器和存储过程[40]具有相似性.另一方面, 与传统数据库管理系统中的事务不同, 不仅智能合约所做的处理结果需要在区块链中保存, 智能合约本身也需要被保存在区块链中, 并在系统的各个节点间同步, 以确保不同节点和用户所看到的智能合约的一致性.
比特币区块链仅提供非常简单的脚本语言, 用以实现智能合约; Ripple不提供智能合约; 以太坊提供图灵完备的智能合约脚本语言; 而HyperLedger Fabric则提供Go和Java撰写智能合约的功能.
智能合约扩展了区块链处理数据的能力, 但同时也对其使用者以及系统的安全性提出了更高的要求.以太坊智能合约曾发生TheDAO攻击[41].Maurice Herlihy对区块链中由并发控制等因素导致的智能合约问题进行了系统的梳理[42].
3.2 数据溯源
类似于数据库日志, 区块链维护了区块链上所有操作和处理的记录.但区块链所提供的数据查询及分析处理功能较为简单.作为一种可信数据管理系统, 对区块链上的数据进行溯源, 是一个重要的问题.虽然理论上, 在像比特币这样的区块链平台上, 每一笔交易都能够回溯到“挖矿”所获得的原始比特币, 但是如何在引入更为复杂的智能合约以后, 在区块链平台所管理的数据随着应用增多、规模扩大以后越来越多时, 高效处理数据溯源查询, 是区块链技术发展及在更多应用中推广使用所面临的研究题目.
数据溯源(data provenance)是指对于数据处理流程的管理, 解决回答数据为什么是该状态(why)、数据从哪儿来(where)以及如何获得(how)的问题[15, 43-45].数据溯源的研究在科学数据管理、数据仓库、数据资产管理(data curation)的背景下进行.
数据溯源方法可分成两大类, 即基于批注(annotation-based)的方法[46-49]和非批注(non-annotation-based)的方法[50, 51].对于非批注的方法, 在处理数据的过程中, 不需要对源数据和目标数据(处理的结果)附加额外的信息.但是, 此时需要了解存储、维护数据进行了何种处理.当处理是可逆的时候, 通过目标数据, 就能反推得到源数据.需要注意的是, 虽然如SPJ(select-project-join)这样的查询, 数据处理是可逆的, 但是很多数据库常用查询是不可逆的.例如, 很多聚集函数是不可逆的.非标注的数据溯源可用于数据变换、数据集成过程的调试[52].当源数据与目标数据之间的数据模式改变时, 这类方法尤为有用.
基于批注的方法将每个数据项变换为〈s, d, i〉三元组标签, 其中, s表示数据项源, d表示目标数据(当前数据), 而i则表示中间数据结果.通过在数据处理过程中进行标签传播, 实现数据的勾连, 以支持数据溯源.基于批注的数据溯源系统包括DBNotes[53]和Mondrian[54].
数据溯源的查询表达具有严格的代数学基础[55, 56], 可在关系数据库上实现[57].CuratedDB[58]和Trio[59, 60]是两个重要的数据溯源原型系统.
数据溯源的理论和技术与数据的结构化模式之间关联紧密.虽然在当前的区块链应用中, 数据未必一定是结构化的, 但是, 随着应用的发展, 区块链数据管理中数据模式的管理将成为一个重要的问题, 也将是现有数据溯源方法能否被成功应用的关键问题.
3.3 可认证数据查询与处理
在查询区块链中的数据时, 确保每个区块中数据的正确性是确保最终结果可信的前提, 该问题类似于外包数据库中的可认证查询处理[61, 62].与可认证查询处理类似, 区块链也常用基于Merkle-tree的结构来维护一个区块内的事务之间的关系.
随着区块链上查询需求的增长, 在链式日志结构上的索引技术也正在成为重要的研究问题[63].
除了查询处理, 近年来在如云计算平台这样的硬件和操作系统不可信的非可信计算平台上, 提供可信的数据处理, 也成为了研究热点.例如, Haven系统原型通过在飞地(enclave)中利用Intel SGX芯片和Linux LibOS实现屏蔽模块(shield module), 提供包括线程、虚存、调度与文件系统的抽象, 提供了无需进行修改的应用程序与Windows操作系统间的相互调用[64].
VC3是由微软研究院研发的另一个原型系统, 用以在Hadoop平台上运行MapReduce程序, 确保数据与处理是可信的[65].与Haven不同, VC3并不在SGX中加载操作系统库, 而只在其中加载Map/Reduce程序与处理的数据.程序与数据仅在处理器上运行时是解密的.
Haven和VC3都可以运行未经修改的代码, 并处理数据.针对机器学习问题, 如决策树、SVM、神经元网络、矩阵分解、K-means聚类等算法, Ohrimenko等人提出了运行于SGX的保护隐私的机器学习方法, 他们通过使用实现了oblivious原语的libO库, 重写机器学习算法, 达到了可验证的安全机器学习的目的[66].
类似地, Sinha等人提出, 通过将代码分为包含程序逻辑的用户程序和包含内存管理和加密通信原语的运行时库两部分, 当运行时库满足信息发布约束(information release confinement, 简称IRC)时, 系统的数据处理的安全性是可验证的[67].
4 区块链数据管理系统与应用
除比特币、以太坊和HyperLedger以外, 近年来还出现了一大批区块链相关的系统.
BigChainDB试图同时实现传统数据库管理系统的高性能和区块链系统的可伸缩性[68].它采用两层架构.底层依赖于MongoDB, 实现事务和故障恢复, 高层利用基于权威的区块链协议应对攻击情况下的容错.由于没有采用拜占庭容错机制, BigChainDB具有较高的性能.BigChianDB的目标应用为数字资产管理.
Bitcoin-NG的设计目标为“下一代”比特币, 以具备更好的可伸缩性[69].与其他同类系统相似, 它也采用两层协议, 一层选主.选举得到的主控节点负责事务的串行化执行.由于避免了事务执行中的PoW, Bitcoin-NG可实现其更好的可伸缩性的目标.
Blockstack为普林斯顿大学研发的基于区块链的命名和存储服务[70].Blockstack将用于控制的元数据管理与数据存储分开管理, 并用skip-list管理区块, 以避免大规模地扫描区块链.实验结果表明, 它能极大地减少计算资源的消耗.
在应用方面, CrowdBC为基于以太坊的去中心化的众包平台[71].众包中的任务分发、回收等操作都采用智能合约实现.通过采用区块链技术, 与集中式众包平台相比, CrowdBC可以更好地保护用户的隐私.ProvChain则通过采用区块链技术, 在云计算服务中提供数据溯源和数据验证服务[72].
与以上系统和应用不同, Weaver是一个图数据库, 提供了对于区块链结构的高效查询[73].
Quorum(https://www.jpmorgan.com/global/Quorum)是Morgan基于以太坊开发的面向企业的区块链平台, 与以太坊相比, Quorum实现了拜占庭容错的共识算法, 其事务吞吐率可达到近千事务/秒.而Corda(https://www.corda.net)则是R3公司主导研发的开源分布式账本平台.Corda面向金融应用, 与其他区块链平台不同, 它并不在所有节点上维护所有数据的副本, 并且, 在分布式共识机制的基础上提供了便利的业务逻辑编写机制.
5 小结与展望
通过分析可见, PoW共识机制、智能合约等区块链技术是面向金融应用, 特别是数字加密货币而设计的.它们在确保对等网络中数据和处理的可信性方面, 具有很好的特性, 可伸缩性尤其突出.但同时, 现有的区块链技术在如下3个方面仍然存在着缺陷.首先, 现有区块链系统和平台的服务接口通常是过程性的, 需要用户撰写复杂的智能合约, 与数据库系统声明性的数据操纵相比, 容易导致错误和漏洞产生.第二, 现有区块链系统大都不支持复杂模式数据管理, 不能提供通用的数据建模和模式管理功能, 导致系统及平台与应用耦合度高、应用开发难度大.第三, 由于部分区块链平台, 特别是公有链系统, 为了保障系统可伸缩性, 采用了PoW共识机制, 在性能上, 特别是延迟和吞吐率方面, 无法与传统的可信数据管理系统相比, 无法满足大多数关键任务应用的需要.
当考虑更复杂场景下的可信数据管理问题时, 现有的区块链技术和系统无法被直接应用.另一方面, 信息技术发展是国家政策和新兴商业模式落实应用的前提:可信数据管理对于构建社会信用体系, 从机制上提供信用保障, 至关重要.
例如, 在共享经济、大宗商品交易、数字资产增值利用开发、安全监督、政府治理等应用中, 业务可能涉及双方或多方, 业务间关联模式各不相同, 数据的结构化程度不同, 事务的复杂程度和并发数不同, 数据处理的及时性响应要求也不相同, 借鉴区块链在数字加密货币应用中的成功经验, 特别是其在系统可伸缩性、完全去中心化、灵活的智能合约撰写、验证以及可信执行上的特点, 在对现有区块链和相关技术进行梳理和分析的基础上, 探索大规模分布式环境下的可信数据管理基础理论, 设计针对特定应用的可信数据管理系统, 或称其为“分享型数据库(sharing database)”系统, 提出安全、高效的可信数据管理系统实现方法, 是研究的重要问题.
当前所直接面临的研究问题包括:在特定场景下的高性能分布式共识机制、区块链上的结构化数据管理方法、区块链上的分布式数据索引构造和维护方法、链式结构或日志结构上的高效查询处理和优化技术等.