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

13 – HyperLedger-Fabric原理-MSP详解(四)-MSP分类与实践

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

最近在研究HyperLedger-Fabric 的组件 MSP,随着时间的推移,对 MSP 的性质和实现渐渐明晰。MSP 在 fabric 网络中,担当权限管理这一大任。但是,MSP 在区块链网络中,出现在了很多的地方,比如 Peer 节点的本地文件,Channel 通道配置。那么,

能否对 MSP 进行一个分类呢?

MSP 在区块链网络中,是如何实现对成员的管理的?

这些疑问将会在本文中逐一解答。

全文将按照如下结构展开:

13 - HyperLedger-Fabric原理-MSP详解(四)-MSP分类与实践
全文结构

一、MSP 存在的意义

任何事物的存在,一定有它的意义。

科学研究的过程,可以简单描述为:提出问题,分析问题,解决问题。

在我们的学习过程中,一般都是直接学的解决方案,而很少去思考为什么会有这样子的解决方案。今天,就让我们来用逆向思维分析一下 msp 存在的意义!

MSP 方案的作用?

它负责区块链网络中对身份的管理和认证。可以对区块链中从成员进行身份验证,还可以生成与验证签名。

MSP 通过什么方式解决了问题?

实现用户的管理与验证涉及到很多的密码学相关的知识。其中包括颁发与校验证书,以及用户认证背后的所有密码学机制与协议。Fabric 设计者,将所有的这些技术,打包成一个逻辑框架,叫做 MSP,从而实现了在工程上,较为方便对用户进行管理和验证。

MSP 要解决的问题是什么?

商业应用场景下,有时会要求区块链中的数据仅仅对区块链中部分成员可见。这就产生了权限管理的需求。所以,MSP 要解决的问题,在区块链网络中实现权限管理。

所以,在软件开发过程中,自始至终是软件需求催生软件实体的产生。


二、MSP 的分类

根据 MSP 出现的位置分类

MSP 出现在区块链网络中的两个地方:Channel 配置(Channel MSP),以及本地(local MSP)。因此,MSP 可以分为:local 和 channel MSPs。

  • localMSP

localMSP,是为节点(peer 或 orderer)和用户(使用 CLI 或使用 SDK 的客户端应用程序的管理员)定义的。每个节点和用户都必须定义一个 localMSP,以便在加入区块链的时候,进行权限验证。

  • channelMSP

channel MSP 在 channel 层面定义管理和参与权。参与 Channel 的每个组织,都必须为其定义 MSP。Channel 上的 Peers 和 orderers 将在 Channel MSP 上共享数据,并且此后将能够正确认证 Channel 参与者。这意味着如果一个组织希望加入该 Channel,那么需要在 Channel 配置中,加入一个包含该组织成员的信任链的 MSP。否则来自该组织身份的交易将被拒绝。

下图是区块链网络中 LocalMSP 以及 ChannelMSP 配置示意图:

其中,P 代表 Peer 节点,C 代表 channel,RCA 表示根证书,ORG 代表组织,B 代表管理员 B。

13 - HyperLedger-Fabric原理-MSP详解(四)-MSP分类与实践
MSP 配置示意图

现在,从上到下来介绍该示意图:

最上面两个蓝色的三角形,分别代表组织 ORG1 和 ORG2。

其中,ORG1 的证书由 RCA1 颁发,ORG2 的证书由 RCA2 颁发。

ORG1 的 MSP 名称为 ORG1.MSP;ORG2 的 MSP 名为 ORG2.MSP,此两者为 LocalMSP。

在椭圆形 C 表示的通道的下面,是 Channel MSP

从上图可知,Channel MSP 包含加入通道的所有组织的 MSP 信息。实际上,Channel MSP 在 channel 中的每个节点的文件系统上,实例化并且通过共识保持同步。也就是说,Channel 通道中的每个节点的本地文件系统上存着每个 channel MSP 的副本。但从逻辑上来看,channel MSP 驻留在 channel 或网络上并由其维护。ChannelMSP 的存在,使得加入通道中的所有节点之间的数据共享。

综上所述:local 和 channel MSP 之间的主要区别不在于它们的功能,而在于它们的范围。

按照 MSP 管理的资源级别分类

channel MSP 和 local MSP 之间的分割,反应了不同类型的 MSP 管理不同的资源。

比如,Local MSP 主要是组织管理其本地资源,如 peer or orderer 节点等;

channel MSP 主要管理 Channel 资源,如 Channel 或网络级别,运营的 ledgers,智能合约和联盟等。

