联盟链(Fabric)的身份与角色
关于Fabric的身份问题,之前一直很迷惑。通过学习官方文档,我将关于身份和认证方面的内容整理链下来,并且加入了一些自己的理解。
1. 简介
区块链作为一种分布式账本技术,主要分为许可链和非许可链。其中许可链又分为私有链和联盟链。和BTC或ETH 不同,联盟链是一种需要身份认证的区块链。只有通过认证的节点或组织才能参与联盟链网络中的交易。
2. Hyperledger fabric
Hyperledger fabric是一种联盟链。fabric网络中的成员都需要在可信赖的成员服务提供者处注册,否则不能参与交易。/因此围绕联盟链产生了一些争议,一些人认为以fabric为代表的联盟链并不是真正的区块链,而另一些人则持反对意见。/
fabric有一个特有的功能,通道(channel)。通道中的成员与通道外的成员的相互隔绝的,只有同一个通道的成员能够共享账本,不同通道的成员之间的交易记录是不可互相查询的。值得一提的是,同一个节点可以加入不同的通道。
fabric的共识机制是可以拔插的。共识机制是一个分布式系统里的名词,就是在不同的系统中并保持副本的一致性。fabric允许网络中的节点自行选择最能代表参与者需求的共识机制。
fabric中的账本系统包括两个组件:世界状态(数据库)和交易日志(历史记录)。每个参与者都拥有他们所属的fabric网络的账本副本。世界状态描述了账本在给定时间点的状态。它是账本的数据库,记录了当前状态的所有交易,是世界状态的更新历史。交易日志是不可插拔的,它只记录区块链网络中使用账本数据库前后的值。
3. Fabric的身份
身份是联盟链区别与公链的一个最重要特征。在公链中是没有身份这个概念的,每个节点都是相同的角色。而fabric身份是联盟链中最重要的概念,甚至可以没有之一。联盟链中的身份确定了对资源的确切权限以及对参与者在区块链网络中拥有的信息的访问权限。
整个网络中分为几种角色:peer节点(提交节点和背书节点),证书颁发机构CA,其中成员服务提供者(Membership Service Provider, MSP)是一个可信任的权威机构,它不是fabric中的角色,但是为fabric中的节点提供可信的身份认证。fabric中,默认的MSP实现使用X.509证书(使用最广泛的证书结构标准,包括证书信息/签名算法/数字签名等内容)作为身份,采用公钥基础结构(Pubic Key Infrastructure, PKI)作为分层模型。PKI 是身份供应商,为接入区块链网络的用户提供一个身份列表,用户的身份只能在身份列表的包含范围内选择;而MSP是接受身份供应商,会提供一个列表来确定哪些身份是可信的成员(也就是参与者)。
4. 公钥基础结构(Pubic Key Infrastructure, PKI)
PKI 有四个关键要素:数字证书/公钥私钥/证书颁发机构和证书撤销列表:
数字证书包含了证书持有者(区块链网络参与者)的相关属性,其中最常见的证书类型就是X.509标准。最关键的是,证书持有者的公钥会在其证书中分发。数字签名可以验证消息的来源以及消息的完整性。
公钥私钥的作用是为了验证数字签名(如Fig 1),这里用到了我们常说的非对称加密。密钥之间唯一的数学关系使得私钥在消息上的签名只有对应的公钥在相同的消息上才能匹配。参与者用私钥加密,而任何持有其公钥的用户都可以查看签名消息并验证签名。其中的公钥是每一个节点都可以使用的,用于充当授权锚;私钥被用在消息中产生数字签名。消息的接收者可以通过其所持有的发送者的公钥来验证数字签名的有效性,进而验证消息的来源和完整性。

Fig 1 数字签名
证书颁发机构(Certificate Authority,CA)
CA是一个区块链网络信任的权威机构,它可以向参与者或者节点颁发经过加密验证的数字证书。CA向不同的参与者颁发证书,并对这些证书进行签名,将参与者的公钥绑定上去(可以选择包含参与者全部属性的列表)。区块链网络中的成员信任CA(并知道CA的公钥),则可以信任经过CA认证的证书,并通过验证CA的签名来获得签名中包含的所有属性。数字证书可以作为信任锚,来验证不同参与者的消息。区块链网络中可以存在一个或多个CA。
CA分为根CA和中间CA,它们构成了一条信任链。根CA能够给整个网络中的用户颁发证书,中间CA的证书直接或间接地由根CA颁发,可以有隐藏和保护根CA的作用。
Fabric CA是一个内置的CA组建,用来给fabric网络充当根CA,提供和管理证书。
证书吊销列表(Certificate Revocation Lists,CRL)是一个被吊销证书的黑名单,CRL 上的证书都将被视为无效。
5. 成员服务提供者(Membership Service Provider, MSP)
PKI 解决了fabric网络中身份发放的问题,但由于节点的私钥永远都不会公开,因此还需要引入一种可以证实身份的机制 MSP 。
MSP 是一组被添加在网络中的配置文件夹,被用来在外部和内部定义组织(organization)。CA生成代表身份的证书,而MSP包含了被许可身份的列表。MSP 通过识别成员或向成员颁发身份的CA,来确定是否接受它们作为信任域的成员。MSP 通过标志参与者在节点或通道中的特定权利,将身份转化为角色。简而言之,PKI(具体说是CA)提供的是身份;而MSP提供的是角色。
当用户使用Fabric CA注册时,其必须关联为管理员/peer节点/客户端/排序节点/成员其中之一的角色。MSP 根据作用范围的不同分为:本地MSP和通道MSP。本地MSP为客户端/peer节点/排序节点定义,每一个节点都必须定义一个本地MSP。通道MSP则在通道层面定义了管理权和参与权,在通道中分配成员的权限,每一个参与通道的组织都要为自己定义一个通道MSP。
因此,MSP 是一种能使参与者加入联盟链的机制,想要在Fabric网络上进行交易需要:
1.拥有一个CA颁发的身份;2.成为一个被网络中的成员认可的组织成员(将成员的公钥添加到组织的MSP中即可);3.将MSP添加到一个网络中的联盟或通道中;4.确保MSP包含在网络所定义的策略(Policy)中。
6. 策略(Policy)
在Fabric中,策略是基础设施的管理机制。它表示了成员如何同意或拒绝网络/通道/智能合约的更改。策略是在区块链网络最初配置时由联盟成员一致同意的,但在网络演化的过程中可以更改。简而言之,在区块链网络中的所有行为都要受到策略的控制。
策略是Fabirc区别于公链的内容之一。在公链中,交易可以在网络中的任意节点中生成和验证,但是Fabric是许可链的一种,因此策略决定了哪些组织可以访问或更新Fabric网络,并且提供了强制执行这些决策的机制。从这个角度看,我认为Fabric的可监管性更强。
策略在Fabric网络的不同层级中都有应用。至于具体应用和访问控制列表(Access Control List,ACL)就放在后面再学了,这部分我感觉更偏向与工程实践。
另外专门说两个我认为比较关键的策略:背书策略(Endorsement policy)定义了必须为执行提案背书的组织;修改策略(Modification policy)指定了任何配置更新所需要的一组身份,是更新策略的策略,每一个通道配置中都包含一个对修改策略的引用。
7. Peer节点
这一个部分我认为是和身份与角色相辅相成的,角色和身份就是为了peer节点组成的区块链网络服务的。但是peer可学的太多了,我放到后面。

浙公网安备 33010602011771号