奇技 · 指南

目前区块链技术的发展存在两个大的方向,即联盟链和公链,两者之间最大的区别在于是否存在”准入机制”,这里的”准入机制”指访问权限的管理机制。联盟链有“准入机制”,并不是任意的个人或组织都能参与其中,数据只在联盟链内部公开、共享。而公链,则是完全公开,没有任何的准入门槛,所有个人或组织都可以参与其中,数据对所有人公开。

1


背景



下面从技术方面对联盟链和公链的异同点做了一个大致的对比:

种类

联盟链

公链

DLT分布式账本

数据防篡改

采用共识算法

准入机制

×

是否发币

×

节点数量

信任基础

×

整体来说,联盟链在实现了分布式账本、共识算法、防篡改等区块链标志性能力外,也重点实现了准入机制。联盟链既具有区块链的数据透明、防篡改特性,并将数据的互联互通限定在一定范围内,且具有不错的性能来支撑业务。企业或机构在选型过程中,往往选择联盟链技术。

在国家的十四五规划中,也明确指出“以联盟链为重点发展区块链服务平台和金融科技、供应链管理、政务服务等领域应用方案”,足可见联盟链技术是未来区块链技术一个极其重要的发展方向。

2



联盟链现状



目前,联盟链的现状可以用一句话概括:“超级账本Hyperledger旗下的Fabric一家独大”Hyperledger是 Linux 金会于 2015 年 12 月发起的开源区块链项目,旨在通过提供支持不同用途组件的模块化框架,集中开展许多独立工作来开发开放协议和标准,推动跨行业区块链技术的发展,帮助企业更容易地建立企业级区块链解决方案。

联盟链fabric 联盟链概念_区块链

图:Hyperledger旗下项目,来源Hyperledger官网

Hyperledger目前8个创始会员、超过122个普通会员以及48个准会员机构。其中不仅包括IBM、Microsoft、J.P.Morgan、Accenture等国外科技、金融巨头,也包含蚂蚁、百度、腾讯、京东、小米、平安银行等国内互联网和金融巨头。

联盟链fabric 联盟链概念_联盟链fabric_02

图:Hyperledger社区会员,来源Hyperledger官网

Fabric正是Hyperledger中的联盟链项目,目前在git上已经获得超过11.7k颗星,并拥有超过270名开发者贡献代码,主流的云服务供应商均提供Fabric的BaaS区块链服务平台。后面会详细介绍下Fabric“准入机制”。

3



Fabirc准入机制



下图是一个典型的Fabric区块链网络,包含3个成员组织(ORG1,ORG2,ORG3)和1个排序组织(ORG4)。

联盟链fabric 联盟链概念_编程语言_03

图:Fabric网络拓扑,来源:https://medium.com/coinmonks/designing-a-hyperledger-fabric-network-7adcd78dabc3

这里提到了两种类型的组织,即成员组织和排序组织。

  • 成员组织即MemberOrg可以理解为联盟链网络中的参与方,是有数据上链需求的实体,一般会在网络中维护一个或多个Peer节点。
  • 排序组织即OrdererOrg,负责Fabric中的交易排序以及区块创建,往往由网络的发起者或监管机构运行维护。Orderer是Fabric一个独特的设计,不同的底层区块链网络虽然采用不同的共识算法来生成区块,但出块节点一般都具有随机性.而Fabric为了提升出块效率以及提升联盟内部的数据监管,将网络的出块权完全赋予了单个组织,即Orderer Organization,该组织采用RAFT共识算法,维护了一个由多个orderer节点组成的排序节点集群,负责接收交易、生成区块、发送区块。

这两个组织构成了Fabric网络的主体,而每个组织都会包含一个成员身份(以下简称MSP),MSP可以理解为组织的identity,在网络中完全代表一个组织参与网络共识。Fabric的“准入机制”正是围绕以MSP成员身份为中心的Channel成员管理来实现的。下面,详细介绍下MSP成员身份、Channel通道和Channel成员管理。


MSP成员身份

Fabric中的成员身份采用的是传统的PKI体系,如下图所示:

联盟链fabric 联盟链概念_联盟链fabric_04

图:PKI体系,来源:Fabric文档

