夏浩飛



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