• -------------------------------------------------------------
  • ====================================

09-HyperLedger-Fabric原理-MSP详解(一)-MSP基础

区块链 dewbay 4年前 (2020-01-06) 2682次浏览 已收录 0个评论 扫描二维码

在前面的文章中,我们分析了 Fabric 的架构,把 Fabric 系统看成由不同的逻辑结构组成。其中 MSP 是一个逻辑结构,主要的功能是承担权限管理。

09-HyperLedger-Fabric原理-MSP详解(一)-MSP基础
fabric 架构

那么,MSP 是什么?它在 Fabric 中,又是以怎样的形式存在呢?接下来的这篇文章,将会做详细介绍。全文按照如下结构展开:

09-HyperLedger-Fabric原理-MSP详解(一)-MSP基础
全文结构

一、基本概念

MSP 是 Membership Service Provider 的缩写,直译为成员关系服务提供者。为了更好的理解 MSP,这里首先介绍 MSP 中的要用到的一些术语。

certificate 证书

证书(certificate)是 Fabric 中权限管理的基础。目前采用了基于 ECDSA 算法的非对称加密算法来生成公钥和私钥,证书格式则采用了 X.509 的标准规范。

Fabric 中采用单独的 Fabric CA 项目来管理证书的生成。每一个实体、组织都可以拥有自己的身份证书,并且证书也遵循了组织结构,方便基于组织实现灵活的权限管理。

Member 成员

拥有网络唯一根证书的合法独立实体。

在 Fabric 区块链中,peer 节点和 app client 这样的网络组件实际上就是一个 Member。

在学习过程中,一度对成员与 Peer 之间的关系不太清楚,这里做一个总结。

成员 与 Peer 的关系
Fabric 网络提供的是联盟链服务,联盟由多个组织构成,组织中的成员提供了节点服务来维护网络,同时通过身份证书来进行权限管理。
通道概念就可以理解为一个通道(Fabric 中的 channel)对应一个联盟.
一个通道上可以有多个组织。每个组织(Fabric 中的 org)有多个成员。
也就是说,成员提供节点服务。

一个组织中的成员可以根据网络中流量的要求,提供不同数量的节点服务来满足网络中的访问量。

Organization 组织

组织(organization)代表一组拥有共同信任的根证书(可以为根 CA 证书或中间 CA 证书)的成员。

这些成员由于共享同样的信任根,彼此之间信任度很高,可以相互交换比较敏感的内容。同一个组织的成员节点在网络中可以被认为是同一个身份,代表组织进行签名。组织中成员可以为普通成员角色或者管理员角色,后者拥有更高的权限,可以对组织配置进行修改。

组织一般包括名称、ID、MSP 信息、管理策略、认证采用的密码库类型、一组锚点节点位置等信息。通常情况下,多个组织为了进行数据沟通,可以加入到同一个通道中。

09-HyperLedger-Fabric原理-MSP详解(一)-MSP基础
组织示例

如上图所示,三家银行一共三个组织,两两加入到同一个通道中彼此进行相关数据交互,而无需担心被其他人看到。

Consortium 联盟

联盟由若干组织构成的集合,是联盟链场景所独有的结构形式。联盟一般用于多个组织相互合作的场景,例如某联盟中指定需要所有参与方同时对交易背书,才允许在网络中进行执行。

联盟中的组织成员会使用同一个排序服务,并且遵循相同的通道创建策略(Channel-CreationPolicy)。通道创建策略可以为 ALL、MAJORITY 或者 ANY(默认值)。通道在创建时也必须指定所绑定的联盟信息。例如,某个联盟内可能定义必须要所有成员都同意才能创建新的通道;或者任何成员都可以自行创建新的通道。通道创建策略会成为所新建通道 Application 组的修改策略(mod_policy)。

在设置联盟时候,每个组织都需要指定自己的 ID 信息,该信息必须要跟该组织所关联的 MSP ID 一致。

MSP 成员关系服务提供者

成员服务提供者(MSP)是一个提供抽象化成员操作框架的组件。

MSP 将颁发与校验证书,以及用户认证背后的所有密码学机制与协议都抽象了出来。

一个MSP可以自己定义身份,以及身份的管理(身份验证)与认证(生成与验证签名)规则。也就是说,在一个运行的 fabric 系统网络中有众多的参与者,MSP 就是为了管理这些参与者,可以辨识验证哪些人有资格,哪些人没资格,既维护某一个参与者的权限,也维护参与者之间的关系。

为了处理网络成员身份和身份,成员服务提供者(MSP)管理用户 id,并对网络中的所有参与者进行身份验证。一个 Fabric 区块链网络可以由一个或多个 MSPs 控制。这提供了成员操作的模块化,以及跨不同成员标准和体系结构的互操作性。

