本文的联盟链是以Fabric为例。本文中transaction翻译成事务,而非交易。
联盟链相对于公链,最大的不同在于:联盟链上的数据不是对所有人都公开的,只有联盟内的成员才可以访问、写入链上数据。
第二个重要的区别:联盟链不发币,所以联盟链里的账户没有以太坊比特币那样的账户地址。Fabric的访问控制、权限控制等,是通过MSP(Membership Service Provider)提供。这套机制与公链常见的账户模型差别甚大。
本文探讨下Fabric中基于PKI的账户体系,此处假设读者已经对非对称加密有一定了解,并能够回答以下几个问题:
私钥/公钥啥意思?各自的作用? 签名与加密有何区别,又有何共性? 为何需要数字证书?首先简单捋一下Fabric-CA、MSP、 PKI三者的关系。
PKIPKI是什么:一套软硬件系统和安全策略的集合
PKI的作用:它提供了一整套安全机制,使数据可以安全地、不可抵赖地在互联网上发送与接收
PKI提供的功能:
PKI的结构:
中间层为PKI应用提供各种服务,诸如证书申请、验证等操作。其中RA(注册机构)不是必需的,此时CA服务器负责提供绝大多数的业务功能。可见,CA是PKI体系中最重要的一个部分了。
中间层的详细结构如下图所示:
一句话总结:PKI是以非对称加密为基石,以证书为中心,以实现数据的安全传输(防泄露,防抵赖)为目标的一套基础设施,CA是该设施中最重要的一个组成部分。
关于PKI的详细信息,请看[这篇博文](https://blog.csdn.net/carolzhang8406/article/
Fabric-CAFabric-CA是hyperledger下的一个项目,与Fabric属于同级的项目。旨在为基于Fabric的联盟链提供CA服务。负责为联盟链当中的各种角色(peer、orderer、client)颁发证书,提供身份认证,至于这个身份在联盟链中是何角色(Peer?Orderer?Client?)具有何种权限(是否可加入channel?是否能管理channel?),则由MSP负责。
https://blog.csdn.net/boss2967/article/details/83037332details/79458206),说的很详细。
MSP(Membership Service Provider) MSP译为成员服务提供者,他是Fabric中的一个逻辑组件 成员是指联盟链网络的参与者 不同的成员拥有不同的角色、权限,MSP了负责权限管理。 组织内受信任的RCA、ICA,由MSP负责定义通过以上梳理,我们知道,MSP是“账户”体系的核心体现,接下来我们通过分析MSP来窥探Fabric的“账户”体系。
MSP有不同的级别: Network MSP Channel MSP Local MSP Peer MSP Orderer MSPLocal MSP
Local MSP是为客户端(用户)和节点(Peer、Orderer)而设计的。 节点的Local MSP可以定义用户对一个节点的访问权限,例如,定义哪个用户是peer Admin。 用户的Local MSP负责用户方在其事务中的身份验证。例如,在一个链码事务中的channel成员身份),在配置事务中的组织管理员身份,等等。 每一个节点、客户端,都必须定义一个Local MSP,因为它(local MSP)定义了角色在所在层级中的管理权和参与权。假如没有这个定义,节点、客户端将无法加入到联盟链网络。Channel MSP
Channel MSP定义了Channel这个层级的管理权和参与权(也就是定义了谁能够管理该channel,谁能加入该channel)。如果一个组织希望加入channel,则需要在channel配置中添加该组织的MSP,否则该组织针对此channel的事务将会被拒绝。
另外,Channel MSP是在通道配置中进行逻辑定义,通过共识扩散到通道所有的成员,这一点不同于local MSP,它只在User或者peer的本地文件夹中。
以上将MSP分成了两大类:Local MSP 和 Channel MSP,还有一种分类方式:按照level进行分类,为何需要加一种分类方式呢?因为,在有些时候,同样是Local MSP,在网络中起到的作用是不一样的,看下面这张图:
右下角标红的部分,说明 ORG1.MSP不仅仅是一个Local MSP,它还管理着整个网络的配置——这跟同为Local MSP 的 ORG2.MSP是完全不同的级别
按照level分,MSP可以有以下几种:
Network MSP:在网络配置中定义参与的ORG的MSP,决定了谁是联盟链网络的成员,同时也决定了这些成员中由谁来执行管理任务(创建频道等等)
Channel MSP:同上面的Channel MSP
Peer MSP:Peer MSP掌管成员对Peer的权限,例如谁有权力在当前的Peer上安装链码。Peer MSP是Local MSP的一种。
Orderer MSP:Orderer MSP也是Local MSP的一种,定义在本地文件系统中,该类MSP定义了受信任的节点列表
我们知道了MSP的作用以及种类,下面看下MSP的物理结构:
上图的每一个方块都对应着MSP文件夹下的一个子目录,子目录中存放着相关的文件:
RCA:此文件夹包含由此MSP代表的组织所信任的根CA的自签名X.509证书的列表。该目录下至少要有一个跟CA的证书,同时该目录是MSP最重要的一个目录,这个目录就是MSP身份的代表,从根CA派生出的证书才会被认为是该MSP所代表的组织的成员。
ICA: 此文件夹包含此组织信任的中间CA的X.509证书的列表。 每个证书必须由MSP中的一个根CA签名,或者由中间CA签名但最终能通过信任链追溯到该MSP的根CA。中间CA的使用使得管理成员关系的方式更为灵活:中间CA可以看作是组织中不同的部门的这样一个层级,可以更详细的分类组织中的成员。另外,该文件夹是可以为空的。
OU:
Administrator: 改目录定义了MSP管理员的身份列表。该目录中会有一个至多个证书。另外值得注意的是,不是说成为了管理员就能够控制本组织的所有资源,管理员的权限还受系统资源策略的限制。比如该MSP定义了A,B两位管理员,channel策略中只允许A对channel进行添加成员操作,而B则无此权限。
Revoked Certificates:被撤销的证书列表
Node Identity:
Keystore: