什么是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,如下圖所示
蝸牛講技術,滿滿的都是干貨,你值得關注。