当 MSP 的成员管理规则表示一个团体,组织或组织分工时,该名称会被引用。这又被成为 MSP 标识符或 MSP ID。对于每个 MSP 实例,MSP 标识符都必须独一无二。关于这一点,会在后面 MSP 实践中详细说明。

MS(Member Service) 成员服务

成员服务在许可的区块链网络上认证、授权和管理身份。在 peer 和 order 中运行的成员服务的代码都会认证和授权区块链操作。它是基于 PKI 的 MSP 实现。

综上所述,成员是最基本的元素,它对应的是我们 Fabric 网络中的 Peer 节点或者 Order 节点或者 Fabric-CA。MSP 就是对这些成员进行身份的管理与验证的实现。

总结为一句话,成员关系服务提供者,给成员提供成员服务。这种服务是基于 PKI 的 MSP 实现的。


二、MSP 的作用

从上面的解释中可知,MSP 将颁发与校验证书,以及用户认证背后的所有密码学机制与协议都抽象了出来。

成员服务提供者(MSP)管理用户 id,并对网络中的所有参与者进行身份验证。一个 Fabric 区块链网络可以由一个或多个 MSPs 控制。这提供了成员操作的模块化,以及跨不同成员标准和体系结构的互操作性。


三、MSP 结构

Fabric 中提出了成员服务提供者(Membership Service Provider,MSP)的概念,抽象代表了一个身份验证的实体。基于它可以实现对不同资源进行基于身份证书的权限验证。

成员服务提供者代表了用于对某个资源(成员、节点、组织等)进行身份验证的一组机制,是实现权限管理的基础。

基于 MSP,资源实体可以对数据签名进行确认,网络可以对签名的身份进行验证。

通常情况下,一个组织或联盟可以对应到一个层级化的 MSP。这里所谓的层级化的 MSP,是指由根证书,生成中间件证书等组成的层级化的结构,从而实现不同管理员与普通成员之间的权限控制。

一个资源实体的 MSP 结构中往往包括签名和验证算法,以及一组符合 X.509 格式的证书,这些证书最后都需要追溯到同一个信任的根。

以下是一个 MSP 结构中常见的组成部分:

· 一组信任的根证书,是整个组织证书信任的基础,根证书可以签发中间层证书;
· MSP 的管理员的身份证书,管理员可以对 MSP 中证书进行管理;
· 组织单元(Organizational Unit)列表(可选);
· 一组信任的中间证书,中间证书由根证书签发(可选);
· 证书撤销列表,代表被吊销的证书名单(可选)。

如果更详细一些,可以用下图来表示:

09-HyperLedger-Fabric原理-MSP详解(一)-MSP基础
MSP 结构

Root CAs | 根证书列表

此文件夹包含,由此 MSP 代表的组织信任的 Root CA,自签名 X.509 证书列表。此 MSP 文件夹中必须至少有一个 Root CA X.509 证书。这是最重要的文件夹,因为它标识了所有其它证书。

Intermediate CAs | 中间证书列表

此文件夹包含此组织信任的 Intermediate CA 的 X.509 证书列表。每个证书都必须由 MSP 中的一个 Root CA 签署,或者由 Intermediate CA 签署。

Intermediate CA 可以表示组织的不同细分或组织本身(例如,如果商业 CA 用于组织的身份管理)。在前一种情况下,可以使用 CA 层次结构中,较低的其他 Intermediate CA 来表示组织细分。请注意,可能有一个没有任何中间 CA 的功能网络,在这种情况下,此文件夹将为空。

与 Root CA 文件夹一样,此文件夹定义了中间证书。只有拥有了这些证书,才能被系统视为组织成员的 CA。

Organizational Units (OUs) | 组织单元列表

可选的

Administrators | 管理员身份证书

该文件夹包含一个身份列表,用于定义具有该组织管理员角色的参与者。对于标准 MSP 类型,此列表中应该有一个或多个 X.509 证书。

Revoked Certificates | 撤销证书列表

可选的

KeyStore for Private Key | 私钥库

该文件夹为 peer 或 orderer 节点(或客户端的 local MSP)的 local MSP 定义,并包含节点的 signing key(签名密钥)。 此密钥用于签署数据,作为认可阶段的一部分。

该文件夹对 Local MSP 是必须的,并且必须包含一个私钥。 很明显,访问这个文件夹,只能由,对此 peer 有管理权限的用户。

Channel MSP 的配置不包括此部分,因为 Channel MSP 旨在提供纯粹的身份验证功能,而不是签署能力。

TLS Root CA | TLS 根证书列表

此文件夹包含,此组织为 TLS 通信所信任的 Root CA 的自签名 X.509 证书列表。 TLS 通信的一个例子是,peer 需要连接到 orderer 以便它可以接收 ledger 更新。

MSP TLS 信息涉及网络内的节点,即对 peers 和 the orderers,此文件夹中必须至少有一个 TLS Root CA X.509 证书。

