- Hyperledger Fabric技术内幕:架构设计与实现原理
- 李鑫
- 14269字
- 2024-11-01 23:50:55
1.1 区块链背景、概念与现状
本节将介绍区块链产生的背景及研究热潮、区块链的概念与核心技术,并分析目前国际上影响力较大的主流区块链开源平台。
1.1.1 区块链产生的背景及研究热潮
近年来,比特币(Bitcoin)无疑是最热门的投资品词汇,其价格最高时突破了两万美元,成为投资者眼中的新宠和竞相追逐的“真金白银”。比特币一词最初来源于2008年中本聪(Satoshi Nakamoto)在metzdowd.com网站发表的《Bitcoin: A Peer-to-Peer Electronic Cash System》[1](《比特币:一个点对点的电子现金系统》),这是比特币与区块链理论形成中重要的奠基性论文,并真正开启了虚拟数字货币与区块链应用的人类社会新时代。
中本聪在这篇论文中解决了之前发行虚拟数字货币存在的货币伪造、双重支付(或称“双花”, Double Spent)、匿名化交易、中心化货币发行等挑战,可以不依赖第三方信用机构进行背书,无须基于中心化货币发行体系,在全球范围内实现了点对点交易的可靠记账。比特币持续9年多不间断的正常运行表明,这种分布式架构在适当的激励机制与共识算法的作用下拥有支撑全球范围交易的潜力,为当前金融领域造价不菲的中心化架构提供了新的解决思路。因此,在比特币的“挖矿”产业生态中,每个人都可以参与记账,充分利用非对称加密、哈希算法等现代密码学技术确保比特币交易不可伪造、不可篡改且可溯源的特性,并通过记账奖励的方式激发每个节点参与记账的积极性,这就使得黑客的攻击成本非常高昂,还不如“挖矿”参与社区贡献。正是这种结合正反馈奖励机制与博弈心理学的巧妙设计,使得比特币交易系统迅速发展为一个国际共享的分布式账本系统,比特币也一跃成为当下最热门的投资品种之一。但是,比特币没有类似于传统货币相应对等的背书信用标的物作担保,缺乏全社会认同的货币价值基础。因此,比特币相继被各国进行监管并禁止流通兑现或接受为可交换的“货币”。时至2018年,比特币已经运行了9年多的时间,支持过单笔上亿美元的交易,截至2018年11月,比特币交易系统已经累计生成超过55万个区块(https://www.blockchain.com/en/explorer)。虽然遭到无数次黑客攻击,但从未停止运行,总市值一度超过了上千亿美元,毫无疑问,比特币已成为人类历史上最有影响力的虚拟数字资产之一。
以太坊去中心化自治组织(Decentralized Autonomous Organization, DAO)项目的想法极具天才般的创造性,它旨在构造一个完全去中心化的自治服务平台,并基于超过一定比例的虚拟实体或股东(如67%)来决定投资或修改运行机制,完全透明且无须人类集中式管理。2016年5月,DAO项目通过分布式众筹在28天内筹集了超过1.52亿美元,一举成为当时人类历史上的最大单笔金额众筹项目,同日在各大数字货币交易所开始交易。然而,半个多月后,黑客利用智能合约中递归调用等漏洞盗走了近三分之一众筹所得的以太币,震惊了整个DAO社区,公众也由此对去中心化自治系统的安全性与可行性产生了质疑。项目开发者通过研究发现该漏洞不是出现在DAO架构本身,而是智能合约出现了问题。这迫使开发者对DAO项目强行“硬分叉”,即在挖出第192000个区块后的分支上消除被盗走的货币,并决定最终在提取分发完后自动解散DAO项目。该事件引起了极大的社会争论与媒体关注,但是,以太坊DAO项目无疑是人类社会在去中心化自治系统上具有深远影响力的一次伟大的创新尝试。
近年来,这些创新项目与事件已经开始深刻影响和改变着人类社会,各种琳琅满目的数字虚拟货币以及“去中心化”的分布式应用纷纷出现,虚拟货币交易所在全球遍地开花,追逐企业“币改”与“链改”的大潮席卷而来,而“区块链”就是比特币、以太坊DAO等项目采用的底层核心技术,人们发现它不仅可以作为比特币这种“虚拟货币”诸多优良特性的技术基础,而且还可以用来构筑开放信用体系与资产确权的基石,被认为可能开启人类社会基于互联网与虚拟平台传递价值的时代。
区块链技术通过去中心化方式建立起点对点的信任关系,可能会影响甚至改变决定人类社会组织形式与现象的基本作用力,包括生产力水平、生产资料和生产成果的分配总量与速率、权力的中心化程度等 [2],尤其是弱化了权力集中与运作方式,直接改变了生产资料和生产成果的分配方式,进一步提高了生产力水平。因此,人们普遍认为区块链技术具备改变当前很多领域的潜力,可以与电力、互联网等技术革命相提并论,甚至被《华尔街日报》誉为五百年来最具影响力的金融创新之一。与此同时,区块链已经成为社会与科研人员关注的热点,在金融服务、供应链管理、文化娱乐、智能制造、社会公益、教育就业、医疗健康等垂直领域都引起了人们的广泛关注和强烈兴趣。
目前,区块链被普遍认为是一种具有“颠覆性”的新兴技术,它可能会带来公共与私营服务实现方式上的创新,其最大的“颠覆性”就是重构弱信任主体之间的信用体系,从而避免传统信用体系依靠第三方中介证明的方式。这种信用体系是建立在程序化的区块链共识算法与安全加密算法的基础上,而不是基于单个人或单个系统。同时,数据记录的生成与记录保存需要全网络参识节点按照共识算法进行确认并且不易篡改,如比特币获得51%以上的全网计算能力,就可能拥有记账权并修改账本。
因此,区块链摆脱了传统信任体系中需要第三方信息验证的信用确认模式,能够有效降低信用体系构建成本,提高跨组织体系要素的协同效率,同时提高链上资产的真实性、可信性与安全性,天然适合于松耦合的去中心化应用场景,在协调大规模跨组织活动中能显著降低集中式系统带来的复杂性、安全风险、信息不透明度等问题。人们甚至认为,区块链可以帮助建立去中心化的全球信用体系,让互联网价值传递可以像互联网信息传递一样具有低成本与高效率的特点。这样,人们就能够基于区块链技术,通过去中心化的方式重构新型的经济生态体系,促进个体行为与社区生态之间的高效协调和可持续发展,引入合法的激励机制与监管手段,鼓励个体创造社区价值与协作交换,更加强调点到点的直接个性化服务,连接与盘活互联网的巨量边缘资源,大幅降低社会经济活动成本,从而培育可持续发展的垂直领域社区价值生态,以激发潜在的用户场景需求(如存储、泛娱乐、即时通信、物联网支付等)。同时,区块链也可以为弱信任主体间提供可信平台支持共享敏感数据,以提升行业上下游甚至跨行业大规模协作的效率,减少企业联盟间繁冗业务流程的生产成本,提高信息监管透明度,避免高度中心化系统中单点故障带来的系统失效,降低黑客攻击风险。因此,区块链具有改变未来社会生产与生活形态的潜力,赋能产业经济推动共享经济的普及与发展,催生新的区块链产业与促进相关产业升级,创造社会经济价值。
事实上,研究区块链相关技术与应用场景结合,为生产经济、国防安全、科学研究、社会稳定等领域构建高效、稳定、安全的区块链基础设施,提供高效动态的部署跨域区块链网络的能力,从而抢占战略制高点与商业市场,已经成为目前人们竞相研究区块链相关科学与工程问题的基本动机。区块链的应用场景所引起的有别于传统数据库的核心问题,如互联网大规模数据存储与同步技术、高效共识算法、高强度密码安全技术、高性能跨链技术、新型匿名隐私安全技术等正面临着一场深刻的技术变革,可能会孕育爆发出“区块链+”时代的到来。
但是,人们也应该看到,区块链技术只能确保链上数据的真实性与可信性,可防止不被轻易攻击且不易被随意篡改,却无法解决链下虚假数据或真实数据“转移”到链上数据过程中的真实性问题。同时,以比特币为代表的“虚拟货币”或Token(通证)数字资产也带来了风险定价与管理、价值锚定与信任体系缺失、区块链经济系统顶层设计等新挑战仍然是在各国法律框架和行业监管需求内挑战人类智慧与技术极限的重大难题。
如图1-1所示,2008年以来的区块链典型事件表明,区块链作为一种可能会重塑社会运作方式的“颠覆性”创新技术,已得到越来越多的关注与研究,且已经发展成为具有较大影响力的生态体系。
图1-1 区块链典型事件
国际著名区块链专家Melanie Swan在其重要著作《Blueprint for A New Economy》[3](《区块链:新经济蓝图及导读》)中较全面地阐述了全球区块链产业理念与实践,并根据区块链带来的革新与应用范围将区块链技术分为区块链1.0、区块链2.0和区块链3.0。
(1)区块链1.0:以比特币为代表的可编程“虚拟货币”
中本聪设计比特币是为了构建一个可信去中心的电子货币交易系统。尽管比特币的发展出现了价格的剧烈波动、数量上限带来的通货紧缩、挖矿造成的巨大能源消耗、各国政府监管限制或者态度不明等问题,但是,以比特币为代表的可编程货币使得价值在互联网中流通交易成为可能,比特币仍然是区块链最成功的实际应用案例。可编程货币意味着比特币类的“虚拟货币”可以按照设计方或者合作方的约定,在达到一定条件时触发指定的专用交易动作(如转账),这对于严格的资金管理控制非常重要。同时,作为一种全球发行的创新数字支付系统,比特币的去中心化特性与安全加密机制降低了交易成本,对传统金融产生了挑战,并且试图成为不依赖于主权国家央行而发行的全球统一货币,为国际金融交易提供“货币”支持。
(2)区块链2.0:基于区块链的可编程金融
人们通过研究发现,数字货币底层的区块链技术同样可以应用到金融的其他领域,并将比特币中的脚本合约系统重新抽象成 “智能合约”,同时利用区块链基于去中心化账本具有不可伪造、不可篡改与可溯源的特性,能够用于注册、确认与转移各种不同类型的资产及合约。因此,人们结合具体的金融应用塑造出可编程金融的概念并积极探索实践,包括股权登记转让、证券、私募股权、跨境支付、金融衍生品合约等。例如,新加坡资讯通讯发展局(Infocomm Development Authority of Singapore)联合新加坡星展银行和渣打银行共同进行发票金融区块链应用的概念证明,试图使得对企业和放贷银行的发票金融贸易更加安全和简单。2016年,日本软银(Softbank)联合Topcoder举办了一次区块链开发竞赛,希望可以找到一个基于区块链技术的互联网筹款平台原型。
(3)区块链3.0:将区块链扩展到其他领域应用
人们进一步将区块链扩展到金融以外的其他领域。在法律、零售业、物联网、公共医疗、公益事业等领域,依靠区块链提供的信任平台实现信息共享与身份自证明,而不用完全依赖于权威的第三方认证机构,从而降低信用认证成本,提高行业运行效率。
当前,区块链行业的发展如火如荼,相关公司如雨后春笋般迅速成长起来,整个区块链产业已经发展成包括跨境支付、供应链金融、贸易金融、征信、交易清算、商品溯源、区块链硬件等跨越多个细分市场的完整生态系统 [26],既包括传统的资深计算机厂商,也包括迅速崛起的新兴区块链公司,呈现出共同发展、共同成长、共同促进的行业发展态势。然而,目前区块链技术的发展还至少存在以下三个问题。
一是技术架构上还存在效率不高、安全性挑战、资源消耗高等问题,尤其是低效率的数据吞吐量与共识机制。以公有链为例,目前,比特币在公网上大约每分钟交易笔数峰值不超过7,而2017年双十一支付宝峰值每秒最高超过25.6万笔交易,数据库处理峰值为4200万次/秒。与此同时,比特币交易验证时间长,目前大约是10分钟确认一次交易,6次确认大约需要1个小时,而支付宝、Visa等仅仅需要几秒钟。2016年2月,周小川就指出区块链技术是数字货币的一项可选技术,但目前存在占用计算存储资源过多的问题,无法应对现在的交易规模,这对于高频应用场景可能是无法忍受的瓶颈,只有对时间不敏感的餐馆等消费场所可能会成为线下使用场景。
二是行业监管问题。国内存在严格的金融监管要求和互联网金融实名认证规定,在金融领域需要明确风险责任人,必须要有专门的部门来维护金融市场基础设施。这些要求本身就与某些区块链应用具有的身份匿名等特性存在冲突,如比特币由于其匿名特性已经成为犯罪资金进行洗钱与非法网站进行支付的主要载体,2017年5月爆发的WannaCry“勒索”病毒要求支付比特币,使得犯罪分子身份无法直接通过传统手段进行快速查询定位。因此,如何结合具体应用在两者之间进行权衡是应用开发者需要研究的重要课题。
三是商业应用场景上除了比特币等“虚拟货币”产业生态,还尚未出现“杀手级”应用。就如同微信在移动互联网时代的即时通信领域、支付宝在互联网电商的线上支付领域一样。目前,大多数区块链应用还停留在概念验证与初步探索应用阶段,缺乏类似真实需求的大规模商业应用场景或垂直领域产品,以有效推动区块链生态爆发式的迅速发展。如图1-2所示,2017年,Gartner公司认为区块链技术(Blockchain)在国际上已经开始进入幻灭期的初期,但在中国还处于期望膨胀期,两者都被标记为未来5年到10年才可能落地成熟的技术。2018年10月,Gartner在其发布的2019年十大战略科技发展(具有巨大颠覆性潜力)中仍然将区块链列入其中,并认为到2030年,区块链将创造3.1万亿美元的商业价值。但可以肯定的是,各国将在未来对区块链研究投入更多的关注与资源,以期望提升国家整体的科技创新能力,世界各国在该领域的竞争已经开始并必将更加激烈。
图1-2 2017年版Gartner新兴技术成熟度曲线国际版(左)与中国版(右)
1.1.2 区块链概念与核心技术
本节介绍区块链的概念定义与核心技术,包括共识机制、安全机制、存储机制、P2P通信机制以及智能合约等。
1.区块链概念定义
区块链是一种在对等网络环境下,通过透明和可信规则,(按照时间戳顺序)构建不可伪造、不可篡改和可追溯的块链式数据结构,实现和管理事务(或称交易)处理的模式 [5]。实际上,它是一种分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式 [4]。作为一种创新的应用模式,区块链具有分布式对等、数据块链式、不可伪造和防篡改、透明可信、高可靠性等关键特征 [5]。用户可以对链上数据执行交叉验证以防止欺诈,虽然可以对本地数据进行删除和修改(恶意节点行为),但是不会影响全网共识后的数据一致性 [30](只能防止一定比例的恶意节点)。同时,还出现了非链式的DAG、Hashgraph等区块链系统。
根据不同的应用场景与设计体系,区块链可以采用对应的开放共享与节点权限方案,包括如下三种区块链部署模型 [5]。
□ 公有链:任意区块链服务客户都可以使用,任意节点均可接入,由所有节点共同参与共识和读写数据,具有较强的去中心化特征,如比特币和以太坊;
□ 联盟链:只有利益相关的特定区块链服务客户才能使用,节点只有经过授权许可后方可接入网络,接入节点按照规则参与共识和读写数据,具有较弱的去中心化的特征,如Hyperledger Fabric;
□ 私有链:仅由单个区块链服务客户使用,仅有授权的节点才能接入,并按照规则参与共识和读写数据。
区块链上记录的区块对象是打包了一段时间内发生的交易与状态的集合。交易是指每次改变状态变化的操作,并拥有唯一的交易标识(如哈希值)。同时,区块头部保存了上一个区块的哈希值、当前区块的哈希值等信息,通常以一种链式结构保存所有的区块结构。事实上,区块链是通过现代密码学与分布式共识机制等技术来确保交易可信,而不是通过大型中心化信用机构解决信任背书问题。
目前,区块链系统包括共识机制、安全机制、存储机制、P2P通信机制、智能合约等核心技术。
2.共识机制
共识机制是一个经典的分布式计算领域问题。在区块链系统中,共识机制是指实现不同信任主体节点之间建立信任、获取权益的数学算法 [4],提供给分布式网络参识节点以用于确认交易动作引起的账本中的状态数据变化,并且能够达成最终一致性。即使出现节点故障或不可信节点等情况,区块链系统上已经发生的交易也能够按照正确的预期方式执行,而不会出现全网节点数据与账本状态不一致的情况。目前,常见的共识机制包括PoW、PoS、DPoS、PBFT等,它们在合规监管、性能效率、资源消耗以及容错性等方面都有各自不同的特点。鉴于共识机制对区块链系统性能的影响至关重要,很多研究都对此进行了深入探讨,并针对区块链应用特点不断进行改进与完善。
(1)PoW(工作量证明)
PoW(Proof of Work,工作量证明)是比特币交易系统最早引入的共识机制,在比特币中称之为“挖矿”,即通过自身算力不断计算寻找满足规则和小于难度目标(前若干位全部为0的数值)的哈希值。这个想法来源于Adam Back设计的用于阻挡垃圾邮件的Hashcash算法 [7]。该哈希值是将区块头中80个字节作为工作量证明输入,尝试变换区块头中的随机数Nonce,并连续做两次SHA-256哈希运算得到的。因此,“挖矿”的过程就是寻找碰撞随机数Nonce的过程。通常,“挖矿”找到这个随机数的时间取决于难度目标门槛,这样就可以通过控制难度目标来控制生成新区块的时间,比特币交易系统就是通过上述这种方式控制区块生成速度稳定在10分钟左右,约定由最快计算找到随机数Nonce的节点竞争获得本次交易区块的记账权,并获得一定数量的比特币奖励。接着,该节点将打包后的区块结构对象发送给全网其他节点进行验证存储,再添加到区块链上。整个网络中最长的链就是正确的链,即被认为是最长的有效工作量证明链。上述整个过程完全依赖于节点进行数学运算来测试随机生成的哈希值是否符合规则。理论上,如果需要找到小于难度目标前导17位16进制数值都是0的两次SHA-256哈希运算结果,最坏的情况下大约需要尝试268次(约2.95万亿亿次)才能找到一个合格的随机数,其概率非常低(国内双色球头等奖中奖概率约为1772万分之一)。因此,竞争记账权带来的资源消耗相比其他共识机制更高,根据Digiconomist网站估计,每年比特币消耗的电能高达32.4太瓦时,超过了摩洛哥全国的耗电量。PoW可监管性弱且需要全网参与共识运算,性能效率不高,只允许全网50%的节点出现故障问题。
(2)PoS(权益证明)
PoS(Proof of Stake,权益证明)机制要求网络节点必须提供一定数量的代币证明,与上市公司股票类似,节点证明持有越多的代币,获得记账权的概率就越高。PoS机制被应用在Peercoin、NXT、Blackcoin、以太坊第四个阶段Serenity等处,都会在单纯的权益证明机制上结合不同的方式来增加记账权的随机性以避免中心化,如Peercoin采用获得记账创造区块后起算的币龄(即时间)选择记账权节点,等同于PoW机制中的算力,Blackcoin则采用随机方式预测选择记账节点。同时,PoS机制是根据节点拥有代币的比例与时间来等比例降低挖矿难度,以提高寻找随机数的效率。实际上,PoS机制挖矿产生区块的难度与所有者持有的权益成反比,却依然是通过哈希运算竞争来获取记账权。但是,可以有效增加51%攻击难度(攻击者需要持有超过51%的货币量),且交易的权益证明只能被记在该区块所构成的区块链上,攻击者无法隐藏自己的秘密区块链以影响公链交易上代币被销毁的天数。因此,PoS机制在一定程度上减少了纯粹依靠哈希数学运算来争夺记账权所引起的大量资源消耗,缩短了全网达成共识的时间,性能与安全性有所提升,可监管性弱,依然只能允许全网50%的节点出现故障问题。
(3)DPoS(股份授权证明)
DPoS(Delegated Proof of Stake,股份授权证明)机制是为了防止大矿池垄断全网算力,由Bitshares设计提出的(https://bitshares.org/technology/delegating-proof-of-stake-consensus/)。类似于PoS机制,其区别在于持币节点选举若干数量的代理节点进行验证和记账,类似于董事会投票制度。该机制的优点是可以有效减少参与共识验证的节点数量,缩短共识验证时间,提升区块生成速度,在可监管性与容错性等方面的表现与PoS机制相似,EOS就采用了DPoS共识机制。
(4)PBFT(实用拜占庭容错)
PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错)算法可以容忍经典拜占庭故障模型,即假设节点具有不确定性故障行为的特点,适用于一般情况下的网络环境,含有软件错误、设备停机、通信故障等常见及不易察觉的错误,甚至包括具有恶意行为的节点,这使得PBFT具有很强的算法适应性。Leslie Lamport等人最初提出的BFT算法只能单纯解决分布式环境下的故障问题 [8],没有考虑实用的算法运行性能,需要指数级算法时间复杂度,后来人们通过研究提出了多项式级别算法才降低其开销,使得实用的BFT算法得以广泛应用 [9]。
如图1-3所示,PBFT算法中通常需要包括request、pre-request、prepare、commit和reply五个阶段才能完成,其中,prepare与commit阶段需要两两交互以确保所有节点达成共识一致。通常,PBFT系统至少需要部署到3f+1个节点上,最多可以容忍f个恶意节点出现拜占庭故障,整个系统状态是由其中2f+1个节点决定的。与非拜占庭系统相比,其主要问题是共识算法确定状态的时间较长、占用节点资源较多、长时间应用可能存在错误积累导致系统崩溃等。目前,人们研究通过减少一致性协议包含的阶段数量或者简化条件(如网络稳定等)来解决其性能瓶颈,并通过定期检错来减少可能发生错误的节点,同时,也开始尝试通过可信计算部件来降低所需节点的数量。PBFT共识机制允许监管节点参与,相对其他共识算法,其性能相对更高且耗能较低,可以允许近33%的错误节点。目前,其变种算法已经在Hyperledger Fabric、腾讯TrustSQL、BCOS平台等联盟链系统中研究或应用。
图1-3 PBFT算法运行示意图 [9]
目前,很多商业平台都在积极研发自适应共识机制的方式来提高全网参识节点进行共识的效率。如果在状态良好、无恶意节点等可信网络环境中,系统平台可以采用Raft等较成熟的分布式一致性解决方案,高效完成交易并达成共识,占用较少资源并且性能较高。同时,一旦检测到网络环境中出现恶意节点等不可信的交易行为,系统平台就将自动切换到类PBFT共识算法,提高对拜占庭节点错误的容错能力。
3.安全机制
区块链中采用了现代密码学中的哈希算法、对称加密算法、非对称加密算法等来保证数据机密性、完整性、抗抵赖性等安全特性。
(1)哈希算法
哈希算法可以将任意长度的消息明文转换映射为固定长度的二进制串输出,称为哈希值或散列值,又称为该消息的指纹(fingerprint)或摘要(digest)。即使两个消息只差一个字符,在经过哈希函数计算之后,它们所产生的字符串也会十分杂乱随机且完全不存在任何关联性,被广泛应用于检测签名有效性与完整性的场景中。目前,常见的哈希算法包括MD4(RFC1320,输出128位哈希值)、MD5(RFC1321)、SHA-1(输出长度为160位哈希值)、SHA-2(包括SHA-224、SHA-256、SHA-384、SHA-512等算法)、SM3(国密安全算法)等。其中,MD4已经被证明不够安全,MD5与SHA-1不具备强抗碰撞性,具有安全隐患,因此都不推荐使用。安全术语“碰撞”是指两个不同的消息使用同一个哈希函数计算时获得相同哈希值的情况,哈希算法具有抗碰撞性意味着找到两个能够产生碰撞的消息在计算上是非常困难的(注意不是不可能的)。哈希算法应当具有抗碰撞性、原像不可逆性、难题友好性等特点。目前,区块链通常采用SHA-256、Keccak-256CSHA3或更高安全级别的主流算法,常用于构造货币地址、哈希指针、消息摘要等对象。
(2)对称加密算法
对称加密算法中加密与解密的密钥是相同的,速度快且占用空间小,加密强度高,但缺点是密钥一旦泄露就无法继续保持当前系统的安全性,且必须解决如何安全地提前分发密钥问题。目前,典型的对称加密算法包括DES(Data Encryption Standard,经典的分组加密算法,64位密钥,可以被暴力破解)、3DES、ADE(Advanced Encryption Standard,对称加密实现标准,处理速度快)、IDEA(类似于3DES,密钥长度达到128位)以及序列密码(每次变换密钥加密处理数据,如RC4)等。对称加密算法适用于较大数据量的加解密过程,不适合签名与验签的应用场景。
(3)非对称加密算法
非对称加密算法为用户提供一组对应的公开密钥和私有密钥。任何人都可以使用公钥对数据进行加密,只有用户能使用自己的私钥解密,任何未授权的用户包括发送者都无法解密该信息。同时,用户可以使用私钥对信息进行签名,任何人都可以用该用户公开的公钥检验该信息签名的身份,即验证该信息是否由指定用户签名,其身份具有不可否认性,从而使得签名具有不可伪造性。由于加密和解密时使用的密钥是不同的,因此,这类公钥密码算法也称为非对称密码算法。现代公钥密码体系的安全性通常是基于难解的可计算问题,通过私钥计算出公钥非常容易,但是,通过公钥计算出私钥则非常困难,包括RSA(基于大数质因子分解困难特性)、Diffie-Hellman密钥交换、ECC(椭圆曲线算法,密钥短性能高,区块链采用的常见主流算法如ECDSA)、SM2(国密安全算法,同样基于椭圆曲线算法)等,比特币使用的是Certicom密码技术公司提供的椭圆曲线算法secp256k1。非对称加密算法适用于签名与验签场景,同时解决了密钥分发的安全性问题,但不适合大量数据的快速加解密过程,如签名消息时通常要先计算消息摘要,再使用私钥对摘要签名(ECDSA算法)。
4.存储机制
区块链数据通常存储在包括KV键值型数据库、关系型数据库、普通文件等中。其中,KV键值型数据库中数据结构与接口都比较简单,具有很高的读写性能与良好的可扩展性,能支持大规模并发键值对数据的读写请求,支持基本增删改查功能,通常不支持复杂SQL功能与强事务性,无法快速执行范围查询等统计功能。为了获得高性能、低延迟与高吞吐量,目前还出现了分布式内存型的KV键值型数据库,如Redis等,它们通过在内存中维护大量的哈希表来存储关键字及指向键值对的指针,利用并发与索引优化,支持内存数据的高效查询、插入与更新操作。同时,还涌现出了TiDB等新型分布式KV键值型数据库,其支持SQL语句的高效复杂查询,包括范围查询、Join查询支持等,提供接近线性的系统扩展能力与实时并发写入能力。区块链平台常用的KV键值型数据库包括LevelDB、CouchDB、BerkeleyDB等,用于保存区块链中的区块索引信息、状态数据等键值对类型的数据。Hyperledger Fabric还使用普通文件存储原始的账本区块数据,将共识后的区块数据按protocol buffer编码格式序列化为二进制字节数组后,写入文件进行持久化保存。
RDBMS(Relational Database Management System,关系型数据库系统)是基于严格的关系模型来表示与组织结构化数据的,支持SQL语句的增删改查操作,提供能够满足ACID原则的复杂事务处理机制。分布式架构版本具有高并发的读写性能和容错能力,并广泛部署在大规模高可用集群系统中。有些区块链系统考虑将链上相关的账户数据、区块信息、交易流水等信息保存在关系型数据库中,以提供历史数据的快速统计查询等功能,提高数据查询效率。
5. P2P通信机制
区块链网络通常采用P2P(Peer to Peer)协议,节点之间直接通过交换方式共享信息,又被称为对等计算。P2P网络中的每个节点地位平等,不需要中心服务器节点来分配任务,每个节点可同时作为服务提供者与服务请求者。这种分布式架构避免了集中式架构中心节点的性能瓶颈,可以有效利用网络节点的性能与网络带宽,从而提升系统的整体效率。同时,还可以根据需求扩展节点规模,具有良好的可扩展性与负载均衡能力。例如,BitTorrent是基于P2P技术共享大文件并进行内容分发的典型平台,每个用户节点在下载文件的同时又不断为其他用户节点提供上传已经下载的数据。
P2P通信机制用于实现与其他节点之间的通信功能,比特币默认配置连接8个近邻节点,最多允许125个连接请求,包括全功能节点(带有钱包、挖矿、校验与转发区块等功能)与基础全节点(转发区块与交易等功能)、SPV节点(校验区块与交易等功能)等,同时利用Zero MQ实现节点通信机制。Hyperledger Fabric采用gRPC库与Gossip消息协议构建P2P通信机制。以太坊使用基于RLP(Recursive Length Prefix)编码及认证的加密P2P协议,包括whisper协议、swarm协议等具体通信协议,分别用于不同的通信场景。
6.智能合约
1994年密码学家Nick Szabo提出了“智能合约”的概念,即一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议,它是一种用计算机语言取代法律语言去记录条款的合约 [11]。Nick Szabo希望能够在互联网上结合现实社会中已有的合约法律法规以及商业实践,将线下商业活动“搬迁”到互联网上进行。可以说,智能合约就是部署在区块链系统虚拟机上能够自动运行与验证的协议程序,不需要人为干预触发操作,具有一定的自治性、强制性与自我验证功能。
在区块链技术领域,智能合约是指基于预定事件触发、不可篡改、自动执行的计算机程序 [5]。虚拟机是区块链系统中运行智能合约的执行环境,如EVM(以太坊虚拟机)提供了图灵完备的虚拟机,通常将用户编写的Solidity语言程序编译成EVM字节代码后再调用运行,而比特币交易系统只是设计了一个不具备图灵完备性的堆栈式脚本引擎,支持锁定脚本与解锁脚本。Hyperledger Fabric采用Docker容器等作为智能合约执行的虚拟机,所有智能合约(Hyperledger Fabric称之为chaincode,即链上代码或链码)都必须实现Init()与Invoke()方法。
事实上,虚拟机通常基于沙箱技术进行隔离封装,以确保智能合约无法与网络、文件系统或者其他进程直接进行交互,用户必须通过虚拟机接口遵循定制的流程,对状态数据通过API进行访问。例如,银行账户管理就可以看作是一组智能合约的应用,传统方式对用户账户的操作需要银行进行监管和授权,否则就会无法执行任何操作。这些操作都可以被设计成智能合约按照对应的流程来执行,一旦部署启动后,除非满足触发下一个智能合约程序的条件,否则,任何人都无法轻易修改程序的正常执行流程,从而确保智能合约的高效准确执行、安全隔离以及较低人为干预风险。但是,由于运行的智能合约程序不能随便人为修改,同样也面临着潜在风险,如以太坊DAO事件中智能合约存在递归程序漏洞、SMT项目中以太坊智能合约存在整数溢出漏洞等。但是,目前大多数区块链系统危机事件都是智能合约自身的程序设计问题,与区块链技术本身提供的安全特性无关。
1.1.3 区块链典型平台现状及趋势
目前,国际上影响力较大的主流区块链开源平台逐渐相互借鉴与融合发展,出现了以下3种典型生态体系及平台。
1.比特币(Bitcoin)
以比特币 [19]为代表的“虚拟货币”平台开源社区生态体系。比特币就是以区块链作为底层技术进行设计与研发的,中本聪(Satoshi Nakamoto)在2008年发表的论文《Bitcoin:A Peer-to-Peer Electronic Cash System》中就曾指出,比特币是通过随机哈希值为全部交易加上时间戳,并把它们融入到不断延伸的、基于随机哈希值的工作量证明链条中作为交易记录(即区块),除非重新完成全部的工作量证明,否则形成的交易记录将不可更改。这种记账方式使得比特币的发行可以不依赖任何政府与货币机构的公信力,而是根据特定共识算法通过大规模计算来生成“货币”,由全系统所有参识节点共同背书,其记账权由全网51%的算力决定,第一次在全球范围内实现了一个去中心化的真实点对点电子现金系统,这完全颠覆了以往人们对“货币”的认知,点燃了以比特币为代表的“虚拟货币”概念风口。
比特币记录的区块结构除了最核心的区块头部信息和交易信息之外,还包括魔幻数(0xD9B4BEF9)、区块字节数大小、交易数量等交易相关信息。
□ 比特币区块头部:记录了版本号、父区块头哈希值、Merkle根哈希值、时间戳、难度目标、随机数(Nonce)等。其中,区块头哈希值是对父区块头通过两次SHA-256哈希运算得到的,可以作为区块的唯一标识符。但是,区块头哈希值并不保存到区块的数据结构中,而是由接收节点重新计算出来的。同时,每个区块头都包含父区块哈希值,这样就将整个账本连接成一个不断增长的链表。比特币上的第一个区块是由中本聪在北京时间2009年1月4日02:15:05创建的“创世区块”(Genesis Block)[12]。
□ 比特币交易信息:包含生成时间、本次交易Merkle根哈希值、比特币支出与接收地址、版本、本次交易数字签名等。该信息是以明文形式存储的,只有当需要转移货币所有权时,才需要用私钥进行签名与验证。当前交易的付款人通过对前一次交易和收款人的公钥签署一个随机哈希(Hash)的数字签名,并将它附加在货币末尾发送给收款人。收款人对付款人的签名用其公钥进行检验,从而验证该链条上交易的所有者,具体交易模式如图1-4所示。为了防止双重支付(即“双花”),比特币交易系统在文件中以区块的形式保存了所有历史交易序列,每个区块都包含上一个区块的哈希值和当前时间戳,这样就形成了不可伪造和防篡改的区块链结构,并且可以进行历史溯源,即查询任何时间上的任何交易。
图1-4 比特币区块链交易模式 [1]
比特币在设计时引入了梅克尔树或默克尔树(Merkle Tree)来实现简化的支付验证(Simplified Payment Verification, SPV),即在不下载账本中所有区块数据的情况下,系统也能够对支付进行快速检验。梅克尔树是一类基于哈希值的二叉树或多叉树,叶子节点存储区块哈希值,非叶子节点包含将所属子节点进行组合后计算的哈希值,通常用于验证信息的完整性。基于区块头中包含的梅克尔树根哈希值和链上已经验证过的中间哈希值列表,梅克尔树可以加快验证指定交易是否包含在区块中,这使得伪造区块头哈希值的成本很高,而且伪造中间哈希值会直接导致验证失败,从而不需要下载所有的区块数据。
2.以太坊(Ethereum)
以以太坊(Ethereum)[20]为代表的支持可编程智能合约的公有链平台开源社区生态体系。其核心理念是将区块链作为可编程的分布式信用基础设施,支持自动化运行的智能合约应用,并将平台交易内容扩展到金融、股权、债务凭证等领域。Vitalik Buterin等创始人于2013年12月开始发起以太坊项目,并计划在第四个阶段Serenity将共识机制从PoW(工作量证明)机制转换到PoS(权益证明)机制上。该项目迅速激发了人们在可信平台上交易金融资产的热情与创造力,现在应用方面有超过上千个DApp上链,已经成为具有国际影响力的开源公链平台。另外,以比特币与以太坊为基础的区块链生态体系还发展出“虚拟货币”或通证(Token)衍生金融与泛娱乐产业链,如ICO(Initial Cryptocurrency Offering)代币融资市场已经受到国家严格监管。
以太坊不同于比特币,比特币利用UTXO(Unspent Transaction Outputs,未花费的交易输出)模型计算余额且没有账户的概念,以太坊提供外部账户(Externally Owned Account, EOA,即通常意义上用公钥与私钥控制的用户账户)和合约账户(不是由私钥文件直接控制,而是由可编程合约代码控制的账户),能够高效查询用户余额和历史交易记录。其中,外部账户没有合约代码,可以通过签名与发送交易到合约账户调用合约,合约账户则能够通过以太坊虚拟机(Ethereum Virtual Machine, EVM)执行智能合约,将执行结果记录到区块链上。以太坊的账户包括交易次数或合约数量(nonce)、以太币余额、合约代码哈希值(合约账户)、账户存储内容的Merkle Patricia树的根节点哈希值(默认为空)等信息,提供支持智能合约执行的栈式EVM,支持图灵完备的计算环境与较为成熟的智能合约编程语言Solidity等。其中,合约程序会被编译成EVM字节码在虚拟机上执行,在正常情况下只能通过日志事件与外部通信。
以太坊采用Merkle Patricia Tree(梅克尔-帕特里夏树,简称MPT,基于Merkle树与Trie树实现的)来实现对交易和状态(数据)的校验和查询操作 [13]。由于梅克尔树适用于快速验证与定位非法交易数据哈希值的位置,但不适合于树节点内容的修改操作,因此,以太坊引入了Merkle Patricia树,以实现在账户等信息中执行插入、更新和删除等操作后能快速生成新的树根哈希值。同时,该树根哈希值只与数据有关,而与更新的顺序无关,这样就不需要考虑每次的更新顺序了。每个以太坊区块头均设计了三个树,包括交易树(Transaction Tree)、状态树(State Tree)和收据树(Receipt Tree)。
以太坊的PoW算法又称Ethash算法,通过动态调节难度(融合了内存难度)来达到约每15秒产生一个新区块的速度,即融合了内存难度来提高计算难度,以抵抗单纯定制优化的ASIC挖矿机“挖矿”,其挖矿效率与CPU基本无关,而与内存大小、带宽正相关。以太坊执行智能合约等操作时必须提供“挖矿”获得或购买的以太币(Ether)作为“燃料”(gas),以激励矿工验证交易并竞争执行智能合约,最终由打包交易出块的矿工收取该奖励收益,利用幽灵协议GHOST(Greedy Heaviest Observed Subtree,贪婪最重观察子树)构建树型区块链(含有叔区块,有助于提高区块链的安全性,减弱大型矿工的“挖矿”优势),而不是比特币的链式区块链。另外,以太坊第四阶段将考虑采用PoS机制,即使用带有惩罚机制的Casper协议,以太币的发行率将大大低于幽灵协议下的发行率。
3. Hyperledger Fabric
以Hyperledger Fabric[18]为代表的联盟链平台开源社区生态体系。其目标是面向企业级应用场景的许可区块链(Permissioned Chain),用于解决多个弱信任企业主体间的信任问题,以降低企业间复杂繁琐业务流程带来的信任成本,实现在可控主体范围内共享敏感数据,从而有效提升企业主体间大规模协作活动的效率。Hyperledger Fabric开源社区提供带有身份权限认证的商用区块链平台,采用模块化插件的灵活设计架构,避免了比特币类公链平台与以太坊类公链平台交易效率低下、缺乏完善的身份认证模块等不足,能广泛应用于金融资产存管、供应链、共享经济等领域。Hyperledger Fabric自2015年底开源以来发展迅速,并已经成为主流的联盟链开源平台。另外,值得注意的是,企业以太坊联盟(Enterprise Ethereum Alliance, EEA)、蚂蚁金服、腾讯、百度、BCOS(由微众银行、万向、矩阵元共同发布的开源联盟链平台)、众安、趣链、CITA(秘猿科技)等都与其存在潜在的竞争。企业级BaaS(Blockchain as a Service)平台作为基础设施服务亦是未来国际企业市场的竞争焦点,国际巨头IBM、微软等已经在此领域深耕发力多年,以实现高效动态的部署跨域区块链网络的能力,提供高质量的商用企业级服务。