Hyperledger Fabric 2.5.4开发之MSP组件
  iwbGD3gmtxyT 2023年11月02日 88 0

[阅读提示]

在了解了Hyperledger Fabric联盟链整体架构后,其中的安全机制可以说是最复杂的部分,其涉及的组件涉及架构的每一层。本文假设读者已经了解了CA组件与身份(Identidity,结合文后引用出处)概念后;否则,学习MSP部分有一定难度(但仔细分析其中的类比举例是把握此中要领的一个诀窍)。

一、为什么需要MSP?

因为Fabric是一个许可性的网络, 所以区块链参与者需要一种向网络中的其他参与者证实自己身份的机制从而在网络中进行交易。如果你已经阅读过官方文档身份一节内容,你会看到公钥基础结构如何通过信任链提供可认证的身份信息。那么,区块链网络是怎么应用信任链的?

证书机构(CA)通过生成可以用来证实身份的由公钥和私钥形成的键值对来发放认证信息。这种身份需要一种被网络识别的方式,而这正是MSP出现的原因。

例如,一个peer节点用它的私钥进行数字签名或背书交易。MSP用于检查peer节点是否被允许认可交易(即对此交易进行签名/背书)。然后使用peer节点证书中的公钥来验证附加到交易的签名是否有效。因此,MSP是允许该身份被网络的其他部分信任和识别的机制。

回想一下,同样是身份认证相关的信用卡场景,证书颁发机构(CA)就像一个信用卡提供商,它分发许多不同类型的可验证的身份。另一方面,MSP确定商店接受哪些信用卡提供商。通过这种方式,MSP将一个身份(信用卡)转换为一个角色(在商店购买东西的能力)。

这种将可验证身份转换为角色的能力是Fabric网络功能的基础,因为它给予组织、节点和通道建立MSPs的能力,使其确定谁可以在组织、节点和通道层次上运作。

Hyperledger Fabric 2.5.4开发之MSP组件_区块链

Identities类似于你的信用卡,用来证明你可以支付;MSP类似于被商店接受的信用卡清单。

以运用区块链网络的银行联盟为例。各个银行操作peer节点和排序节点,并且这些peer节点对提交到网络的交易进行背书。然而,每个银行也会有部门和账户持有人。帐户持有人将属于各个组织,但不会运行网络上的节点,他们只会通过移动电话或web应用程序与系统交互。那么网络如何识别和区分这些身份呢?于是一个CA用于创建身份,但就跟信用卡的例子一样,这些身份不能就这样被颁发,它们需要被网络识别。MSPs被用于定义哪些是受网络成员信任的组织。MSPs也是在网络中为成员提供一系列角色和权限的机制。因为定义这些组织的MSPs是网络成员所知道的,所以可以使用这些MSP来验证是否允许网络对象试图执行的操作。

最后,考虑一下如果您想要加入一个现有的网络,您需要一种方法来将您的身份转换为可以被网络识别的东西。MSP是一种机制,使您能够加入一个需要许可的区块链网络。

总结来看,要在Fabric网络上进行交易,成员需要这样做:


  1. 拥有一个由组织信任的CA颁发的身份。组织MSP确定组织信任哪些CA。
  2. 检查组织MSP是否已经被添加到一个通道中,这意味着,该组织已经得到网络成员认可和批准。
  3. 确保MSP包括在网络中的策略定义。

二、MSP是什么?

尽管取着这样的名字,但是实际上成员服务提供者并不提供任何东西。相反,MSP要求的实现是把一组文件夹添加到网络的配置中,从而内部地(组织决定它的管理员是谁)和外部地(通过允许其他组织验证对象是否有权做他们正在试图做的事情)定义一个组织。尽管证书颁发机构生成代表身份的证书,但MSP中仍然会包含一个被允许的身份的列表。

MSP通过列出其成员的身份,或通过识别哪些CA被授权为其成员颁发有效身份,来识别接受哪些根CA和中间CA来定义信任域的成员。

