fabric 1.3之使用Identity Mixer實現MSP
一,什麼是Idemix
Idemix是一個加密協議套件,它提供強大的身份驗證以及隱私保護功能,如匿名,無需披露交易者身份即可進行交易,以及不可連結性,即單個身份傳送多個交易的能力,而不會洩露 交易是通過相同的身份傳送的。
Idemix流中涉及三個參與者:使用者,發行者和驗證者。

Identity Mixer Overview
- 發行者證明一組使用者的屬性以數字證書的形式釋出,以下稱為“憑證”。
- 使用者稍後生成擁有憑證的“零知識證明”,並且還選擇性地僅公開使用者選擇顯示的屬性。 因為證明是零知識,不會向驗證者,發行者或任何其他人顯示其他資訊。
例如,假設“愛麗絲”需要向鮑勃(店員)證明她擁有由DMV發給她的駕駛執照。
在這種情況下,Alice是使用者,DMV是發行者,Bob是驗證者。 為了向鮑勃證明愛麗絲有駕駛執照,她可以向他展示。 然而,Bob可以看到Alice的姓名,地址,確切的年齡等等 - 比Bob需要了解的資訊更多。 相反,Alice可以使用Idemix為Bob生成“零知識證明”,只顯示她擁有有效的駕駛執照而沒有其他任何內容。
所以從證明來看:
- 除了擁有有效許可證(匿名)之外,Bob不會了解有關Alice的任何其他資訊。
- 如果Alice多次訪問商店並且每次為Bob生成證據,Bob將無法從證據中判斷出它是同一個人(不可連結性)。
Idemix身份驗證技術提供的信任模型和安全保證類似於標準X.509證書所確保的信任模型和安全保證,但具有有效提供高階隱私功能的基礎加密演算法,包括上述隱私功能。 我們將在下面的技術部分詳細比較Idemix和X.509技術。
二、 如何使用Idemix
要了解如何將Idemix與Hyperledger Fabric一起使用,我們需要檢視哪些Fabric元件與Idemix中的使用者,頒發者和驗證者相對應。
- Fabric Java SDK是使用者的API。 將來,其他Fabric SDK也將支援Idemix。
- Fabric提供了兩個可能的Idemix發行者:Fabric CA適用於生產環境或開發,以及 用於開發環境的idemixgen工具。
- 驗證者是Fabric中的Idemix MSP。
要在Hyperledger Fabric中使用Idemix,需要以下三個基本步驟:

