蜗牛讲-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,如下图所示

 

 

 

 

 


 

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

 

posted @ 2019-03-06 20:20  shaotine  阅读(2528)  评论(0编辑  收藏  举报