每个组织在加入到网络之前,会首先维护一个属于自己的CA(Certificate Authority)证书颁发机构,用于用户身份的注册以及用户证书的签发、注销。一个CA证书主要包括

  • Subject:主体身份信息
  • SubjectPublic Key:主体的公钥
  • Issuer:颁发者即CA的信息
  • Signature:颁发者即CA的数字签名

联盟链fabric 联盟链概念_区块链_05

图:PKI证书,来源:Fabric文档

MSP身份的验证流程如下:

1) ORG1的某身份账户向ORG2展示自己的证书(证书由ORG1的CA颁发)

2) ORG2可向ORG1的CA机构获取Root CA证书,并提取Subject Public Key

3) 借助ORG1 CA机构的Subject Public Key来验证该身份账户提供的证书签名

4) 签名验证通过,该身份账户为ORG1合法账户

Fabric中每个组织首先会创建一个Admin用户,并在本地维护一个msp目录,目录主要包含:

  • 组织CA的root证书(./msp/cacerts)
  • 组织Admin账户的公私钥(./msp/keystore)
  • 组织Admin账户的签名证书(./msp/signcerts)

联盟链fabric 联盟链概念_区块链_06

图:MSP身份,来源:Fabric文档

至此,我们知道了Fabric中的MSP身份体系,那么:组织的MSP身份是如何在网络中发挥作用的?Fabric网络是如何通过组织的MSP身份来限制网络成员的呢?

简单来说,Fabric是借助可配置的channel来限制成员身份,只有包含在channel内的成员组织身份才允许加入网络、参与共识、同步数据。下面详细介绍下Channel的概念以及以Channel为基础实现的成员身份管理。

Channel通道

Channel同样是Fabric的一个独特设计,在Fabric中,存在着两种类型的channel,即:

  • system channel:系统级channel,在联盟链网络组建时创建,用于定义联盟链网络的创始成员等信息,由排序组织负责管理。
  • application channel:应用级channel,联盟链网络中更细粒度的划分,可以由网络中的部分组织组建而成,一个application channel代表一个真正意义上的区块链,拥有着一套独立的账本数据,application channel由网络的成员组织管理。

一个Fabric联盟链网络只有一个system channel,但可以包含多个application channel。可以理解为一个联盟中,由于组织之间有着不同的利益关系往来,不同的组织之间会建立不同的链(即不同的application channel)。

也就是说,Fabric联盟链的“准入机制”是以一个application channel为基础进行的,成员管理也就是一个channel的管理。

Channel成员管理

Channel的成员组织会在创建channel的时候指定,并将各个成员组织的MSP包含在创始区块(genesis block)中,主要是包含成员组织的CA证书和Admin账户证书,并以此管理成员。具体过程如下:

1. 配置并生成genesis block

1) 配置成员组织,重要内容:

  • ID:成员组织在网络中的标识
  • MSPDir:成员组织的MSP本地目录,用于加载msp的相关证书
  • Policies:用于定义成员组织内部的读、写、审计权限

联盟链fabric 联盟链概念_区块链_07

图:成员组织定义

2) 配置application channel,重要内容:

  • Organizations: 定义applicationchannel中包含的成员组织,如下图,包含Org1和Org2

联盟链fabric 联盟链概念_编程语言_08

图:applicationchannel的定义

3)以上述两个配置为基础创建genesis block

2. 发起者用genesis block在网络中启动这个application channel

3. 成员组织申请将节点peer加入到application channel中,申请信息中将包含成员组织的身份证书

4. 通过genesis block中的各个成员组织CA证书来验证申请者的身份是否为application channel中的成员组织颁发。如果是,则成员组织节点加入成功并开始同步账本数据;如果不是,则会被拒绝。

由此,Fabric实现了对授权组织节点的准入以及对非授权节点的拒绝。

4



总结



联盟链技术借助准入机制实现了对区块链网络成员的可控,使得企业中的利益相关方能够在相对可控的范围内实现数据的共享、防篡改以及可追溯,促进了企业在区块链落地场景的探索。鉴于联盟链技术在企业级区块链领域的优势以及国家十四五规划中的背书,笔者认为,联盟链技术在未来几年会持续发展,在各个领域也会出现一些区块链技术的优秀落地场景,非常值得研究与探索。