将这些 MSP 视为处于不同级别是有好处的,其中较高级别的 MSP,处理与网络管理有关的问题,而较低级别的 MSP,处理私有资源管理的身份。 MSP 在每个管理级别都是必须的 。按照网络,Channel,peer, orderer 和 users 等资源的等级,可将 MSP 分为以下几类:

  • Network MSP
    • 通过定义参与者组织 MSPs,来定义网络中的成员。同时定义这些成员中哪些成员,有权执行管理任务(例如,创建 Channel)
  • Channel MSP
    • Channel 提供了一组特定的组织之间的私人通信,这些组织又对其进行管理控制。在该 Channel 的 MSP 上下文中的 Channel policies 定义谁能够参与 Channel 上的某些操作,例如添加组织或实例化 chaincodes。
  • Peer MSP
    • 此 Local MSP 在每个 peer 的文件系统上定义,并且每个 peer 都有一个 MSP 实例。从概念上讲,它执行的功能与 Channel MSP 完全相同,限制条件是它仅用于定义它的 peer 上。
  • Orderer MSP
    • 与 peer MSP 一样,orderer local MSP 也在节点的文件系统上定义,并且仅用于该节点。与 peer 节点相似,orderer 也由单个组织拥有,因此只有一个 MSP 来列出其信任的参与者或节点。

如下图所示:

13 - HyperLedger-Fabric原理-MSP详解(四)-MSP分类与实践
msp-level

peer 和 orderer 的 MSP 是本地的,而 Channel MSP 和 Network MSP 在该 Channel 的所有参与者之间共享。

在上图中,网络配置 Channel 由 ORG1 管理,但另一个应用程序 Channel 可由 ORG1 和 ORG2 管理。peer 是 ORG2 的成员,并由 ORG2 管理,而 ORG1 管理 orderer。 ORG1 信任来自 RCA1 的身份,而 ORG2 信任来自 RCA2 的身份。 请注意,这些是管理身份,反映了谁可以管理这些组件。 所以当 ORG1 管理网络时,ORG2.MSP 确实存在于网络定义中。


三、MSP 的实践

在实际的生产环境中,组织与 MSP 存在着多种映射关系,而且,通过设置不同的 MSP,可以达到实现不同的权限控制目的。接下来,将从这两个方面介绍 MSP 的实践:

1.组织与 MSP 之间建立映射关系

通常情况下,建议实际的组织和 MSP 之间建立一一对应关系。当然也可以选择其他类型的映射关系,我们一起来看一下。

  • 一个组织对应多个 MSP 的情况

这种情况是一个组织有多个部门,从方便管理的角度或者隐私保护的角度而言,每个部门都要设置不同的 MSP。每个 Peer 节点只设置一个 MSP,同一组织内不同 MSP 的 Peer 节点之间不能互相认证,这样相同组织的不同部门之间不会同步数据,数据不能共享。

  • 多个组织对应一个 MSP

这种情况是同一个联盟的不同组织之间采用相同的成员管理架构,数据会在不同组织之间同步。在 Peer 节点之间的 Gossip 通信中,数据是在相同通道配置了相同 MSP 的 Peer 节点之间同步的。如果多个组织对应一个 MSP,则数据就不会限制在组织内部,会跨组织进行同步。这种情况我觉得很有应用场景。比如,C9 联盟可以在同一个 MSP 管理下,既能够确保信任的基础,又能够实现数据的共享。

其实这是由 MSP 定义的粒度问题,一个 MSP 可以和一个组织对应,也可以和多个组织对应,还可以和一个组织内部的多个部门对应,根据 MSP 配置好 Peer 节点后,数据同步就限制在了 MSP 定义的范围内。

2.一个组织内部实现不同的权限控制

一个组织内部有多个部门,从而实现不同部门的权限控制。有两种方法可以实现这个场景:

  • 给组织内的所有部门定义一个 MSP

给 Peer 节点配置 MSP 的时候,包含相同的可信根 CA 证书列表、中间 CA 证书、管理员证书,不同的 Peer 节点设置不同的所属部门。节点所属的部门是利用证书和部门之间映射的 OrganizationalUnitIdentifiers 定义的,它包含在 MSP 目录下配置文件“config.yaml”中。按照基于部门验证的方法来定义交易背书策略和通道管理策略,这样就可以实现不同的权限控制了。

这种方法会有一个问题
数据实际还是会在不同的 Peer 节点之间同步。因为 Peer 节点在识别组织身份类型 OrgIdentityType 的时候获取的是 MSP 标识,它会认为通道内相同 MSP 的节点都是可以分发数据的。

  • 给组织内的每个部门单独定义 MSP

给 Peer 节点配置 MSP 的时候,不同部门配置的可信中间 CA 证书、管理员证书可以是不同的,不同部门成员的证书路径也是不同的。这种方式解决了所有部门定义在一个 MSP 中的问题,但是会带来管理上的复杂度。

另外一个办法是每个部门都设置不同的 MSP,利用证书和部门之间映射的 OrganizationalUnitIdentifiers 实现不同部门的权限控制,数据同步仍然会限制在组织的不同部门内,这同样也会有管理上的复杂度


四、总结

本文

开始,从 msp 的作用范围来区分 msp,将其分为 Local MSP 与 Channel MSP 两类。

然后,又从 msp 管理资源的属性来分类,将其分为 Network MSP,Channel MSP,Peer MSP,Orderer MSP。

最后,从实际场景出发, 讨论了 MSP 如何与组织之间配合,实现用户的管理。

参考资料:

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

《深入探索区块链》- 张增骏-8.1 实现成员管理的 MSP

 

 

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


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

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

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

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