身份混合器Idemix(Identity Mixer)

什麼是身份混合器(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證書相關聯:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章