Screen Shot 2018-10-15 at 5.43.00 PM.png
比較此圖中的角色與上面的角色。
-
1.發行者
Fabric CA(版本1.3或更高版本)已得到增強,可自動充當Idemix頒發者。 當fabric-ca-server啟動(或通過fabric-ca-server init命令初始化)時,將在fabric-ca-server的主目錄中自動建立以下兩個檔案:IssuerPublicKey和IssuerRevocationPublicKey。 這些檔案在步驟2中是必需的。
對於開發環境,如果您不使用Fabric CA,可以使用 idemixgen
來建立這些檔案。
-
2.驗證者
您需要使用步驟1中的IssuerPublicKey和IssuerRevocationPublicKey建立Idemix MSP。
例如,請考慮以下摘錄自Hyperledger Java SDK示例中的configtx.yaml( ofollow,noindex">https://github.com/hyperledger/fabric-sdk-java/blob/master/src/test/fixture/sdkintegration/e2e-2Orgs/v1.3/configtx.yaml ):
- &Org1Idemix # defaultorg defines the organization which is used in the sampleconfig # of the fabric.git development environment name: idemixMSP1 # id to load the msp definition as id: idemixMSPID1 msptype: idemix mspdir: crypto-config/peerOrganizations/org3.example.com
msptype設定為idemix,mspdir目錄的內容(本例中為crypto-config / peerOrganizations / org3.example.com / msp)包含IssuerPublicKey和IssuerRevocationPublicKey檔案。
請注意,在此示例中,Org1Idemix表示Org1的Idemix MSP(未顯示),它也具有X509 MSP。
-
3.使用者
考慮使用者。 回想一下,Java SDK是使用者的API。為了將Idemix與Java SDK一起使用,只需要一個額外的API呼叫:org.hyperledger.fabric_ca.sdk.HFCAClient類的idemixEnroll方法。 例如,假設hfcaClient是您的HFCAClient物件,x509Enrollment是與您的X509證書關聯的org.hyperledger.fabric.sdk.Enrollment。
以下呼叫將返回與您的Idemix憑據關聯的org.hyperledger.fabric.sdk.Enrollment物件。
IdemixEnrollment idemixEnrollment = hfcaClient.idemixEnroll(x509enrollment, "idemixMSPID1");
另請注意,IdemixEnrollment實現了org.hyperledger.fabric.sdk.Enrollment介面,因此可以使用與使用X509註冊物件相同的方式,當然,這會自動提供Idemix的隱私增強功能。
三、Idemix和chaincode
從驗證者的角度來看,還有一個要考慮的角色:鏈碼。 使用Idemix憑證時,鏈碼可以瞭解有關交易者的資訊嗎?
當使用Idemix憑證時,cid(客戶端標識)庫(僅用於golang)( https://github.com/hyperledger/fabric/tree/master/core/chaincode/shim/ext/cid )已擴充套件為支援GetAttributeValue函式。 但是,正如下面“Current limitations”部分所述,Idemix案例中只公開了兩個屬性:ou和role。
如果Fabric CA是憑證頒發者:
- ou屬性的值是身份的隸屬關係(例如“org1.department1”);
- role屬性的值將是“member”或“admin”。 值“admin”表示該標識是MSP管理員。 預設情況下,Fabric CA建立的標識將返回“成員”角色。 要建立“admin”標識,請使用role屬性和值2註冊標識。
四、Current limitations
Idemix的當前版本確實存在一些限制。
-
固定的屬性集
尚無法使用自定義屬性去釋出或使用Idemix憑據。 將來的版本將支援自定義屬性。
下面的四種屬性是目前版本支援的:
1.組織單位屬性(“ou”):
用法:與X.509相同 型別:字串 顯示(Revealed):永遠
2.角色屬性(“role”):
用法:與X.509相同 型別:整數 顯示(Revealed):永遠
3.註冊ID屬性
用法:唯一標識使用者 - 在屬於同一使用者的所有註冊憑據中相同(將在未來版本中用於稽核) 型別:BIG 顯示:從不在簽名中,僅在為Fabric CA生成身份驗證令牌時。
4.撤銷控制代碼屬性
用法:唯一標識憑證(將在以後的版本中用於撤銷) 型別:整數 顯示:永遠不會
-
撤銷尚不支援
儘管上面提到的撤銷控制代碼屬性的存在可以看到很多撤銷框架已經到位,但尚不支援撤銷Idemix憑據。
-
peer不使用Idemix進行背書
目前,peer僅使用Idemix MSP進行簽名驗證。 使用Idemix進行簽名只能通過Client SDK完成。 Idemix MSP將支援更多角色(包括'peer'角色)。
五、技術總結
-
1 、Idemix憑據與X.509證書的比較
證書/憑證概念和頒發過程在Idemix和X.509證書中非常相似:一組屬性使用無法偽造的簽名進行數字簽名,並且存在以加密方式繫結憑證的金鑰。
標準X.509證書和Identity Mixer憑證之間的主要區別是用於驗證屬性的簽名方案。 身份混合器系統的基礎簽名允許擁有簽名和相應的屬性的有效證明,而不會洩露簽名和(選定的)屬性值本身。 我們使用零知識證明來確保在某些屬性上的簽名有效並且使用者擁有相應的憑證金鑰時不洩露這樣的“知識”或“資訊”。
此類證明(如X.509證書)可以使用最初簽署憑證的許可權的公鑰進行驗證,並且無法成功偽造。 只有知道憑證金鑰的使用者才能生成有關憑證及其屬性的證明。
關於不可連結性,當呈現X.509證書時,必須顯示所有屬性以驗證證書籤名。 這意味著簽署事務的所有證書用法都是可連結的。
為了避免這種可連結性,每次都需要使用新的X.509證書,這會導致複雜的金鑰管理以及通訊和儲存開銷。 此外,有些情況下,即使頒發證書的CA也不能將所有事務連結到使用者,這點也很重要。
Idemix有助於避免CA和驗證者的可連結性,因為即使CA也無法將證據連結到原始憑證。 發行人和驗證者都不能判斷兩個證據是否來自同一憑證(或來自兩個不同的憑證)。
有關Identity Mixer技術的概念和功能的更多詳細資訊,請參閱“隱私保護基於屬性的身份驗證的概念和語言”一文。( https://link.springer.com/content/pdf/10.1007%2F978-3-642-37282-7_4.pdf )
-
2、基礎密碼協議
Idemix技術是基於盲簽名方案構建的,該方案支援多個訊息和簽名擁有的有效零知識證明。 Idemix的所有加密構建塊都在頂級會議和期刊上釋出,並由科學界進行驗證。Fabric的這種特殊的Idemix實現使用基於配對的簽名方案,該方案由Camenisch和Lysyanskaya( https://link.springer.com/content/pdf/10.1007%2F978-3-540-28628-8_4.pdf )簡要提出並由Au( https://eprint.iacr.org/2016/663.pdf )等人詳細描述。在零知識證明中證明簽名知識的能力讓Camenisch等人使用了。