什么是身份identity?
在区块链中有很多角色actor,例如peers,orderers, client applications, administrators等。他们都区块链里扮演者不同的角色,同时也拥有不同的数字身份(封装在x.509数字证书中,至于x.509是什么,不知道,后面再说)。这些身份的重要意义在于:精确确定每一个角色在区块链中的权限和资源。
(一个小概念: a principal =一个ID+它的一些属性,例如单位,部门职责,特殊身份)
我们对于一个系统参与者的身份有两点要求:
1)一个身份必须是可以验证的。不能让它说自己是谁就是谁,它的来源必须是一个可信的authority,例如,hyperledger fabic里面的membership service provider(MSP,用的是传统的PKI架构和x.509证书做身份,后面再说)。
2)一个身份必须是符合验证要求的。每一个系统都有自己的身份政策,来决定什么样的身份可以是符合要求的。在fabric里面,PKI就像是产生身份的authority,它可以生成许多可验证的身份(简单理解就是为一个参与者产生证书的公私钥对),可是它们生成了却不一定都会被fabric接受,因为MSP才是制定身份政策的那个,只有通过MSP验证的身份拥有者才能成为区块链的成员。
PKI是什么
PKI,公钥架构,在网络中提供安全通信的技术,让HTTP变成HTTPS的男人!
PKI = digital certificates + public/private keys + certificate authorities + certificate revocation lists.
1)Digital certificates很好理解,就是能够代表一个人身份和特征的文件,比如x.509标准。它就像人的ID卡,可以用来证明和自己相关的身份信息。
2) 公私钥对不用说
3)Cerfiticate authority,专门给各种人发数字证书,获得证书之后就可以用来证明自己的身份了。CA是一个加密机器,人们把自己的隐私信息给它,它还你一个不可以伪造的数字身份,像身份证发放机构一样。
4) 一个certificate revocation list(CRL)记录已经失效的证书。失效的原因很多,比如和证书相关的隐私材料泄露了。
几个和PKI相关的概念
1)Authentication:认证,是一个比验证要大的概念。认证就是验证数据的完整性,也就是数据是不是发起人发送的,是不是没有被改过,这个过程通常可以用数字签名来完成,这个比较基础,这里不提。
2)值得一提的是CA的分级,root CA和intermediate CA有区别。
Root CA负责将大量证书发布给网络用户,工作量很大,需要借助中介intermediate CA。
Intermediate CA的证书可以是root CA发的,也可以是其他intermediate CA发的,只要有一个信任链chain of trust就可以。
这个分级结构在permmisioned blockchian里其实很实用,比如fabric就有内置的CA结构。fabric CA是一个私有root CA,管理成员的身份(x.509证书),它不支持SSL证书,不过基本的证书管理功能它都有。
成员资格membership
PKI通过一系列信任链建立可验证的身份,满足身份的第一个可验证性的要求了,那它又是如何代表区块链中的成员的呢?
就靠MSP啦,它来识别哪些个体是root CA、intermediate CA、是可以信任的成员。它要么就是列出成员表,要么找到可以为成员建立身份的CA。MSP不仅有全员名单,还知道每个身份在网络中的角色。
Fabric 里的MSP
MSP的配置是全信道广播的,不仅如此,每个成员,不管你是peers还orderer,都有local MSP,管理和认证channel之外的成员消息。
一个组织organization成员数可多可少,一般有一个MSP,有时候也可以有多个子MSP负责不用的组织单元organizational unit OUs。还有的时候,一个MSP可以负责一个联盟中的一个组织成员,不过不同组织都用同样的root CA和intermediate CA,有点乱。
LOCAL 和 Channel MSPs
MSP就这两种形式,建立channel的时候配置channel MSP,和一个角色本地维持的local MSP,比如client和nodes。后者记录的是node的权限,在交易或建立channel的时候提供node认证信息或者扮演一种角色的拥有者。local MSP是必每个节点必须有的。而channel MSP的管理权限是channel级的,channel的参与者都要有建立channel的MSP权限。
他俩都是把身份转化成角色的,但是作用范围不一样。本地的身份有local MSP负责,理论上每个节点都只有一个local MSP。假如小李想通过peer1在区块链上放一段智能合约,小李在安装合约的时候,peer1就会在local MSP验证小李的权限,有权限才让安装。而channel MSP不一样,假如小李想要假如一个channel,channel的所有成员必须先要同意,那peer1就要一一查看channel节点的MSPs,确保可以加入。channel MSP是几个节点同步的,在channel建立的时候配置好,存在节点上但是一直通过共识进行同步。
按照级别来划分,MSP可以分为network MSP, Channel MSP, Peer MSP, orderer MSP,高级别的负责的管理任务更高级,比如network MSP就定义网络中完成管理任务者的身份,而比如orderer MSP就定义了可以被节点信任的身份
MSP的结构
MSP的九个组成部分
root CA:组织信任的root CA的x.509证书清单,证书必须是MSP的root或它为根的intermediate CA签过的。
intermediate CA:组织信任的intermediate CA的x.509证书清单,证书必须是MSP的root或它为根的intermediate CA签过的。
organizational units:这个MSP代表的组织成员的标志
administrators:管理这个组织的角色的身份,至于管理的权限是有具体管理策略规定的。
revoked Certificates:和CRL很像,记录吊销的证书的身份信息
node identity:节点的身份,让节点可以证明自己身份的密码信息:
private key:用来签名的密钥,和node identity匹配
TLS root CA、TLS intermediate CA:在TLS通信的时候用的证书。
主要参考资料和图的来源: hyperledger fabric的白皮书
https://hyperledger-fabric.readthedocs.io/en/release-1.4/membership/membership.html