夏浩飛
摘 要:為厘清Hyperledger Fabric的兩級(jí)證書系統(tǒng)設(shè)計(jì)思路,深入理解與運(yùn)用Fabric項(xiàng)目的身份管理模塊,依據(jù)“Fabric協(xié)議規(guī)范”內(nèi)容整理并簡(jiǎn)要闡述Fabric兩級(jí)證書體系設(shè)計(jì)方案,著重分析交易證書結(jié)構(gòu)、公私鑰對(duì)生成算法及身份監(jiān)管實(shí)現(xiàn)方法。在此基礎(chǔ)上,指出交易證書結(jié)構(gòu)及密鑰對(duì)生成算法存在的不足,提出一種改進(jìn)方案,并論證改進(jìn)方案在實(shí)現(xiàn)交易之間無關(guān)聯(lián)、交易匿名與身份追溯功能方面的可行性,發(fā)現(xiàn)其算法效率較“Fabric協(xié)議規(guī)范”中方案具有一定提升。
關(guān)鍵詞:Fabric;身份管理;兩級(jí)證書;區(qū)塊鏈;匿名交易;監(jiān)管
DOI:10. 11907/rjdk. 192106 開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
中圖分類號(hào):TP399 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2020)005-0238-04
0 引言
在公有鏈領(lǐng)域,ShoCard是最早研究區(qū)塊鏈身份管理的公司之一,其思路為區(qū)塊鏈不存儲(chǔ)個(gè)人身份等敏感信息,而只是作為一種數(shù)據(jù)交換平臺(tái),身份信息在用戶終端存儲(chǔ)[1]。Uport項(xiàng)目基于以太坊平臺(tái)提出一種地址即身份、沒有CA的身份管理系統(tǒng)[2],PKIoverheid[3]、Idensys[4]、e-Residents[5]等也是較早嘗試依托區(qū)塊鏈技術(shù)建立數(shù)字身份系統(tǒng)的項(xiàng)目。針對(duì)區(qū)塊鏈身份管理,很多學(xué)者也進(jìn)行了大量研究,如朱巖等[6]認(rèn)為隱私保護(hù)已經(jīng)成為區(qū)塊鏈技術(shù)應(yīng)用中的關(guān)鍵環(huán)節(jié);董貴山等[7]設(shè)計(jì)基于區(qū)塊鏈的信任服務(wù)模型,意在解決弱中心化的區(qū)塊鏈系統(tǒng)身份管理問題;顧燕[8]設(shè)計(jì)并實(shí)現(xiàn)了基于公有鏈的身份認(rèn)證系統(tǒng),包括用戶注冊(cè)、用戶登錄、身份信息修改等功能;鄧毅等[9]通過概述各類區(qū)塊鏈隱私安全保護(hù)方式的優(yōu)缺點(diǎn),分析了其可行性。
在以Hyperledger Fabric為代表的聯(lián)盟鏈身份管理方面[10],翟社平等[11]認(rèn)為通過分析全局賬本中的交易記錄,潛在攻擊者可能會(huì)對(duì)用戶的交易隱私和身份隱私造成威脅;王俊生等[12]認(rèn)為監(jiān)管者應(yīng)該探索利用區(qū)塊鏈新技術(shù)改進(jìn)監(jiān)管方式,完善監(jiān)管手段;閻軍智等[13]分析基于PKI數(shù)字證書系統(tǒng)的申請(qǐng)、簽發(fā)及吊銷流程;趙東路[14]從區(qū)塊鏈業(yè)務(wù)安全需求出發(fā),分析聯(lián)盟鏈中隱私保護(hù)與監(jiān)管審計(jì)功能并存的重要性;陳永豐[15]在分析Fabric身份管理與訪問控制系統(tǒng)的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了MAC和RBAC兩種基于fabric1.0的數(shù)據(jù)訪問控制模型;張健毅等[16]提出一種基于區(qū)塊鏈的聯(lián)盟鏈—公有鏈雙鏈結(jié)構(gòu),在保持去中心化特性的同時(shí),通過聯(lián)盟鏈對(duì)公有鏈進(jìn)行交易溯源以及用戶身份確定,實(shí)現(xiàn)對(duì)電子貨幣的監(jiān)管;李佩麗等[17]基于已有區(qū)塊鏈隱私保護(hù)技術(shù),提出網(wǎng)絡(luò)互助平臺(tái)的用戶隱私保護(hù)方法,使平臺(tái)用戶身份信息對(duì)其他用戶都是保密的。
以上研究指出區(qū)塊鏈中匿名交易與身份管理屬性的重要性,但均未提及能夠同時(shí)保證交易匿名與可監(jiān)管的具體算法。本文參照Hyperledger Fabric協(xié)議規(guī)范[18]內(nèi)容,簡(jiǎn)要介紹Fabric兩級(jí)證書系統(tǒng)框架,著重分析交易證書結(jié)構(gòu)、簽名密鑰對(duì)生成過程,以及兩級(jí)證書系統(tǒng)實(shí)現(xiàn)交易匿名與監(jiān)管并存的方法,在此基礎(chǔ)上,指出兩級(jí)證書系統(tǒng)方案中存在的不足,提出一種改進(jìn)方案,并論證改進(jìn)方案在功能實(shí)現(xiàn)方面的可行性及執(zhí)行的高效性。
1 Fabric兩級(jí)證書系統(tǒng)
Fabric身份管理功能由CA模塊(包括ECA和TCA)負(fù)責(zé)統(tǒng)一管理,通過注冊(cè)(ECert)和交易(TCert)兩級(jí)證書實(shí)現(xiàn)該功能。用戶完成身份注冊(cè)后,持有效ECert便可登錄Fabric網(wǎng)絡(luò),若要執(zhí)行交易,則須申請(qǐng)TCert。TCert由TCA根據(jù)申請(qǐng)批量生成,用戶憑借TCert發(fā)起、調(diào)用與查詢交易。圖1為ECert生成過程,圖2為TCert生成過程[18]。
2 交易證書
2.1 交易證書結(jié)構(gòu)
Fabric交易證書符合X.509證書格式[19],F(xiàn)abric協(xié)議規(guī)范給出TCert結(jié)構(gòu)如表1所示。
2.2 簽名公鑰生成
Sign Verification Public Key是證書中的簽名公鑰,記為TCertPub_Key,生成步驟如下:①TCA生成根秘鑰,記為TCA_KDF_Key;②利用根秘鑰和注冊(cè)證書公鑰生成派生功能秘鑰,記為KeyDF_Key;③利用派生功能秘鑰生成擴(kuò)展秘鑰,記為Expansion_Key;④利用擴(kuò)展秘鑰和TcertIndex生成擴(kuò)展值(TCertIndex由每個(gè)批次交易證書的唯一時(shí)間戳+隨機(jī)偏移量+計(jì)數(shù)器的值生成,計(jì)數(shù)器初始值為1,每次增加2),記為ExpansionValue;⑤利用注冊(cè)證書公鑰和擴(kuò)展值生成簽名公鑰。
2.3 Hidden Private Keys Extraction生成
Hidden Private Keys Extraction是TCertIndex的加密信息,采用AES對(duì)稱加密,客戶端從交易證書中獲取Hidden Private Keys Extraction,用于恢復(fù)TCertIndex,進(jìn)而生成簽名私鑰, Hidden Private Keys Extraction=AES_EncryptTCertOwner_EncryptKey(TCertIndex || 常數(shù)),其中TCertOwner_EncryptKey=[HMAC(KeyDF_Key, “1”) ]256位截?cái)唷?/p>
2.4 Hidden Enrollment ID生成
Hidden Enrollment ID 是隱藏在TCert中的用戶身份信息,用于特定機(jī)構(gòu)對(duì)交易的監(jiān)管與審計(jì),Hidden Enrollment ID 采用AES對(duì)稱加密算法生成。Hidden Enrollment ID=AES_EncryptK(enrollmentID),K=[HMAC(Pre-K,TCertID)]256位截?cái)?,其中?dú)立秘鑰Pre_K用于enrollmentID的加密與解密,Pre_K僅對(duì)TCA及有權(quán)限的監(jiān)管、審計(jì)人員可見。
TCA完成批量TCerts生成后,將TCerts 和派生功能秘鑰KeyDF_Key通過安全信道發(fā)送至客戶端。
2.5 簽名私鑰生成
客戶端為發(fā)起交易,需要生成簽名私鑰,記為TCertPriv_Key,步驟如下:①接收TCA傳輸過來的KeyDF_Key和TCerts;②生成Expansion_Key,Expansion_Key = HMAC(KeyDF_Key, “2”);③生成解密TCertIndex的秘鑰TCertOwner_EncryptKey=HMAC(KeyDF_Key, “1”) 256位截?cái)?④讀取Tcert中的Hidden Private Keys Extraction ,解密TCertIndex ,TCertIndex =AES_DecryptTCertOwner_EncryptKey (Hidden Private Keys Extraction);⑤生成ExpansionValue = HMAC(Expansion_Key, TCertIndex);⑥生成TCertPriv_Key = (EnrollPriv_Key + ExpansionValue)mod n。
3 方案分析
3.1 公私鑰結(jié)構(gòu)分析
Fabric注冊(cè)證書和交易證書使用橢圓曲線算法(ECC)[20]生成簽名秘鑰對(duì),ECC算法的公私鑰對(duì)滿足K=kG,且k 3.2 交易匿名性 用戶在發(fā)起交易前,利用TCertPriv_Key對(duì)交易進(jìn)行簽名,并附上TCert,交易接收者從TCert中取出TCertPub_Key,驗(yàn)證數(shù)字簽名的真實(shí)性。TCert不顯示或攜帶交易發(fā)起者信息,保證了交易的匿名性。 3.3 交易可監(jiān)管性 一旦發(fā)現(xiàn)異常交易,有權(quán)限的監(jiān)管、審計(jì)人員可通過秘鑰Pre_K與交易證書中的TCertID計(jì)算出K,由K恢復(fù)出enrollmentID,確定交易者身份,如圖5所示。身份解密秘鑰Pre_K與簽名私鑰TCertPriv_Key相互獨(dú)立,簽名私鑰僅對(duì)用戶可見,Pre_K則向監(jiān)管機(jī)構(gòu)備案,既保證簽名的不可抵賴,又保證異常交易的可監(jiān)管性。 3.4 算法存在的不足 Hyperledger Fabric協(xié)議規(guī)范給出的交易證書公私鑰生成與身份追溯算法主要存在以下不足:①ExpansionValue生成算法較為復(fù)雜,多次利用HMAC算法,計(jì)算時(shí)間與秘鑰存儲(chǔ)開銷較大,安全性能仍然取決于HMAC算法強(qiáng)度,性能并未顯著提高;②Pre_K為獨(dú)立秘鑰,增加了方案復(fù)雜性;③Hidden Enrollment ID和Hidden Private Keys Extraction采用對(duì)稱加密算法,其安全性依賴于對(duì)稱加解密秘鑰K和TCertOwner_EncryptKey的強(qiáng)度。 4 方案改進(jìn) (1)減少HMAC運(yùn)算次數(shù),提升公私鑰對(duì)生成效率。 (2)以隨機(jī)數(shù)nonce 取代TcertIndex,nonce的唯一性和隨機(jī)性更能確保每張交易證書之間的無關(guān)聯(lián)性。 (3)取消獨(dú)立于交易證書的身份追溯秘鑰Pre_K,由TCA_KDF_Key經(jīng)過HMAC計(jì)算后生成的秘鑰B_Key代替Pre_K。 4.1 簡(jiǎn)化公私鑰對(duì)生成過程 TCA為批量生成Tcerts,生成根秘鑰TCA_KDF_Key和一批隨機(jī)數(shù)nonce,并由TCA_KDF_Key和隨機(jī)數(shù)nonce生成ExpansionValue,由EnrollPub_Key和ExpansionValue生成TCertPub_Key,即TCertPub_Key=EnrollPub_Key+[HMAC(TCA_KDF_Key, nonce)]G,如圖6所示。 TCA加密nonce,記為EncNonce,加密秘鑰NonceKey=[HMAC(TCA_KDF_Key,“1”)],EncNonce=AESNonceKey(nonce||常數(shù)),EncNonce 取代Hidden Private Keys Extraction作為TCert的一部分。TCA將TCert和TCA_KDF_Key通過安全信道發(fā)送至客戶端。 客戶端在接收到TCert和TCA_KDF_Key后,解密TCert中的EncNonce,生成簽名私鑰,圖7為簽名私鑰生成流程。 為了實(shí)現(xiàn)身份追溯,TCA還需把用戶注冊(cè)信息隱藏在交易證書中,方法為:利用根秘鑰TCA_KDF_Key生成備案秘鑰B_Key,B_Key = HMAC(TCA_KDF_Key,常數(shù)),由B_Key和TCertID生成注冊(cè)證書編號(hào)enrollmentID的對(duì)稱加密秘鑰,記為En_enrollmentID_Key,En_enrollmentID_Key=HMAC(B_Key, TCertID),Hidden Enrollment ID=AES_Encrypt En_enrollmentID_Key(enrollmentID),如圖8所示。秘鑰B_Key在監(jiān)管機(jī)構(gòu)處備案。 4.2 改進(jìn)方案性能分析 4.2.1 交易之間無關(guān)聯(lián)性 每張TCert的簽名公私鑰對(duì)包含隨機(jī)數(shù)nonce,并經(jīng)過HMAC運(yùn)算,nonce的唯一性和隨機(jī)性保證了每張交易證書的唯一性及其之間的無關(guān)聯(lián)性。 4.2.2 交易匿名性 交易證書的各字段中并不顯示或攜帶交易者信息,簽名公私鑰對(duì)經(jīng)過HMAC加密處理,無權(quán)限用戶無法通過交易證書內(nèi)容與簽名公私鑰對(duì)獲取發(fā)起交易用戶身份信息,交易對(duì)無關(guān)用戶而言是匿名的。 4.2.3 可監(jiān)管性 enrollmentID經(jīng)過En_enrollmentID_Key的對(duì)稱加密處理,存放在交易證書中,秘鑰B_Key在監(jiān)管處備案,監(jiān)管者可利用備案秘鑰和交易證書中的TCertID算出enrollmentID的加密秘鑰,并用解密交易證書中的Hidden Enrollment ID字段獲取交易發(fā)起者身份信息,實(shí)現(xiàn)監(jiān)管。 4.2.4 協(xié)議規(guī)范方案與改進(jìn)方案性能及安全性對(duì)比 協(xié)議規(guī)范方案與改進(jìn)方案性能及安全性對(duì)比如表2所示。 5 結(jié)語 本文重點(diǎn)研究了Fabric項(xiàng)目身份管理模塊中的交易證書設(shè)計(jì),通過剖析簽名密鑰對(duì)生成算法和交易證書隱式攜帶注冊(cè)用戶信息及身份追溯的實(shí)現(xiàn)原理,厘清了Fabric項(xiàng)目通過兩級(jí)證書系統(tǒng)實(shí)現(xiàn)交易匿名與監(jiān)管并存的方法。在此基礎(chǔ)上,分析其不足并提出改進(jìn)方案,改進(jìn)方案減少了秘鑰數(shù)量,提升了密鑰對(duì)生成效率,交易證書之間的無關(guān)聯(lián)性也更好,但在安全性方面仍然取決于AES對(duì)稱加密算法的可靠性,需作進(jìn)一步完善。交易匿名是區(qū)塊鏈的特點(diǎn)之一,可監(jiān)管則是區(qū)塊鏈商用化的必要保證,兩級(jí)證書系統(tǒng)是區(qū)塊鏈身份管理技術(shù)發(fā)展的有效途徑,具有重要參考價(jià)值。 參考文獻(xiàn): [1] ShoCard. ShoCard blockchain identity management white paper[EB/OL]. ?https://shocard.com/blockchain-identity-whitepapers. [2] DAVID J C, JOSHUA S. ABC platform and consensys' uport poised to open investment diamonds to the institutional public[EB/OL]. ?https://content.consensys.net/wp-content/uploads/ABC-Platform-uPort-Strategic-Partnership.pdf. [3] PKIoverheid. What is PKIoverheid[EB/OL]. https://www.logius.nl/diensten/pkioverheid/. [4] Idensys. What is Idensys[EB/OL]. https://idensys.nl/idensys-voor- organisaties/over-idensys. [5] MASON M. Estonia's new e-residents are surpassing the country's birth rate[EB/OL]. ?https://thenextweb.com/eu/2017/07/25/estonias-new-e-residents-surpassing-countrys-birth-rate/. [6] 朱巖,甘國(guó)華,鄧迪,等. 區(qū)塊鏈關(guān)鍵技術(shù)中的安全性研究[J]. 信息安全研究,2016(12):1090-1097. [7] 董貴山,陳宇翔,張兆雷,等. 基于區(qū)塊鏈的身份管理認(rèn)證研究[J]. 計(jì)算機(jī)科學(xué),2018,45(11):52-59. [8] 顧燕. 基于區(qū)塊鏈的身份認(rèn)證系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:北京郵電大學(xué),2018:26-44. [9] 鄧毅,陳秀清,王志豪,等. 基于區(qū)塊鏈的隱私安全保護(hù)可行性分析[J]. 軟件導(dǎo)刊,2019,18(1):166-168. [10] Hyperledger Fabric. Hyperledger[EB/OL]. ?https://www.hyperledger.org/projects/fabric. [11] 翟社平,楊媛媛,張海燕,等. 區(qū)塊鏈中的隱私保護(hù)技術(shù)[J]. 西安郵電大學(xué)學(xué)報(bào),2018,23(5):93-100. [12] 王俊生,李麗麗,顏擁,等. 區(qū)塊鏈技術(shù)應(yīng)用的安全與監(jiān)管問題[J]. 計(jì)算機(jī)科學(xué),2018,45(S1),352-355,382. [13] 閻軍智,彭晉,左敏,等. 基于區(qū)塊鏈的PKI數(shù)字證書系統(tǒng)[J]. 電信工程技術(shù)與標(biāo)準(zhǔn)化,2017,30(11):16-20. [14] 趙東路. HyperLedger中的隱私與安全[EB/OL]. http://ibm.biz/opentech-ma. [15] 陳永豐. 基于區(qū)塊鏈的數(shù)據(jù)訪問控制方法及應(yīng)用研究[D]. 成都:電子科技大學(xué),2018:32-60. [16] 張健毅,王志強(qiáng),徐治理,等. 基于區(qū)塊鏈的可監(jiān)管數(shù)字貨幣模型[J]. 計(jì)算機(jī)研究與發(fā)展,2018,55(10):2219-2232. [17] 李佩麗,徐海霞,馬添軍,等. 區(qū)塊鏈技術(shù)在網(wǎng)絡(luò)互助中的應(yīng)用及用戶隱私保護(hù)[J]. 信息網(wǎng)絡(luò)安全,2018(9):60-65. [18] GitHub. Protocol specification[EB/OL]. https://openblockchain.readthedocs.io/en/latest/protocol-spec/. [19] GitHub. Fabric CA users guide[EB/OL]. ?https://hyperledger-Fabric-ca.readthedocs.io/en/latest/users-guide.html#. [20] 陳樹寶,鄭少華,佟艷娟. Hyperledger Fabric核心技術(shù)[M]. 北京:電子工業(yè)出版社,2019:67-72. (責(zé)任編輯:黃 ?。?/p>