什麼是身份混合器(Idemix)?
Idemix 是Fabric1.3新加入的功能。實現了“零知識證明“的功能,具體參閱
Idemix是一套協議加密組件。它可以提供強大的身份驗證和隱私保護特性。
- 匿名性,在不透露交易者身份的情況下進行交易的能力
- 不可鏈接性
- 單個身份發送多個交易的能力
Idemix有三種角色:
- 用戶
- 發行者
- 驗證者
發行者將一組用戶的屬性以一個數字證書的形式發佈,以下簡稱“身份證書”。
用戶隨後生成一個“零知識證明”的身份證書,並且還可以自己選擇公開哪些屬性。因爲是零知識證明,所以它沒有向驗證者、發行者或任何其他人透露額外的信息。
舉個例子,假設“helen”需要向glowd(保安)證明,她擁有開發商頒發的居住證。
在這種情況下,helen是用戶,開發商是發行者,glowd是驗證者。爲了向glowd證明helen有居住證,她可以向他展示居住證,但是這樣的話glowd就會看到helen的姓名,年齡等信息,這些信息其實(保安)不需要知道。
解決這個問題的方法是, helen可以使用Idemix生成glowd的“零知識證明”,這個證明只能表明她有一個有效的居住證,沒有其他任何用途。
所以從證明中可以得知:
glowd除了知道helen有一個居住證(匿名)以外,不知道任何關於她的附加信息。
如果helen多次訪問回家,並且每次都爲glowd生成證明,那glowd還是無法確定這是同一個人(不可鏈接性)。
Idemix身份驗證技術提供了類似於標準X.509證書所保證的信任模型和安全保證。但是與X.509相比,Idemix提供了底層密碼算法。這些算法有效地提供了高級隱私特徵。
如何使用Idemix
爲了理解如何在Hyperledger Fabric中使用Idemix,我們需要查看哪些Fabric組件與Idemix中的用戶、發行者和驗證者有關。
用戶是Java SDK API。未來Fabric的其他SDK也將支持Idemix。
Fabrci提供了兩種可能的Idemix發行者:
1、用於生產或開發環境的Fabric CA
2、用於開發環境的idemixgen生成工具
驗證者是Fabric中的一個Idemix MSP。
爲了在Hyperledger Fabric中使用Idemix,需要以下三個基本步驟:
將這張圖中的角色與上面一張圖的角色進行比較。
1、發行者(Issuers):
Fabric CA(版本1.3或更高)已被增強爲自動成爲Idemix發行者。當Fabric CA服務器啓動的時候(或通過CA服務器初始化命令初始化時),以下兩個文件是會在fabric-ca-server的Home目錄下自動創建:IssuerPublicKey和IssuerRevocationPublicKey。在步驟2中需要使用這些文件。
對於開發環境,如果不使用Fabric CA,則可以使用“idemixgen”來創建這些文件。
2、驗證者(Verifier):
你需要使用第一步創建的IssuerPublicKey 和 IssuerRevocationPublicKey來創建Idemix的MSP
例如,在Hyperledger Java SDK例子的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)中則包含IssuerPublicKey 和IssuerRevocationPublicKey文件
注意在這個例子中Org1Idemix代表針對Org1(不顯示)的Idemix MSP,其中也包含一個X509的MSP
3、用戶(User)
使用Java SDK調用Idemix只需要一個額外的API:
org.hyperledger.fabric_ca.sdk.HFCAClient類中的idemixEnroll方法。
例如:假設hfcaClient是你的HFCAClient對象,x509Enrollment是org.hyperledger.fabric.sdk.Enrollment的對象,它與你的X509證書相關聯。下面的調用將返回一個org.hyperledger.fabric.sdk.Enrollment對象,它與你的Idemix證書相關聯: