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

Idemix(Identity Mixer)是一套協議加密組件,提供更強大的身份驗證和隱私保護特性。

適用場景

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

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

原理

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


idemix-overview.png

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

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

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

性質:

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

模型:

接收者首先將待簽數據進行盲變換,把變換后的盲數據發給簽名者。
經簽名者簽名后再發給接收者。
接收者對簽名再作去盲變換,得出的便是簽名者對原數據的盲簽名。
這樣便滿足了性質1)。
要滿足性質2),必須使簽名者事后看到盲簽名時不能與盲數據聯系起來,這通常是依靠某種協議來實現的。

實際操作:

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

也可以使用docker啟動,啟動后生成的文件目錄結構如下:

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工具:生成簽發者的私鑰和證書等,使用如下命令(其中output參數指定證書存放路徑):

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

生成文件的目錄結構如下:

idemix-config-dir
├── ca
│   ├── IssuerPublicKey
│   ├── IssuerSecretKey
│   └── RevocationKey
└── msp
         ├── IssuerPublicKey
     └── RevocationPublicKey
  1. 啟動fabric環境之前,需要修改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: idemix-config-dir
  1. 使用Fabric Java SDK提供的idemixEnroll接口為用戶申請身份,然后可以使用和普通證書相同的方式發送交易。
    此外,idemixgen也可以為用戶生成簽名文件,但是暫時沒法使用命令行發送idemix簽名的交易。生成命令如下:
idemixgen signerconfig –u ORG-UNIT –e ENROLLMENTID –r REVOCATIONHANDLE --output=idemix-config-dir

默認是member身份,如果想生成admin身份,加參數-a。

  1. chaincode中cid庫提供函數GetAttributeValue可以獲取身份的ou(organization unit,e.g. “org1.department1”)和role(e.g. “member”)信息,具體使用見如下代碼【摘自官網】:
// 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提供了相關API獲取用戶身份和發送交易,其他SDK暫不支持;
  • 目前合約只有Golang提供了API獲取用戶身份的屬性值;
  • 目前只支持固定的屬性,不支持自定義屬性。具體支持的屬性包括:Organizational Unit attribute (“ou”),Role attribute (“role”),Enrollment ID attribute,Revocation Handle attribute;
  • 不支持證書的廢除;
  • peer并不使用Idemix背書,Idemix簽名在Client SDK,peer僅支持驗簽。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容