Blockchain区块链架构设计之一:成员管理

Blockchain区块链架构设计之一:成员管理

商业化区块链架构里成员管理服务的作用是举足轻重的。成员管理服务为整个区块链网络提供身份管理、隐私、保密和可审计的服务。成员管理服务通过公钥基础设施和去中心化共识机制使得非许可的区块链变成许可制的区块链。

成员管理的架构设计主要参考目标如下:

1.可插拔和可复用: 例如,可以使用自己的CA生成登录凭证,但仍然使用第三方CA的交易凭证作为访问控制和确保交易的不可追溯性。 程序开发者可以选择使用所有、部分或完全不用成员管理提供的功能。

2.使用成熟技术:例如,使用CFSSL(请参阅GitHub - cloudflare/cfssl: CFSSL: CloudFlare's PKI and TLS toolkit)可用来生成登录凭证,同时支持PKCS11和HA。

3.支持多中心化组网:网络可以有多个根CA。

4.支持标准协议: 例如,ACME协议用于发布基于服务器的证书。

为了实现这些目标,成员管理服务需要构建在可重复使用的开发语言库中。

下面展示一个典型的成员管理服务用例,它包含两个部分1)系统命令 2)API

1. MEM命令

配置MEM_HOME环境变量,默认为$ HOME / .mem。

本节分为两部分:服务器和客户端命令。

1.1 MEM服务器命令

1.1.1)mem server init <csrJsonFile>

此命令将创建根MEM服务器的密钥

此命令创建以下两个文件:

a)MEM_HOME / server-cert.pem - 包含服务器的证书

b)MEM_HOME / server-key.pem - 包含服务器的私钥

1.1.2)mem server init <csrJsonFile> -remote <rootMemServerAddress> -u <user:pass>

此命令用于初始化中介成员管理服务器,强烈建议作为最佳实践, 这允许根成员管理服务器的私钥在不需要时脱机,允许撤销损坏的中间成员管理服务器的证书,并发出另一个证书,而不影响根成员管理服务器的证书。

如1.1.1中所述,这还会在MEM_HOME目录中创建server-cert.pem和server-key.pem文件。

1.1.3) mem server start -config <configFile>

启动成员管理服务器

1.2 MEM 客户端命令

1.2.1) mem client enroll <enrollmentID> <OTP> <mem-server-address> [<csrJsonFile>]

使用成员管理服务器注册客户端信息,返回此客户端(区块链节点,app)的登录凭证。

这假设通过在COP服务器的配置文件中预先注册<enrollmentID>,或者由COP注册器首先发出“hfc register”生成针对节点<enrollmentID>的<OTP>(一次性密码) 。

此命令创建以下两个文件:

a)MEM_HOME / client-cert.pem - 包含客户端的证书

b)MEM_HOME / client-key.pem - 包含客户端的私钥

1.2.2) mem client register <rrJsonFile> <mem-server-address>

向MEM服务器注册新客户端标识,返回一次性使用的密码。

1.2.2) mem client init manual <peer-ID> <keyFile> <certFile>

在节点上手动初始化成员管理服务,使用自己的CA颁发的密钥和证书时,可以使用此命令。

例如,如果使用自己的CA颁发的登录凭证,但不想使用交易凭证,可使用此命令手动初始化节点身份信息。

1.2.3) mem client submitJoinRequest <root.pem>

由区块链网络的成员调用另一个参与者加入区块链网络的申请请求。

例如,假设公司C1和C2已经在网络中并且C3想要加入。 C3运行“mem server init”命令来创建root.pem文件。 C3然后将此文件安全发送到C1。在这种情况下,C1充当C3的加入网络的介绍人。假设C1批准C3加入,C1调用这个“mem client submitJoinRequest”命令。同时需要C2也批准。 成员管理服务可通过智能合约通知C2,C2调用“mem client listJoinRequests” 查看谁正在请求加入的域和加入成员的证书以及批准准入的名单。基于这些要素,C2分别使用“mem client approveJoinRequest”或“mem client denyJoinRequest”来批准或拒绝加入请求。

1.2.4) mem client listJoinRequests

列出所有当前加入请求以及唯一的<join RequestId>。

1.2.5) mem client approveJoinRequest <joinRequestId>

允许准入

1.2.6) mem client denyJoinRequest <joinRequestId>

拒绝准入

1.2.7) mem client listParticipants

列出所有区块链网络的参与者

1.2.8) mem client updateJoinPolicy { add | remove | updatePolicy } <policyString>

更新准入策略,policyString可以定制各种“投票”机制

2. MEM APIs

2.1 成员组结构

成员管理服务为区块链网络维护以下层次结构:

1)网络具有多个参与者;

2)参与者可以具有多个地理位置;

3)同一位置可以具有多个服务器(即节点)。

它通过提供两个证书列表得到这个层次结构:消息管理服务和节点服务的证书

它同时具有从每个证书提取参与者和位置ID的规范(可配置)。

默认情况的规则是:

a)参与者ID是发行者的CN;

b)位置ID是来自证书的位置;

成员管理服务需要提供如下支持的API

1)获取节点所有参与者的列表

2)使用策略创建消息签名并收集返回结果



综上,一个好的去中心化架构它的组件也是松耦合的,如上例所述的成员管理服务,可以无缝与各种模块化的区块链框架整合,提供了极佳的便利性,同时基于成熟技术打造了安全、可控的区块链技术平台。
编辑于 2016-11-01