Hyperledger Fabric 1.3 特性調(diào)研之Identity Mixer(一)

Idemix(Identity Mixer)是一套協(xié)議加密組件,提供更強(qiáng)大的身份驗(yàn)證和隱私保護(hù)特性。

適用場景

用戶發(fā)送交易時(shí),需要隱藏自己的身份信息,并且不希望其他人通過追蹤交易記錄查找到自己發(fā)送的交易。即用戶的保密要求比較嚴(yán)格,具體為用戶在需要以下保密要求時(shí),建議使用該功能:

  • 匿名性(anonymity):不暴露交易者的身份;
  • 無關(guān)聯(lián)性(unlinkability):無法通過多個(gè)交易確定發(fā)送者身份,即一個(gè)身份發(fā)送多條交易不會(huì)暴露這些交易來自相同的身份。

原理

發(fā)行方(issuer)頒發(fā)給用戶證書,認(rèn)證用戶的一些屬性。
用戶生成ZKP(zero-knowledge proof),證明自己擁有該證書,并選擇性地暴露自己的部分屬性;將此ZKP發(fā)送給驗(yàn)證方(verifier)即可。
具體在Fabric中,流程如下圖所示:


idemix-overview.png

由Fabric CA或Idemixgen工具為用戶生成證書,SDK發(fā)送交易時(shí)提交用戶的身份證明,MSP可以驗(yàn)證用戶的身份, chaincode中可以獲取用戶暴露的身份屬性。

Idemix證書等身份信息的簽發(fā)過程類似X.509數(shù)字證書,都是對(duì)一組屬性進(jìn)行數(shù)字簽名,該數(shù)字簽名無法被偽造并且和私鑰文件關(guān)聯(lián)。同時(shí),Idemix用零知識(shí)證明確保用戶在某些屬性上的簽名有效。
Idemix技術(shù)基于盲簽名方案,支持多個(gè)消息和簽名擁有有效零知識(shí)證明。這保證了Idemix支持無關(guān)聯(lián)性(unlinkability)。即使發(fā)行人也無法將證明關(guān)聯(lián)到原始證書,發(fā)行人和驗(yàn)證者都不能判斷兩個(gè)證明是否來自同一證書。

*備注:盲簽名(blind signature scheme)

性質(zhì):

??1)簽名者對(duì)其所簽署的消息是不可見的,即簽名者不知道他所簽署消息的具體內(nèi)容。
??2)簽名消息不可追蹤,即當(dāng)簽名消息被公布后,簽名者無法知道這是他哪次簽署的。

模型:

接收者首先將待簽數(shù)據(jù)進(jìn)行盲變換,把變換后的盲數(shù)據(jù)發(fā)給簽名者。
經(jīng)簽名者簽名后再發(fā)給接收者。
接收者對(duì)簽名再作去盲變換,得出的便是簽名者對(duì)原數(shù)據(jù)的盲簽名。
這樣便滿足了性質(zhì)1)。
要滿足性質(zhì)2),必須使簽名者事后看到盲簽名時(shí)不能與盲數(shù)據(jù)聯(lián)系起來,這通常是依靠某種協(xié)議來實(shí)現(xiàn)的。

實(shí)際操作:

  1. 使用Fabric CA或idemixgen工具生成簽發(fā)者的私鑰和證書等。
    ??1)使用Fabric CA:Fabric CA server(>= Version 1.3)啟動(dòng)時(shí)會(huì)自動(dòng)在主目錄下生成相關(guān)的證書文件。啟動(dòng)命令如下:
fabric-ca-server init

也可以使用docker啟動(dòng),啟動(dòng)后生成的文件目錄結(jié)構(gòu)如下:

fabric-ca-server
├── IssuerPublicKey
├── IssuerRevocationPublicKey
├── ca-cert.pem
├── fabric-ca-server-config.yaml
├── fabric-ca-server.db
└── msp
    └── keystore
        ├── IssuerRevocationPrivateKey
        ├── IssuerSecretKey
        └── ee8fe16f689fa3c5ad0b7de96366bde0f8c80478b83b5b09801af38af2779a8a_sk

??2)使用idemixgen工具:生成簽發(fā)者的私鑰和證書等,使用如下命令(其中output參數(shù)指定證書存放路徑):

idemixgen ca-keygen --output="idemix-config-dir"

生成文件的目錄結(jié)構(gòu)如下:

idemix-config-dir
├── ca
│   ├── IssuerPublicKey
│   ├── IssuerSecretKey
│   └── RevocationKey
└── msp
         ├── IssuerPublicKey
     └── RevocationPublicKey
  1. 啟動(dòng)fabric環(huán)境之前,需要修改configtx.yaml文件,配置驗(yàn)證者的相關(guān)信息,具體添加內(nèi)容如下:
- &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: idemix-config-dir
  1. 使用Fabric Java SDK提供的idemixEnroll接口為用戶申請(qǐng)身份,然后可以使用和普通證書相同的方式發(fā)送交易。
    此外,idemixgen也可以為用戶生成簽名文件,但是暫時(shí)沒法使用命令行發(fā)送idemix簽名的交易。生成命令如下:
idemixgen signerconfig –u ORG-UNIT –e ENROLLMENTID –r REVOCATIONHANDLE --output=idemix-config-dir

默認(rèn)是member身份,如果想生成admin身份,加參數(shù)-a。

  1. chaincode中cid庫提供函數(shù)GetAttributeValue可以獲取身份的ou(organization unit,e.g. “org1.department1”)和role(e.g. “member”)信息,具體使用見如下代碼【摘自官網(wǎng)】:
// Getting attributes from an idemix credential
ou, found, err := cid.GetAttributeValue(stub, "ou");
if err != nil {
    return shim.Error("Failed to get attribute 'ou'")
}
if !found {
    return shim.Error("attribute 'ou' not found")
}
if !strings.HasSuffix(ou, "department1") {
    return shim.Error(fmt.Sprintf("Incorrect 'ou' returned, got '%s' expecting to end with 'department1'", ou))
}
role, found, err := cid.GetAttributeValue(stub, "role");
if err != nil {
    return shim.Error("Failed to get attribute 'role'")
}
if !found {
    return shim.Error("attribute 'role' not found")
}
if role != "member" {
    return shim.Error(fmt.Sprintf("Incorrect 'role' returned, got '%s' expecting 'member'", role))
}

局限性

  • 目前只有Fabric Java SDK提供了相關(guān)API獲取用戶身份和發(fā)送交易,其他SDK暫不支持;
  • 目前合約只有Golang提供了API獲取用戶身份的屬性值;
  • 目前只支持固定的屬性,不支持自定義屬性。具體支持的屬性包括:Organizational Unit attribute (“ou”),Role attribute (“role”),Enrollment ID attribute,Revocation Handle attribute;
  • 不支持證書的廢除;
  • peer并不使用Idemix背書,Idemix簽名在Client SDK,peer僅支持驗(yàn)簽。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容