什麼是MSP算法
在區塊鏈網絡中用於頒發和驗證證書和身份的一組加密機制和協議。是一個可插拔的接口。數組
理論上講,能夠經過如下組件來定義一個MSP:網絡
身份格式,或是說證書,有時還帶有一個產生身份的算法架構
一種簽名算法,利用與身份相關的祕鑰和消息,生成一組byte數組(實際上就是簽名),這組byte數組也和該身份惟一綁定。區塊鏈
一種簽名驗證算法,算法的輸入爲身份,消息和簽名(bytes數組),若是簽名數組對於輸入消息是一個有效的簽名,那麼輸出是「接受」,不然就是「拒絕」編碼
一組規則。對於MSP來講,知足這個規則的身份必須是一個有效的身份加密
一組admin身份集合,用於修改MSP指定的一些配置url
一個區塊鏈網絡中能夠管理一個或是多個MSP。對於不少MSP來講,前面三點是比較通用規則,4和5對於不一樣的MSP會有所變化。從這個角度看,Fabric-CA也算是一個MSP。而官網提供的first-network,沒有用到Farbic-CA, 用的是localMSP。blog
使用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,以下圖所示
蝸牛講技術,滿滿的都是乾貨,你值得關注。