联盟链的蜂起
区块链最早作为比特币的底层技术而广为人知。比特币的概念在 2008 年诞生,2014 年以后人们发现将其底层剥离出来的区块链技术,进行改造,增加新特性后,可作为基础设施适用于更多的应用场景。这时诞生了很多类似于比特币网络的,任何节点无须任何许可便可以随时加入或者脱离网络的区块链项目,我们称之为公有链项目。
世界上各大金融机构开始关注区块链技术,并且在分析后认为区块链技术有可能在金融各个领域中发挥减少成本、增加效率的作用。在金融领域的场景中,因为无法直接使用性能较为低下、数据透明公开、全网记账的公有链技术,所以在 2016 年就出现了大量不局限于金融行业,各种以联盟链为目标的区块链项目。随着时间的发展,由比特币起源的,作为联盟链的区块链技术与作为公有链的区块链技术各自独立的发展出了新的特点。
在 2016 年最早公开联盟链代码的是由 Linux 基金会发起的开源 HyperLedger(超级账本)平台。HyperLedger 旨在成为跨行业的区块链技术的标准,多个不同行业的公司都在 HyperLedger 平台上贡献提交了自己的代码。其中最活跃最被认可的,作为基础设施的项目是由 IBM 推出的 Fabric 项目。
Fabric 提供基于 PKI 的身份管理,实施交易的权限管理,这样防止了任何节点都可以发起交易。首先通过 Registration Authority(RA)注册获得许可,然后通过 Enrollment Certificate Authority(ECA)获得注册安全证书(ECert);第三步,通过 Transaction Certificate Authority(TCA)获得交易安全证书(TCert);最终只有使用以上安全证书的二者之一签名的节点才能发起交易请求。
在联盟链的业务需求中,无法像比特币一样,让所有的交易参与方都看到所有的交易数据,对于数据隐私保护的要求是毋庸置疑的。目前在传统解决方案中我们一般使用物理隔离的方法,既交易数据只保存在相关参与方各自的物理空间里。但是区块链技术带来优势的特点正是交易的参与方使用“达成共识的同一个账本”,如何在保证“同一个账本”的前提下,保护交易数据隐私呢?
在 Fabric 的架构中,一方面是利用 PKI 技术来对交易方身份与交易数据进行加密,另一方面是利用节点对交易数据的访问控制,实现交易数据的权限隔离。从加密层面上具体来说就是通过注册,交易两级安全证书体系及交易证书序号随机生成来实现交易方的身份隐私保护。通过对智能合约的名称、内容、交易内容、交易的执行状态实施多级加密,仅有交易相关方拥有解密所需密钥来实现交易内容的隐私保护。
从权限隔离的层面上是将节点分为了验证节点与非验证节点,非验证节点只能接受并处理与自己相关的交易数据。只有验证节点才能进行共识,运行交易,维护账本,而非验证节点则只能维护节点间的安全上下文,代表客户向成员服务或验证节点请求服务,向应用交付事件。
在 2016 年 11 月 30 日,名声大噪的国际大银行区块链联盟 R3 也开源了独创的分布式账本平台 Corda。在 Corda 的平台中,交易数据已经不记录于单位时间产出的一个个数据块中,因此其账本并非常见的区块构成的链式结构,但是仍然具有区块链技术的分布式,数字签名,UTXO 余额追踪方式,共识机制等特点。
关于数据隐私保护,Corda 在账本层面各个节点之间的数据传输是并非全网广播,只有交易的关联方才能收到相应的信息。Corda 实际上也是利用权限隔离来保护隐私,通过设置公证人角色的节点来记录账本,但即便是公证人也无需保存全账本。只有当公证人所拥有的数据无法处理交易时,公证人才会从别的节点获取所需要的数据来计算交易的哈希根。
Corda 也采用了名为部分屏蔽的加密保护方案,对记录交易历史的 Merkel 树结构进行剪枝后只留下原始数据的哈希运算结果,而现阶段的技术是无法通过哈希运算结果逆向推出原始数据的。公证人从别的节点获取原始数据的哈希值来计算最终的交易哈希根。通过权限隔离,加密保护的手段,Corda 保证了只有交易的公证人,相关方才能看到原始数据,保护了数据隐私。
但是区块链项目使用的加密算法都无法抵抗量子计算,通过加密手段来对数据隐私进行保护有一个潜在的长期问题,那就是随着量子计算的发展,这些加密后的共享数据会在量子计算技术成熟后被破解。
2016 年 11 月份 DAH(Digital Asset Holdings)发布了 Digital Aseet Platform 的非技术白皮书。在这个平台里面,交易数据已经被物理隔离在相关的参与方的节点里。交易数据通过各个节点独自拥有的私有合约存储(PCS)进行物理隔离,各个节点通过一个全网共享的全局同步日志(GSL)来保持各自账本数据状态。
至此,我们看到区块链上对数据的隐私保护技术,从 2016 年早期的加密保护到后来的权限隔离,发展到了物理隔离。
联盟链上同样不能使用公有链普遍使用的 POW(工作量证明算法)共识机制。为了满足对高吞吐量,低耗能的需求,同时联盟链中的节点比公有链的节点有更强的安全与性能保证,很多联盟链使用了技术成熟的 Raft,PBFT 等共识算法来达成共识。这样可以实现快速生成新的区块,达成不分叉的秒级共识。这样联盟链系统每秒的吞吐量也可以从十位数上升到千位数。
比特币与以太坊的修行
另外一方面,关于公有链在 2016 年的技术发展,主要以比特币的扩展性问题与以太坊的 TheDAO 事件成为 2016 年的焦点。
比特币自诞生以来发展到今日区块的大小已经成为限制比特币使用继续扩展的瓶颈。比特币的区块是用于记录交易数据的,由于区块大小的上限为 1M 字节,每个区块中能够容纳的交易有限。随着每秒发生交易数的不断增长,当区块大小已经达到上限时候,新的交易将无法被立刻记录进区块,而是等待被记录下一个或者再下一个区块。只有交易在区块中被记录后才算是交易完成,也就是如果什么都不做的话,比特币交易完成的时间会不可避免的随着交易量的增长而不断延长。
现在为了解决这个问题,比特币有提升区块大小的上限,比如从 1MB 提高到 2MB,或者是把写入区块的数据量减少(比如隔离见证)等方案作为选择。比特币在 2016 年最大的突破是推出了隔离见证(Segregated Witness,简称 Segwit)的软件发布。比特币中每笔交易都需要发送方利用自己的私钥对交易进行签名以证明所有权。隔离见证的方案是将原本在区块中的签名数据与交易数据分开来,将区块中的签名数据作为一个单独的部分从 1MB 中分离出来。这样可以在区块中放入更多的交易数据,从而增加比特币系统每秒能处理的交易数量。不过即便如此最大也只能将吞吐量扩展约为现在的 2 倍左右。
而区块链业界第二大公有链以太坊,在 2015 年正式运行,作为智能合约的编程平台而业界闻名。2016 年以太坊遇到了智能合约的安全性问题难关:TheDAO 事件。
2016 年 6 月 17 日,由于其编写的智能合约存在着重大缺陷,区块链业界最大的众筹项目 TheDAO(被攻击前拥有 1 亿美元左右资产)遭到攻击,导致大量 DAO 代币被盗取。攻击者组合了 2 个漏洞攻击。攻击者利用的第一个漏洞是递归调用 TheDAO 智能合约中的 splitDAO 函数。也就是说 splitDAO 函数被第一次合法调用后会非法的再次调用自己,然后不断重复这个自己非法调用自己的过程。这样的递归调用可以使得攻击者的 DAO 资产在被清零之前,数十次的从 TheDAO 的资产池里重复分离出来理应被清零的攻击者的 DAO 资产。
攻击者利用的第二个漏洞是 DAO 资产分离后避免从 TheDAO 资产池中销毁。正常情况下,攻击者的 DAO 资产被分离后,TheDAO 资产池会销毁这部分 DAO 资产。但是攻击者在递归调用结束前把自己的 DAO 资产转移到了其他账户,这样就可以避免这部分 DAO 资产被销毁。在利用第一个漏洞进行攻击完后把安全转移走的 DAO 资产再转回原账户,这样攻击者做到了只用 2 个同样的账户和同样 DAO 资产进行了 200 多次攻击。
以太坊的智能合约代码使用图灵完备的合约语言编写而成,TheDAO 事件的根本起因是因为程序出错导致的。为了避免同样的事故再次发生,在 2016 年以太坊开始开发形式化验证 (Formal Verification) 的工具。形式化验证就是使用计算机程序自动地在数学的层面上证明关于其他计算机程序的语句。以太坊团队通过形式化验证的工具来证明以太坊智能合约的代码的正确性,从而保证程序质量。
进击的公有链
2016 年 10 月 28 日正式运行的 ZCash 项目则是利用了名为 zk-SNARK 的非交互式零知识证明算法,将交易的参与方身份与交易数据都进行了加密保护,在不公开交易参与方或者交易数额的情况下即可维护一个安全的账户余额账本。在零知识证明算法中,证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的,因而与其他加密算法相比可以最大限度的保护数据隐私。非交互式指的是验证方在验证过程中无需与证明者进行交互,只需要接受到证明者的单向信息即可验证结果,与交互式相比可以加快验证的效率。
而在区块链核心组件的共识算法方面,以太坊的下一代共识算法 Casper 的设计在 2016 年接近完成,接下来将进行安全性证明以及测试网络的构建。属于权益证明(Proof Of Stake)类型的 Casper 的特点在于记账的节点不需要购买物理硬件来提供算力参与记账竞争,只需要抵押以太币即可参与记账竞争。作为惩罚,支持分叉(不作为),状态不稳定(无能)或者做假账(作恶)的节点在被发现后所抵押的以太币将会被扣除。此外在 Casper 的区块链形成过程中也不会出现分叉,因此只要交易被记录到区块中,无需等待更多的后续区块产出即可认为交易完成。
另外一种 HoneyBadger 的新的强化版拜占庭容错共识算法也在 2016 年被提出来,即使在网络行为无法预测的广域网中也可容错。这个新的共识算法目前还没被结合到某项具体的区块链项目中,但是仍然值得继续关注和研究。
2016 年也是跨链技术曙光初现的一年。目前区块链业界技术发展的精力仍然集中于如何在单个区块链项目中提高性能,增加特性。不同的区块链只能在独自的网络里面交易,转移价值,然而正如局域网之间连通形成广域网,因特网后才能发挥出强大的网络效应,如何让各个区块链之间互联互通最终形成价值网(Internet of Value)是区块链技术发展绕不开的课题。
比如 2016 年新推出的 Polkadot 项目是为了连通各种区块链的数据中继平台。Polkadot 被设计为可伸缩的异构多链,提供中继链平台,在其上可以构建大量可验证的、全局一致的(共识的)数据结构。换句话说,如果不考虑整体的安全性和链间无须信任的交易处理能力的话,Polkadot 可以视为独立链的集合。独立链可以是以太坊、比特币等。
总结
在 2016 年中首先由金融行业领头,很多行业都发起了区块链联盟,发展出了自己的区块链平台。在应用到实际业务时,人们发现无论是在隐私保护还是在性能上使用现存的公有链平台无法满足各自行业场景的需要。于是不同行业的区块链联盟研发诞生了符合各自行业需求的联盟型区块链平台。即便如此今年的联盟链技术还是着力于核心与协议层面的技术发展,作为一种综合的解决方案则仍然不成熟。可从以下方面评价区块链技术的成熟度:
第一,各行业对作为基础设施的区块链技术的功能与性能需求仍然暧昧,没有公认的清晰明确的定义。虽然对区块链技术的跨行业的概括性需求已经被总结并认可,但是针对具体行业的需求细节还有待研究。2016 年将性能与隐私性问题解决后,仍然还有其他的需求在 2017 年需要总结明确出来。
第二,作为基础设施的区块链技术仍然没有明确的质量评测标准。计划将区块链技术最终落地于某项实际业务的时候,需要考虑如何对区块链进行质量评测以及定义合格标准并最终上生产环境。这些评测标准也许在某些企业或者机构内部有了明确的内容,但是得到同行业公认的评测标准尚未出现。
此外,作为区块链技术整体解决方案一部分,例如身份认证管理等的链内服务,以及区块链内与区块链外的交互技术仍然没有成熟的方案。公有链与联盟链相比,由于应用场景与目标不尽相同,所以今年公有链的技术发展着眼于扩展性与智能合约的安全性上。比特币已发展多年,在每时每刻交易量不断增加的 2016 年,如何扩展交易处理性能已经成为刻不容缓的课题。对于这个课题,比特币社区有区块扩容,隔离见证等多种方案,但是对于最终采取哪个方案社区多有争论,仍然未有最终统一的意见。而以太坊在 2016 年则因为发生 TheDAO 事件后,在早期快速发展过程中没有被发现的安全问题暴露出来了,团队将精力优先放在保证智能合约安全性的课题上。
还有,2016 年公有链在加密算法,共识算法以及跨链技术上也多有突破性的成果。
虽然联盟链与公有链目前独立发展出各自的技术路径,但是随着区块链技术整体的成熟与标准的初显端倪,2016 年分道扬镳后的联盟链与公有链是否会在 2017 年殊途同归呢?
作者简介
段玺(Andy Dan),毕业于吉林大学计算机系,现任万向区块链实验室高级项目经理,中国分布式总账基础协议联盟 ChinaLedger 核心成员,负责区块链核心技术与协议开发。他是中国较早关注并探索区块链技术的资深技术人士,在深度研究世界领先的区块链技术趋势,自主研发中国区块链基础平台等方面,进行了长期和大量卓有成效的工作。2014 年联合创立了国内最早的高水平区块链技术社区之一:EthFans。此前,段玺在日本东京担任索尼高级软件工程师。在 9 年工作期间,主导和参与了多个重要项目的设计开发工作,拥有丰富的项目研发和团队管理经验。
感谢朱昊冰对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论