蜗牛讲-fabric原理之MSP介绍

什么是MSP

在区块链网络中用于颁发和验证证书和身份的一组加密机制和协议。是一个可插拔的接口。

理论上讲,可以通过以下组件来定义一个MSP:

身份格式,或是说证书,有时还带有一个产生身份的算法

一种签名算法,利用与身份相关的秘钥和消息,生成一组byte数组(实际上就是签名),这组byte数组也和该身份唯一绑定。

一种签名验证算法,算法的输入为身份,消息和签名(bytes数组),如果签名数组对于输入消息是一个有效的签名,那么输出是“接受”,否则就是“拒绝”

一组规则。对于MSP来说,满足这个规则的身份必须是一个有效的身份

一组admin身份集合,用于修改MSP指定的一些配置

一个区块链网络中可以管理一个或是多个MSP。对于很多MSP来说,前面三点是比较通用规则,4和5对于不同的MSP会有所变化。从这个角度看,Fabric-CA也算是一个MSP。而官网提供的first-network,没有用到Farbic-CA,用的是localMSP。

使用MSP

这里列举一个节点侧的典型MSP场景。注意这里的节点在网络中不涉及到身份发布流程,只限制于客户端的背书请求,客户端身份验证和客户端身份签名验证三个过程。

在这个场景中,身份(id)具有X.509证书格式,由一个明确的根CA颁发。根据证书秘钥,签名和签名验证算法都是基于ECDSA或是RSA(取决于生成证书时候的设置的算法),身份的验证主要包含有:

通过可信的根CA,验证证书链是否正确

确保身份没有被吊销,这个可以通过在msp启动阶段配置吊销列表或是MSP身份白名单实现

节点签名能力

Orderer节点,peer节点都需要有签名能力,为了实现这个,节点的管理员要在节点设置的时候指定MSP的配置。由于此处包含的MSP实例仅用于实例化节点的签名标识,因此我们通过SignerMSP引用此MSP。签名者MSP是可以被管理员手动更改,所以可以在各个节点之间变化。如果需要设置签名者MSP,需要将下面四组文件复制到节点文件系统中的专用位置,四组文件为:

Cacert – PEM文件,MSP的根证书

Admincerts – PEM文件,MSP的管理员证书

Keystore-节点的签名私钥

Signcerts – PEM文件,节点身份的编码证书,fabric有四种身份:user,peer, orderer,client

如下为peer相关证书文件对应的目录

|——org1.example.com组织名称

|

|——-ca组织的根证书

|

|——-msp组织的msp

|

|——-peers节点相关证书

|

|——-tlsca组织内部的tlsca证书

|

|——-users组织所属用户

链的参与者

链的创世块必现包含有链的参与者的MSP说明。如果一个MSP涵盖了多条链,那么需要维护每条链上的MSP状态。这是为了避免重新配置不一致攻击,所谓的重新配置不一致攻击是指通过每个组织的MSP的重新配置交易信息到达每个链的顺序不一致导致,这样就会出现在一定时间内,同一个管道内的节点MSP信息不一致情况。

我们一般定义一个MSP都是基于链或管道的上下文。这是为了orderer节点和peer节点可以对这条链上或是这条管道内的所有交易签名者,背书者,管道的广播和链或是管道创建,终止等请求进行认证。

特别是在orderer的系统管道中指定的MSP允许策略规范去管理以下请求:管道读请求(认证,验证管道的delivery请求),写请求(认证和验证管道广播请求),链的创建者(鉴定链的创建请求)和管理员(认证和验证管道配置请求)。可以看出,链中的MSP具有验证者身份,和本地提供的MSP提供的签名者形成对比。更具体的说,peer和orderer在系统管道和链的上下文设置MSP是为了认证交易和配置相关的请求,这里的MSP不提供生成签名的能力。

Peer和orderer节点可以验证由多个MSP颁发的身份签名。为了方便实现这点,fabric引入了MSP管理者概念。Fabric组件中的MSPManager接口可以在链设置阶段或是orderer管道启动时候被创建一个或是多个实例,使用这些MSP管理者来验证交易签名。MSPManager接口的引入给fabric带来了几个重要优势:

可以插拔的MSP

同时支持多个MSP提供者

隐藏了单一MSP和MSP架构内部复杂性

MSPManager使用链的配置块信息来实例化MSP,如下图所示

蜗牛讲技术,满满的都是干货,你值得关注。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180708G0SEDH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券