TLS Intermediate CA | TLS 中间证书

此文件夹包含由此 MSP 代表的,组织信任的用于 TLS 通信的 Intermediate CA 证书列表。当商业 CA 用于组织的 TLS 证书时,此文件夹特别有用。 它是可选的。

Fabric 中 MSP 相关实现代码都在 msp 目录下,目前采用了 bccspmsp 结构来代表一个成员身份结构,并且采用了 MSPConfig(主要是其成员 FabricMSPConfig)结构来代表跟该实体相关的证书信息。

MSP 中各实体资源的证书必须被证书信任树上的叶子节点签名。中间层签名的证书会被认为是非法实体证书。


四、MSP 实践

我们讲,MSP 在 Fabric 中的作用是对用户进行管理。那么,它是怎么实现用户管理与权限认证的呢?

第一,生成相关的证书和签名。

第二,在 Peer,Orderer,Channel 等组件的配置文件设置关于 msp 的相关信心。

也就是说,要想初始化一个 MSP 实例:首先,要生成用户权限管理和签名认证的证书。然后,每一个 peer 节点和 orderer 节点,Channel 等都需要在本地指定其配置。

注意 channel 上的全体成员均参与此过程。

在一个 channel 中,当MSP 的成员管理规则表示一个团体组织组织分工时,该名称会被引用。这又被成为 MSP 标识符或 MSP ID。对于每个 MSP 实例,MSP 标识符都必须独一无二。举个例子:系统 channel 创建时如果检测到两个 MSP 有相同的标识符,那么 orderer 节点的启动将以失败告终。

在实际的操作中如下:

1. 编写 crypto-config.yaml配置文件指定网络的拓扑结构和组织结构。

2. cryptogen-生成秘钥和证书文件。
快速地根据配置自动批量生成所需要的密钥和证书文件。

3. 编写依赖配置文件configtx.yaml。
该文件包含网络的定义,并给出了网络组件的每个网络实体的加密材料的存储位置。

4. configtxgen-生成通道配置。
在这个过程中,会生成系统 channel 的创世纪块。该创世纪块(genesis block)中包含所有 MSP 的验证元素。回忆一下,MSP 验证元素有 MSP 身份标识(MSP identifier),root CAs,intermediate CAs,admin CAs,OU List,CRLs。

5. 在 Peer 节点和 Order 节点配置 MSP 相关的信息
具体步骤会在后面“Fabric 配置管理”中仔细讲解。

下面,对步骤 1 进行简单的说明:

使用 cryptogen 生成所需文件的命令:

$ cryptogen generate \
    --config $GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-
        config.yaml \
    --output crypto-config

上述命令解释如下:
·generate[flags]:生成密钥和证书文件;

其中,generate 子命令支持如下参数:
·–output:指定存放生成密钥和证书文件的路径,默认为当前目录下的 crypto-config 目录;
·–config:指定所采用的配置模板文件的路径。

为了实现对 Peer,Orderer 以及 Channel 的管理,在搭建网络的过程中,我们只需要在它们的配置文件中,配置好相关的证书即可。

拿 Peer 配置为例:

09-HyperLedger-Fabric原理-MSP详解(一)-MSP基础
peer 配置示例

mspConfigPath:MSP 目录所在的路径,可以为绝对路径,或相对配置目录的路径,一般建议为/etc/hyperledger/fabric/msp;

localMspId 关联 Peer 所关联的 MSP 的 ID,一般为组织单位名称,需要与联盟配置中的名称一致。


五、总结

本文

介绍了 MSP 的基本概念:

  • 它是 Fabric 网络中的一个逻辑组件。它是在证书成员联盟签名等基础概念之上,抽象出来的。

介绍了 MSP 的作用:

  • 在 Fabric 网络中,提供用户管理与权限验证的功能。

介绍了 MSP 的基本结构,也就是实现用户管理与权限验证,需要哪些信息才能提供保障。

包括:

  • 根证书列表、组织单元列表、管理员身份证书、撤销证书列表、私钥库、TLS 根证书列表、TLS 中间证书等等。

介绍了实现 MSP 的基本步骤

  • 生成 MSP 证书和它们的签名匙
  • 配置 PEER 和 Orderer
  • 配置 Channel

由此,关于 MSP,我们也有了一个较为宏观的认识。


参考资料:

Hyperledger 系列(十) Fabric MSP 和 Fabric CA 的区别

Hyperledger 系列(十二)MSP 详细介绍

HyperLedger-中文文档-MSP 介绍

《区块链原理、设计与应用》-杨保华-陈昌-12.4 节-权限管理与策略

 

转自知乎 苏小乐 :https://www.zhihu.com/people/shan-de-ding-zhu/activities


露水湾 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:09-HyperLedger-Fabric原理-MSP详解(一)-MSP基础
喜欢 (1)
[]
分享 (0)
关于作者:
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址