导读

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的 新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法

联盟链的蜂起

区块链最早作为比特币的底层技术而广为人知。比特币的概念在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年殊途同归呢?

原文来自:http://www.infoq.com/cn/articles/review-and-summary-of-chain-technology-in-2016?utm_source=articles_about_architecture-design&utm_medium=link&utm_campaign=architecture-design

本文地址:http://www.linuxprobe.com/centos-directory-color.html编辑:王辉,审核员:岳国帅