但是,MSP的能力不仅仅是简单地[1]列出谁是一个网络参与者或一个通道的成员,MSP还能够通过标识参与者在节点或通道上拥有的特定特权,实现[2]将身份转换为角色。请注意,当用户使用Fabric CA注册时,该用户必须关联到6种角色(管理员、peer节点、客户端、排序节点或成员)之一。例如,注册为“peer”角色的身份应该自然而然地给到peer节点。同样,注册为“admin”角色的身份也应该被授予给组织管理员。我们将在文章节后面深入探讨这些角色的重要性。

此外,MSP可以识别被撤销的身份列表,后面我们将讨论该过程如何扩展到MSP。

三、MSP类型

在区块链网络中,MSP出现在两个位置:


  • 在参与者节点本地(本地MSP
  • 在通道配置中(通道MSP

本地MSP和通道MSP之间的关键区别不在于它们如何运作——它们都将身份转化为角色——而是它们的范围。每个MSP列出特定管理级别上的角色和权限。

(一)本地MSP

本地MSP是为客户端和节点(peer节点和排序节点)定义的。 本地MSP定义节点的权限(例如,谁是可以操作节点的peer节点管理员)。客户的本地MSP(上述银行场景中的账户持有人)允许用户在其交易中作为通道的成员(例如,在链码交易中)或作为系统中特定角色的所有者(例如,配置交易中的组织管理员)进行身份验证。

每个节点都必须定义一个本地MSP,因为它定义了在该级别上谁拥有管理权或参与权(peer节点管理员不一定是通道管理员;反之亦然)。这允许在通道上下文之外对成员消息进行身份验证,并定义特定节点(例如,能够在peer节点上安装链码的节点)的权限。请注意,一个组织可以拥有一个或多个节点。MSP定义了组织管理员。组织、组织的管理员、节点的管理员以及节点本身都应该具有相同的信任根。

排序节点的本地MSP也在节点的文件系统上定义,并且只应用于该节点。与peer节点一样,排序节点也由单个组织拥有,因此有一个单独的MSP来列出它信任的参与者角色或节点。

(二)通道MSP

相比之下,通道MSP在通道层面上定义了管理权和参与权应用程序通道上的peer节点和排序节点共用通道MSP的相同视图,因此能够正确地对通道参与者进行身份验证。这意味着,如果组织希望加入通道,则需要在通道配置中添加包含组织成员信任链的MSP;否则,来自该组织身份的交易将被拒绝。本地MSP表现为文件系统上的文件夹结构,而通道MSP则在通道配置中被描述。

Hyperledger Fabric 2.5.4开发之MSP组件_联盟链_02

从通道配置config.json文件中截取片段,其中包括两个组织MSP

通道MSP识别谁在通道层次拥有权限。 通道MSP定义通道成员(本身是MSP)的身份和通道级策略的执行之间的关系通道MSP包含通道成员组织的MSP。

每个参与通道的组织都必须为其定义一个MSP。事实上,建议在组织和MSP之间建立一对一的映射。MSP定义了哪些成员被授权代表组织行事。这包括MSP本身的配置以及批准组织进行具有管理角色权限的任务,例如向通道添加新成员。如果所有网络成员都是单个组织或MSP的一部分,那将没有数据隐私。多个组织通过将账本数据仅隔离给通道成员来促成隐私保护。如果组织内部需要更细的隔离粒度,则可以将组织进一步划分为组织单元(ou:organizational unit),我们将在本文节后面详细描述这些单元。

通道MSP包括通道上所有组织的MSP。这不仅包括拥有peer节点并调用链代码的“peer组织”,还包括拥有并运行排序服务的组织。

本地MSP仅在其应用的节点或用户的文件系统上定义。因此,在物理上和逻辑上,每个节点只有一个本地MSP。然而,由于通道MSP对通道内的所有节点都可用,所以,它们在通道配置中逻辑上仅需定义一次。

然而,通道MSP也在通道中的每个节点的文件系统上实例化,并通过共识保持同步。因此,尽管每个节点的本地文件系统上都有每个通道MSP的副本,但从逻辑上讲,通道MSP存在并被维护于通道或网络上。

下图说明了本地MSP和通道MSP在网络中是如何共存的:

Hyperledger Fabric 2.5.4开发之MSP组件_Fabric_03

在该图中,ORG1拥有连接到通道的排序节点。与ORG1相关的MSP,即节点的本地MSP和在通道上正式表示ORG1的全局MSP,已由ORG1的CA RCA1创建。Peer组织ORG2也有一个用于其Peer的本地MSP和另一个在通道上代表ORG2的全局MSP。ORG1和ORG2都是通道成员,在各自的管理领域管理通道,并信任彼此的CA创建的身份。请注意,在生产场景中,可能会有多个Peer组织在通道管理中进行协作,也可能存在多个排序组织。

四、组织在MSP中的角色是什么?

组织是一个逻辑上成员们的管理组。它可以大到一家跨国公司,也可以小到一家花店。关于组织(或orgs)最重要的是:组织在单个MSP下管理其成员。MSP允许将标识链接到组织。注意,这与我们前面提到的组织概念中定义的X.509证书不同。

组织和它的MSP之间的专属关系使得以组织的名字为前缀命名MSP是合乎情理的,大多数策略配置都会采用这种约定。例如,组织ORG1可能有一个类似于ORG1-MSP的MSP。在某些情况下,一个组织可能需要多个成员组——例如,在组织之间使用通道执行完全不同的业务功能。在这些情况下,有多个msp并据此约定命名它们是有意义的,例如,ORG2-MSP-NATIONALORG2-MSP-GOVERNMENT,反映了与政府(GOVERNMENT)监管渠道相比,ORG2在国家(NATIONAL)销售渠道中不同的成员资格信任根。

(一)组织单元(ou)和MSP

一个组织也可以被划分为多个组织单元,每个单元都有一定的职责,也称为affiliations可以将组织单元看作组织内部的一个部门。例如,ORG1组织可能同时拥有ORG1.MANUFACTURINGORG1.DISTRIBUTION组织单元,这反映了相隔离的业务流水线。当CA颁发X.509证书时,证书中的OU字段指定该身份所属的业务流水线。这样使用组织单元的一个好处是,这些值可以用于定义策略,以限制访问,或者用于基于属性的访问控制的智能合约。否则,就需要为每个组织创建单独的MSP。

OU字段是否指定是可选的。如果不使用ou, MSP中的所有身份(由根CA和中间CA文件夹认定的)都将被视为组织的成员。

(二)节点组织单元角色和MSP

此外,还有一种特殊类型的组织单元,有时称为节点组织单元,可用于授予角色以身份标识。这些节点组织单元角色定义在$FABRIC_CFG_PATH/msp/config.yaml配置文件中,并包含一个组织单元列表,这些单元成员被认为是MSP所代表的组织的一部分。当您希望将组织成员限制为只具有特定节点组织单元角色的身份标识时(由MSP指定的其中一个CA进行签名),这一点特别有用。例如,通过节点组织单元,您可以实现更细粒度的背书策略,该策略要求Org1的peer节点(而不是Org1的任何成员)为交易背书。

为了使用节点组织单元角色,您必须为网络启用“身份分类”特性。使用文件夹形式的MSP时,这可以通过在MSP目录下的配置文件config.yaml中启用“Node OUs”字段来实现:

NodeOUs:
  Enable: true
  ClientOUIdentifier:
    Certificate: cacerts/ca.sampleorg-cert.pem
    OrganizationalUnitIdentifier: client
  PeerOUIdentifier:
    Certificate: cacerts/ca.sampleorg-cert.pem
    OrganizationalUnitIdentifier: peer
  AdminOUIdentifier:
    Certificate: cacerts/ca.sampleorg-cert.pem
    OrganizationalUnitIdentifier: admin
  OrdererOUIdentifier:
    Certificate: cacerts/ca.sampleorg-cert.pem
    OrganizationalUnitIdentifier: orderer

在上述例子中, MSP有4种节点组织单元角色:

  • client
  • peer
  • admin
  • orderer

这个约定允许您根据X509证书的CommonName属性中显示的OU来区分MSP角色。上面的示例说明由cacerts/ca.sampleorg-cert.pem颁发的任何证书,字段OU=client的将被认定为客户端,字段OU=peer的将被认定为peer,以此类推。从Fabric的1.4.3版本开始,还有一个用于排序节点和管理员的OU。新的admins角色意味着:您不再需要显式地将证书放置在MSP目录下的admincerts文件夹中。相反,用户的signcert文件夹结构中呈现的admin角色使其具有管理员用户的身份标识。

当使用Fabric CA或SDK注册带有CA的用户时,这些角色和OU属性会被分配给一个身份标识。随后enroll用户命令会在用户的/msp文件夹中生成证书。

Hyperledger Fabric 2.5.4开发之MSP组件_MSP_04

生成的角色和OU属性在位于/signcerts文件夹中的X.509签名证书中可见。ROLE属性被标识为hf.Type,其指的是参与者在其组织中的角色(例如,指定参与者是一个peer节点)。请参阅以下来自签名证书的代码片段,它显示了角色和ou在证书中是如何表示的。

Hyperledger Fabric 2.5.4开发之MSP组件_区块链_05

注意: 对于通道MSP,仅仅只是某个参与者具有管理员的角色的话,是不能意味着他们就可以管理特定的资源的。给定的身份标识在管理系统方面的实际权力由管理系统资源的 策略 决定。例如,通道策略可能指定ORG1-MANUFACTURING管理员,即具有admin角色和ORG1-MANUFACTURING节点组织单元的身份,使其有权向通道添加新组织,而ORG1-DISTRIBUTION管理员则没有这样的权限。

最后,联盟中的不同组织可以使用组织单元来区分彼此。但在这种情况下,不同的组织必须为其信任链使用相同的根CA和中间CA,并分配OU字段来标识每个组织的成员们。当每个组织都拥有相同的CA或信任链时,这使得系统比预期中的更加中心化,因此这在区块链网络上应该仔细考虑!!!

五、MSP结构剖析

最后,让我们来分析一下我们迄今为止描述的这些功能的MSP元素间的关系。

一个本地MSP文件夹将包含以下子文件夹内容:

Hyperledger Fabric 2.5.4开发之MSP组件_联盟链_06

上图显示了本地MSP在文件系统中的子文件夹结构:

  • config.yaml: 通过启用“Node OUs”和定义可接受的角色来配置Fabric中的身份分类特性。
  • cacerts: 此文件夹包含此MSP代表的组织所信任的根CA的自签名X.509证书列表。此MSP文件夹中必须至少有一个根CA证书。
    这是最重要的文件夹,因为它确定了派生所有其他证书的必要CA,拥有这些证书才能被视为对应组织的成员,从而形成信任链。
  • intermediatecerts: 此文件夹包含该组织所信任的中间CA的X.509证书列表。每个证书必须由MSP中的一个根CA,或者其本身颁发的CA链最终会指向一个受信任的根CA的任何中间CA,进行签名。
    一个中间CA可能代表组织的不同细分(如ORG1-MANUFACTURINGORG1-DISTRIBUTION对应于ORG1),或者组织本身(如果商业CA被用于组织的身份管理,则可能是这种情况)。在后一种情况下,中间CA可以用来表示组织的细分。你可以从这个链接处找到关于MSP配置的最佳实践的更多信息。请注意,一个正常工作的网络可能没有中间CA,在这种情况下,这个文件夹将是空的。
    与根CA文件夹一样,该文件夹也定义了CA,且证书必须从该CA颁发,才能被视为组织的成员。
  • admincerts (在Fabric的1.4.3及以上版本被弃用): 此文件夹包含一个身份列表,这些身份定义了具有此组织管理员角色的参与者。通常,这个列表中应该有一个或多个X.509证书。
    注意: 在Fabric v1.4.3之前,管理员是通过显式地将证书放在peer节点本地MSP目录的admincerts文件夹中来被定义的。Fabric的1.4.3及以上版本不再需要此文件夹中的证书。 相反,建议在用户注册到CA时,使用admin角色来指定节点管理员。然后,该标识被节点OU角色在它们的signcert中识别为admin。提醒一下,为了使用管理员角色,必须在以上的config.yaml配置文件中,通过将“Node OUs”设置为Enable: true来启用“identity classification”特性。我们稍后将进一步探讨这个问题。
    提醒一下,对于通道MSP,仅有参与者具有管理员角色这个条件,并不能说明他们可以管理特定的资源。给定身份在管理系统中拥有的实际权限是由管理系统资源的 策略 决定的。例如,通道策略可能指定ORG1-MANUFACTURING管理员拥有向通道添加新组织的权限,而ORG1-DISTRIBUTION管理员没有这样的权限。
  • keystore: (私钥) 这个文件夹是为peer节点或排序节点的本地MSP(或客户端的本地MSP)定义的,其包含节点的私钥。此私钥用于签名数据——例如,作为背书阶段的一部分,用其签名交易提案响应。
    此文件夹对于本地MSP是强制性的,并且必须准确地包含一个私钥。显然,对该文件夹的访问必须仅限于对peer节点负有管理责任的用户。
    通道MSP配置不包含此文件夹,因为通道MSP仅提供身份验证功能,而不提供签名功能!!!
    注意: 如果您使用硬件安全模块(HSM)进行私钥管理,此文件夹将为空,因为私钥由HSM生成并存储在HSM中。
  • signcert: 对于 Peer 节点或排序节点(或在客户端的本地 MSP 中),此文件夹包含 CA 发行的节点签名密钥。该证书表明节点的身份,与这个证书相对应的私钥可以用于生成签名,并且该签名可以被任何拥有这个证书的人验证。
    此文件夹对于本地 MSP是强制性的,并且必须包含一个准确的公钥。显然,对该文件夹的访问必须仅限于对 Peer 节点负有管理责任的用户。
    通道 MSP的配置不包含此文件夹,因为通道MSP仅提供身份验证功能,而不提供签名功能。
  • tlscacerts: 此文件夹包含受此组织信任的根CA的自签名X.509证书列表,用于进行节点之间基于TLS的安全通信。TLS通信的一个例子是peer节点需要连接到排序节点,以便它能接收到账本更新数据。
    MSP和TLS信息与网络内的节点相关——peer节点和排序节点,换句话说,而不是与使用网络的应用程序和管理程序相关。
    此文件夹中必须至少有一个TLS根CA证书。有关TLS的更多信息,请参见使用传输层安全协议(TLS)保护通信
  • tlsintermediatecacerts: 此文件夹包含一个受该MSP所代表的组织信任的中间CA证书列表,用于进行节点之间基于TLS的安全通信。当商业CA被用作一个组织的TLS证书时,此文件夹特别有用。与成员资格中间CA类似,TLS中间CA的指定是可选的。
  • operationscerts: 此文件夹包含与Fabric运维服务API通信所需的证书。

最后,一个通道MSP还包含以下附加文件夹:

  • Revoked Certificates: 如果参与者的身份被撤销,关于该身份的识别信息——而不是身份本身——会被保存在这个文件夹中。对于基于x.509的身份,这些标识符是被称为Subject Key Identifier(SKI)和Authority Access Identifier(AKI)的字符串对,并且在使用证书时被检查,以确保证书没有被撤销。
    尽管这个列表在概念上与CA的证书撤销列表(CRL)相同而已,但它也与组织成员的撤销有关。因此,通道MSP的管理员可以通过发布CA的更新过的CRL,快速从组织中撤销参与者或节点。这个“撤销列表中的列表”具有可选择性。只有当证书被撤销时,它才会被填充。

如果你读过这个文档以及官方关于身份的文档,你应该对身份和成员在 Hyperledger Fabric 中的作用有了很好的理解。您了解了如何使用 PKI 和 MSP 来识别在区块链网络中协作的参与者。您学习了证书、公钥、私钥和信任根的工作原理,以及 MSP 的物理和逻辑结构。

参考




【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
iwbGD3gmtxyT