什么是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,如下图所示
蜗牛讲技术,满满的都是干货,你值得关注。
领取专属 10元无门槛券
私享最新 技术干货