張明武, 夏禹軒, 張語(yǔ)荻, 陳啟祥, 楊 波
1. 湖北工業(yè)大學(xué)計(jì)算機(jī)學(xué)院, 武漢 430068
2. 襄陽(yáng)湖北工業(yè)大學(xué)產(chǎn)業(yè)研究院, 襄陽(yáng) 441100
3. 廣西密碼學(xué)與信息安全重點(diǎn)實(shí)驗(yàn)室, 桂林 541004
4. 陜西師范大學(xué)計(jì)算機(jī)科學(xué)學(xué)院, 西安 710119
區(qū)塊鏈技術(shù)(Blockchain) 是分布式存儲(chǔ)、點(diǎn)對(duì)點(diǎn)傳輸、加密算法、共識(shí)機(jī)制等結(jié)合的新型應(yīng)用, 能夠?qū)崿F(xiàn)無(wú)中心化節(jié)點(diǎn)的大型數(shù)據(jù)的存儲(chǔ)、更新、追溯等, 以及服務(wù)參與者的激勵(lì). 區(qū)塊鏈最初在2008 年由中本聰提出的比特幣項(xiàng)目中開始被人們關(guān)注, 比特幣通過(guò)技術(shù)手段實(shí)現(xiàn)了去中心化的加密貨幣交易方案, 并且取得了巨大成功[1,2]. 2013 年以太坊[3]中引入智能合約的概念, 使得通過(guò)程序?qū)崿F(xiàn)自動(dòng)化的業(yè)務(wù)處理變得更加容易. 隨著區(qū)塊鏈應(yīng)用領(lǐng)域的不斷擴(kuò)展, 各種區(qū)塊鏈技術(shù)與平臺(tái)也隨之出現(xiàn), 例如面向企業(yè)應(yīng)用解決方案的Hyperledger Fabric[4], 以及更加注重保護(hù)隱私的Zcash[5]等. 區(qū)塊鏈技術(shù)得到長(zhǎng)足的發(fā)展和應(yīng)用, 不僅在加密貨幣方面, 同時(shí)在金融、醫(yī)療、電子政務(wù)等領(lǐng)域也得到廣泛應(yīng)用[6,7]. 然而, 現(xiàn)有區(qū)塊鏈上大多數(shù)區(qū)塊鏈的實(shí)現(xiàn)依賴鏈上數(shù)據(jù)的公開透明, 這與現(xiàn)在普遍應(yīng)用場(chǎng)景所需要遵循的隱私保護(hù)要求不相符, 區(qū)塊鏈隱私問(wèn)題成為區(qū)塊鏈除效率外阻礙其實(shí)施與應(yīng)用的又一難題[8].
針對(duì)區(qū)塊鏈隱私問(wèn)題學(xué)者提出了隱私保護(hù)的方法, 主要集中在交易的隱私保護(hù)[9], 較少涉及到區(qū)塊鏈背書隱私保護(hù)問(wèn)題. 區(qū)塊鏈背書(block endorsement) 是區(qū)塊鏈實(shí)現(xiàn)共識(shí)的基礎(chǔ), 其背書者身份的泄漏會(huì)威脅到整個(gè)區(qū)塊鏈共識(shí)的安全, 然而現(xiàn)在大多數(shù)區(qū)塊鏈包括許可區(qū)塊鏈并沒(méi)有對(duì)背書采取具體的隱私保護(hù)手段. 例如, 針對(duì)目前使用最廣的聯(lián)盟許可區(qū)塊鏈的Hyperledger Fabric, 僅通過(guò)分析其背書簽名就可以輕易獲取某項(xiàng)特定交易的背書策略, 從而得知參與此項(xiàng)交易的背書節(jié)點(diǎn)身份. 在背書節(jié)點(diǎn)身份泄露的情況下, 攻擊者通過(guò)對(duì)指定背書節(jié)點(diǎn)的DDOS 攻擊或阻攔通信, 可以用極小的代價(jià)阻礙相關(guān)交易的正常執(zhí)行,而如果可以實(shí)現(xiàn)對(duì)特定背書節(jié)點(diǎn)的腐蝕或共謀, 甚至可以威脅到整個(gè)交易的安全[10].
針對(duì)背書中存在的隱私問(wèn)題, Mazumdar[11]等人提出一種針對(duì)Hyperledger Fabric 的匿名背書方案, 該方案保證背書節(jié)點(diǎn)身份的匿名性, 并且可以在匿名條件下實(shí)現(xiàn)(t,n) 門陷的背書策略, 但該方案在交易發(fā)生歧義或問(wèn)題時(shí)無(wú)法快速進(jìn)行身份追蹤, 這與現(xiàn)有的大多數(shù)聯(lián)盟區(qū)塊鏈應(yīng)用要求相違背, 也為區(qū)塊鏈溯源增加了困難, 而且每次背書策略改變或者需要增加或減少背書節(jié)點(diǎn)時(shí)都必須重新分配密鑰, 造成整個(gè)系統(tǒng)效率低下.
群簽名方案在實(shí)現(xiàn)匿名驗(yàn)證中一直有著不錯(cuò)的效果, 除了群管理員, 其它人都無(wú)法獲知簽名者的身份,只有群內(nèi)成員才能生成合法簽名, 在發(fā)生爭(zhēng)議時(shí), 可以由群管理員通過(guò)打開簽名確認(rèn)簽名者身份. 群簽名的概念首先由Chaum 等人[12]提出, 在1997 年Camenisch 等人[13]提出首個(gè)針對(duì)大群組的群簽名方案,該方案加入新成員時(shí)不需要重新更新其它成員的密鑰, 但該方案沒(méi)有考慮如何安全高效地撤銷群內(nèi)成員.Kim 等人[14]提出了一個(gè)可以撤銷群成員的群簽名方案, 但每次撤銷都需要重新更新其它群成員密鑰, 帶來(lái)額外的開銷. 文獻(xiàn)[15] 提出了基于中國(guó)剩余定理的群簽名, 其優(yōu)勢(shì)在于在成員的加入和注銷時(shí)不用改變已經(jīng)生成的密鑰, 更為靈活, 但該方案并不能抵抗聯(lián)合攻擊以及實(shí)現(xiàn)非關(guān)聯(lián)性. 文獻(xiàn)[16] 針對(duì)該方案進(jìn)行了改進(jìn), 提出了能抵抗聯(lián)合攻擊的基于中國(guó)剩余定理的群簽名方案.
本文使用基于中國(guó)剩余定理的群簽名方案實(shí)現(xiàn)可靈活更改背書策略的許可區(qū)塊鏈背書方案, 可以滿足(t,n) 策略的驗(yàn)證要求, 同時(shí)滿足許可區(qū)塊鏈的溯源要求.
基于依托中國(guó)剩余定理的群簽名方案, 本文設(shè)計(jì)了一種可以應(yīng)用于許可區(qū)塊鏈上的匿名背書方案, 保護(hù)了許可區(qū)塊鏈上的背書節(jié)點(diǎn)身份隱私以及區(qū)塊鏈交易的背書策略信息, 主要貢獻(xiàn)如下:
(1) 通過(guò)應(yīng)用中國(guó)剩余定理實(shí)現(xiàn)背書成員的快速加入以及退出, 解決了已有匿名背書方案的背書成員加入以及退出低效的問(wèn)題.
(2) 引入Schnorr 簽名提高群簽名過(guò)程中的簽名及驗(yàn)證效率, 從而提高了整個(gè)匿名背書系統(tǒng)效率.
(3) 設(shè)計(jì)了可以隱藏背書策略的匿名背書方案, 并且滿足背書節(jié)點(diǎn)權(quán)重不對(duì)等條件下的許可區(qū)塊鏈應(yīng)用需求, 同時(shí)該方案還兼容新舊簽名的驗(yàn)證以及對(duì)以往交易的溯源. 同時(shí), 給出了方案的實(shí)驗(yàn)結(jié)果及性能分析.
2.1.1 許可區(qū)塊鏈和非許可區(qū)塊鏈
區(qū)塊鏈根據(jù)其節(jié)點(diǎn)的加入及對(duì)網(wǎng)絡(luò)的訪問(wèn)可以劃分為許可區(qū)塊鏈與非許可區(qū)塊鏈. 最初非許可區(qū)塊鏈如: 比特幣以及以太坊得到極力推廣, 因?yàn)樗鼈冊(cè)趯?shí)現(xiàn)去中心的可信任系統(tǒng)具有優(yōu)勢(shì), 但隨著區(qū)塊鏈技術(shù)的發(fā)展及其與商業(yè)應(yīng)用的結(jié)合, 需求發(fā)生了變化, 更加貼切企業(yè)生產(chǎn)環(huán)境要求的許可區(qū)塊鏈被提出, 其中的佼佼者是IBM 的Hyperledger Fabric. 在許可區(qū)塊鏈環(huán)境下, 為滿足生產(chǎn)的需要, 通常采取半中心化或中心化的結(jié)構(gòu), 通過(guò)設(shè)置權(quán)限及訪問(wèn)限制來(lái)保證整個(gè)區(qū)塊鏈網(wǎng)絡(luò)的安全, 同時(shí)保留了非許可區(qū)塊鏈原有的數(shù)據(jù)不可篡改, 智能合約自動(dòng)化處理交易、共識(shí)協(xié)議保證交易的一致性等特性.
2.1.2 Hyperledger Fabric 許可區(qū)塊鏈背書
比特幣及以太坊等公有鏈采取先排序再執(zhí)行的交易流程, 對(duì)智能合約有著嚴(yán)格的要求, 必須保證智能合約在任何機(jī)械、任何時(shí)間針對(duì)相同的輸入都必須輸出確定性的結(jié)果, 因此對(duì)智能合約的編寫和使用有著很高的限制. 如圖1 所示, Hyperledger Fabric 許可區(qū)塊鏈采用執(zhí)行-排序-驗(yàn)證的交易流程[17], 其先通過(guò)背書節(jié)點(diǎn)模擬執(zhí)行, 然后選取一致的背書結(jié)果, 再排序驗(yàn)證. 這在保證交易一致性的硬性要求下, 給了智能合約編寫更靈活的空間, 因此其智能合約開發(fā)可以使用Golang、Java 等高級(jí)語(yǔ)言, 但也使得其更依賴于底層的背書來(lái)保證交易的一致性和正確性, 其交易背書流程可見(jiàn)圖2, 簡(jiǎn)述為以下幾步:
圖1 Hyperledger Fabric 與非許可區(qū)塊鏈交易流程Figure 1 Hyperledger Fabric and non-permissioned chain transaction process
圖2 Hyperledger Fabric 交易背書流程Figure 2 Framework of Hyperledger Fabric transaction endorsement
(1) 系統(tǒng)初始化, 設(shè)定背書策略并在相應(yīng)的背書節(jié)點(diǎn)上安裝智能合約.
(2) 發(fā)送交易請(qǐng)求, 客戶端向背書策略中的背書節(jié)點(diǎn)發(fā)送交易請(qǐng)求.
(3) 收集背書結(jié)果, 背書節(jié)點(diǎn)模擬執(zhí)行, 返回背書結(jié)果讀寫集及簽名, 客戶端收集并背書結(jié)果直至滿足所需的背書策略.
(4) 交易排序, 客戶端將背書結(jié)果及簽名發(fā)送至排序節(jié)點(diǎn), 排序節(jié)點(diǎn)驗(yàn)證簽名, 背書策略是否滿足, 交易是否完整, 交易是否已經(jīng)存在.
(5) 打包及廣播, 排序節(jié)點(diǎn)將排序好的交易打包成區(qū)塊, 然后廣播給區(qū)塊鏈網(wǎng)絡(luò)內(nèi)的可以記賬的節(jié)點(diǎn),讓它們寫入賬本.
2.1.3 Hyperledger Fabric 許可區(qū)塊鏈背書分析
分析許可區(qū)鏈交易背書過(guò)程, 我們發(fā)現(xiàn)其存在以下安全性問(wèn)題:
(1) 一項(xiàng)交易的鏈碼在安裝后, 除非鏈碼更新, 其背書策略都不會(huì)改變, 交易的背書節(jié)點(diǎn)固定, 這在關(guān)鍵背書節(jié)點(diǎn)故障時(shí)會(huì)影響到整個(gè)交易的正常執(zhí)行, 且背書節(jié)點(diǎn)固定也會(huì)增加受到針對(duì)特定交易的攻擊.
(2) 背書策略不光交易的發(fā)起者知道, 所有參與的背書節(jié)點(diǎn)以及排序節(jié)點(diǎn)都知道, 因此除非以上所有參與者都足夠誠(chéng)信, 否則背書策略很容易暴露給第三方, 現(xiàn)實(shí)情況下這種誠(chéng)實(shí)性是很難保證的.
(3) 當(dāng)區(qū)塊鏈成員進(jìn)行隱私交易的時(shí)候, 由于背書過(guò)程中排序節(jié)點(diǎn)及客戶端都需要驗(yàn)證背書策略是否滿足, 因此必須向排序節(jié)點(diǎn)或客戶端公開交易的背書及相關(guān)隱私信息, 這是在很多應(yīng)用情況下, 比如電子政務(wù)或涉及患者隱私信息的醫(yī)療領(lǐng)域都不樂(lè)見(jiàn)的.
2.2.1 中國(guó)剩余定理
設(shè)p1,p2,··· ,pk是k個(gè)兩兩互素的正整數(shù),k ≥2, 對(duì)于任意整數(shù)y1,y2,··· ,yk, 滿足:
該方程的正整數(shù)解可表示為:
2.2.2 Schnorr 簽名
Schnorr 簽名[18]是基于離散對(duì)數(shù)安全假設(shè)的簽名方案, 具體方案如下:
(1) 系統(tǒng)初始化: 選取滿足p ≥2512大素?cái)?shù)p, 選取大素?cái)?shù)q, 滿足q|(p ?1),q ≥2160, 從Z?p中選取元素g, 滿足gq ≡1 (modp), 選取一個(gè)安全的hash 函數(shù)h:{0,1}→Z?q.
(2) 密鑰生成: 生成用戶秘密鑰x, 滿足1 (3) 簽名的產(chǎn)生: 輸入待簽名的消息m, 簽名者執(zhí)行: 選擇滿足1 (4) 簽名的驗(yàn)證: 在接收方收到消息m和數(shù)字簽名σ=(e,s) 后, 先計(jì)算r′≡gsy?e(modp), 然后計(jì)算e=H(r,m), 驗(yàn)證等式H(r′,m)=e是否成立, 若成立則簽名合法, 否則簽名非法. 2.2.3 群簽名 群簽名方案是一種特殊的數(shù)字簽名方案, 群中的任何人可以產(chǎn)生代表群的簽名, 簽名的驗(yàn)證者只能驗(yàn)證簽名是否由群內(nèi)成員產(chǎn)生, 而不能獲知簽名者的具體身份[20]. 一個(gè)群簽名方案包括以下功能的算法: (1) 創(chuàng)建: 產(chǎn)生群公鑰和私鑰的多項(xiàng)式時(shí)間概率算法. (2) 加入: 用戶和群管理人之間的使用戶成為群成員的交互式或非交互式協(xié)議. 執(zhí)行該協(xié)議可產(chǎn)生群成員的私鑰和成員證書, 并使群管理人得到群成員的成員管理鑰. (3) 簽名: 當(dāng)輸入一個(gè)消息和一個(gè)群成員的私鑰后, 輸出對(duì)該消息的簽名. (4) 驗(yàn)證: 在輸入對(duì)消息的簽名及群公鑰后確定簽名是否有效. (5) 打開: 在給定一個(gè)簽名及群私鑰的條件下確定簽名人身份. 群簽名的安全性包含以下幾方面: ?匿名性: 除了群管理員, 任何人不能得到簽名者的具體身份. ?非關(guān)聯(lián)性: 在不打開簽名的情況下, 獲知兩個(gè)不同的簽名是否由同一個(gè)成員簽署的, 在計(jì)算上是困難的. 在某些特定的應(yīng)用場(chǎng)景下群簽名可以不滿足該性質(zhì), 比如投票中防止重復(fù)投票. ?防偽造性: 只有群成員才能生成有效的簽名. ?可追蹤性: 群管理員在有必要的時(shí)候可以打開一個(gè)簽名, 而簽名者不能阻止合法簽名的打開. ?防陷害性: 包括管理員在內(nèi)的任何群成員都不能以其他群成員的名義生成一個(gè)合法的簽名. ?抗聯(lián)合攻擊性: 即使一些成員串通也不能生成一個(gè)合法的不能被攻擊的群簽名. 2.2.4 基于中國(guó)剩余定理的群簽名方案 群簽名方案有很多種構(gòu)造方法, 本節(jié)介紹一種基于中國(guó)剩余定理的群簽名方案[15], 方案構(gòu)造如下: 本文結(jié)合Schnorr 簽名與中國(guó)剩余定理群簽名方案給出的群簽名方案, 可以靈活快速地實(shí)現(xiàn)成員的加入以及注銷, 且能防止許可區(qū)塊鏈背書中的同一成員多次簽名同一消息. 3.1.1 具體方案 本匿名背書的群簽名方案包括7 個(gè)算法: 系統(tǒng)建立、成員的加入、用戶的撤銷、簽名的生成、簽名驗(yàn)證、背書策略的驗(yàn)證和簽名的打開等. 具體方案構(gòu)造如下: (1)系統(tǒng)建立: 系統(tǒng)建立階段會(huì)進(jìn)行系統(tǒng)初始化及密鑰生成, 具體流程參見(jiàn)圖3 所示. 步驟如下: 圖3 系統(tǒng)初始化及密鑰生成Figure 3 System initialization and key generation (a) 區(qū)塊鏈管理員在進(jìn)行鏈碼安裝時(shí)首先確認(rèn)要安裝的鏈碼所設(shè)定的背書策略, 在本匿名背書方案下, 不使用原Fabric 許可區(qū)塊鏈的and 及or 邏輯的背書策略, 而是按照選定的背書節(jié)點(diǎn)權(quán)重及數(shù)量轉(zhuǎn)換為相應(yīng)的(t,n) 門限背書策略, 即此模式下當(dāng)有權(quán)重總和為t的背書節(jié)點(diǎn)完成背書時(shí), 該交易背書被認(rèn)為是有效的. (b) 管理員選取待背書節(jié)點(diǎn), 節(jié)點(diǎn)總數(shù)記為k, 為每個(gè)背書節(jié)點(diǎn)設(shè)置權(quán)重ti(i指代第i個(gè)背書節(jié)點(diǎn)編號(hào)), 并保證選取的背書節(jié)點(diǎn)的總權(quán)重滿足d=t1+t2+···+tk>t(為保證容錯(cuò)性背書節(jié)點(diǎn)的總權(quán)重n不能與背書策略要求的權(quán)重t過(guò)于接近), 將各個(gè)節(jié)點(diǎn)權(quán)重與身份的對(duì)應(yīng)關(guān)系記錄到表{ID,ti}中. (c) 根據(jù)參與的背書節(jié)點(diǎn)總數(shù)d的數(shù)量選取相同數(shù)量的大素?cái)?shù)pi, 選取對(duì)應(yīng)數(shù)量的大素?cái)?shù)qi, 滿足qi|(pi ?1). 選取所有Z?pi共同的生成元g, 滿足gqi ≡1 (modpi),i=1,2,··· ,k. (d) 選取一個(gè)安全的哈希函數(shù):H(·). 計(jì)算P=p1p2···pk, 將pi和qi發(fā)送給安裝了鏈碼的背書節(jié)點(diǎn). (e) 背書節(jié)點(diǎn)收到區(qū)塊鏈管理員發(fā)送的pi,qi后, 選取密鑰xi, 滿足1 (f) 區(qū)塊鏈管理員收到y(tǒng)i后, 確保i ?=j時(shí),yi ?=yj, 記錄{ID,yi,ti}對(duì)照關(guān)系表, 構(gòu)造滿足式(1)的同余方程組. 并求該方程組的唯一解: 其中Pi,如2.2.4 節(jié)所述, 之后區(qū)塊鏈管理員公開(g,c,pi),i=1,2,··· ,k. (2)成員的加入: 對(duì)于新成員的加入, 執(zhí)行如下過(guò)程: (3)撤銷用戶: 區(qū)塊鏈管理者將退出的背書節(jié)點(diǎn)ID 對(duì)應(yīng)的yi設(shè)為不同的隨機(jī)數(shù), 然后重新計(jì)算并公開參數(shù)c. (4)簽名的生成: 背書節(jié)點(diǎn)選取隨機(jī)數(shù)ri, 滿足1 (6)背書策略的驗(yàn)證: 簽名驗(yàn)證者在經(jīng)過(guò)u的簽名收集時(shí)間后, 將計(jì)算收集的yi集合發(fā)送給區(qū)塊鏈管理者, 由區(qū)塊鏈管理者查詢(ID,yi,ti), 得到ti, 驗(yàn)證t1+t2+···+tl>t(l為區(qū)塊鏈管理員收到的yi總數(shù)), 并將結(jié)果布爾值返回給驗(yàn)證者, 驗(yàn)證者根據(jù)驗(yàn)證結(jié)果判斷收集到的簽名是否滿足背書策略要求, 具體驗(yàn)證流程可見(jiàn)圖4. 圖4 簽名的生成和驗(yàn)證Figure 4 Signature generation and verification (7)簽名的打開: 區(qū)塊鏈管理者根據(jù)簽名信息中的pi計(jì)算yi ≡c(modpi), 在(ID,yi,ti) 對(duì)照表中 查找對(duì)應(yīng)背書節(jié)點(diǎn)的身份ID. 3.1.2 方案分析 (6)背書權(quán)重隱藏: 區(qū)塊鏈管理者通過(guò)收到的yi查詢權(quán)重ti, 驗(yàn)證t1+t2+···+tl>t, 并返回結(jié)果,驗(yàn)證過(guò)程中, 驗(yàn)證者無(wú)法獲知具體背書節(jié)點(diǎn)的權(quán)重情況, 只能得到背書結(jié)果是否滿足背書策略的布爾值. (7)防止同一成員對(duì)同一消息重復(fù)背書: 許可鏈背書過(guò)程中要求交易背書中背書結(jié)果及簽名由不同的背書節(jié)點(diǎn)產(chǎn)生, 在本方案中驗(yàn)證者可以通過(guò)簽名中的pi判斷該簽名是否由同一背書節(jié)點(diǎn)產(chǎn)生. 3.2.1 系統(tǒng)結(jié)構(gòu) 本背書方案參與方包含以下成員, 其結(jié)構(gòu)見(jiàn)圖5 所示: 圖5 匿名背書系統(tǒng)結(jié)構(gòu)Figure 5 Anonymous endorsement system structure (1) 客戶端: 安裝在用戶節(jié)點(diǎn)上的應(yīng)用程序, 負(fù)責(zé)發(fā)起交易的背書請(qǐng)求以及收集背書結(jié)果和簽名. (2) 背書節(jié)點(diǎn): 負(fù)責(zé)交易的背書, 會(huì)模擬執(zhí)行智能合約, 輸出背書結(jié)果及相應(yīng)的群簽名. (3) 排序服務(wù): 由排序節(jié)點(diǎn)和提交節(jié)點(diǎn)組成. 排序節(jié)點(diǎn)負(fù)責(zé)驗(yàn)證客戶端發(fā)送的交易是否滿足背書策略,交易的完整性以及交易是否已經(jīng)存在, 還有對(duì)已驗(yàn)證的交易進(jìn)行排序. 提交節(jié)點(diǎn)負(fù)責(zé)將排序好的交易打包成塊然后廣播給網(wǎng)絡(luò)內(nèi)記賬的節(jié)點(diǎn). (4) 記賬節(jié)點(diǎn): 包含所有在區(qū)塊鏈網(wǎng)絡(luò)中可以記賬的節(jié)點(diǎn), 這些節(jié)點(diǎn)將排序好的交易按順序?qū)懭氡镜刭~本, 共同維護(hù)某一智能合約中的交易賬本. (5) 智能合約: 在本方案中以鏈碼形式安裝在相關(guān)節(jié)點(diǎn)上, 對(duì)應(yīng)一個(gè)背書策略, 會(huì)自動(dòng)對(duì)輸入的交易進(jìn)行處理輸出一個(gè)讀寫結(jié)果集. 3.2.2 系統(tǒng)初始化及智能合約的安裝 (1) 區(qū)塊鏈用戶, 開發(fā)者及區(qū)塊鏈管理者確定待安裝的智能合約及所需要的背書策略(t,n), 為所有擬加入背書的節(jié)點(diǎn)安裝智能合約及配置背書策略門限要求t, 并收集安裝成功與否的反饋結(jié)果. (2) 區(qū)塊鏈管理者生成一個(gè)匿名背書節(jié)點(diǎn)候選集群E, 將所有安裝成功的擬參與許可區(qū)塊鏈背書的節(jié)點(diǎn)添加到該集群E中, 為候選集E中的每一個(gè)背書節(jié)點(diǎn)分配參數(shù)pi,qi, 設(shè)置背書權(quán)重ti. 將pi,qi發(fā)送給候選背書節(jié)點(diǎn), 收集候選背書節(jié)點(diǎn)計(jì)算的參數(shù)yi, 根據(jù)背書節(jié)點(diǎn)的身份ID 記錄關(guān)系對(duì)照表(ID,yi,ti). (3) 所有以上參數(shù)分配及收集完成后, 區(qū)塊鏈管理計(jì)算群簽名的關(guān)鍵參數(shù)c, 向區(qū)塊鏈所有有背書驗(yàn)證權(quán)限的節(jié)點(diǎn)公開參數(shù)(g,c,pi), 將背書策略門限要求t發(fā)送給排序節(jié)點(diǎn). (4) 每經(jīng)過(guò)一段時(shí)間, 區(qū)塊鏈管理員從背書候選集合E選取子集F, 保證F中的背書節(jié)點(diǎn)權(quán)限ti之和大于t,F作為當(dāng)前時(shí)刻使用的背書節(jié)點(diǎn)集合列表發(fā)送給用戶的客戶端. 參數(shù)t,pi,qi,ti和yi的選取和生成,c的計(jì)算具體可見(jiàn)3.1.1 節(jié). 3.2.3 用戶訂閱 用戶通過(guò)訂閱相關(guān)交易的背書服務(wù)來(lái)加入許可區(qū)塊鏈中的具體交易: (1) 區(qū)塊鏈的已注冊(cè)用戶向區(qū)塊鏈管理員申請(qǐng)加入交易. (2) 申請(qǐng)通過(guò)后區(qū)塊鏈管理員向其發(fā)送公開參數(shù)(g,c,pi), 當(dāng)前時(shí)刻的背書節(jié)點(diǎn)集合F, 為其安裝交易智能合約及配置背書策略門限要求t. 3.2.4 背書策略的更新及候選背書節(jié)點(diǎn)的加入和退出 (1) 背書策略更新當(dāng)需要進(jìn)行背書策略更新時(shí), 因?yàn)楸痉桨钢兄悄芎霞s和背書策略分開, 因此只需要區(qū)塊鏈管理員更新背書策略門限要求t, 將其發(fā)送給用戶客戶端和排序節(jié)點(diǎn)即可. (2) 候選背書節(jié)點(diǎn)的加入當(dāng)新的背書節(jié)點(diǎn)需要加入時(shí), 區(qū)塊鏈管理員將新生成的pi+1,qi+1發(fā)送給新的候選背書節(jié)點(diǎn), 收集候選背書節(jié)點(diǎn)計(jì)算的參數(shù)yi+1, 根據(jù)背書節(jié)點(diǎn)的身份ID 將新的身份關(guān)系(ID,yi+1,ti+1) 添加到關(guān)系對(duì)照表(ID,yi,ti), 重新計(jì)算c并公布, 將新的候選節(jié)點(diǎn)添加至集合E中. 以上操作均不需要改變其它背書節(jié)點(diǎn)的驗(yàn)證參數(shù)yi, 背書節(jié)點(diǎn)的加入及退出通過(guò)計(jì)算公布新的參數(shù)c即可完成. 3.2.5 匿名背書交易流程 匿名背書交易流程可見(jiàn)圖6, 具體如下: 圖6 匿名背書流程Figure 6 Anonymous endorsement process (1) 發(fā)送交易請(qǐng)求 當(dāng)區(qū)塊鏈用戶需要執(zhí)行交易時(shí), 通過(guò)其客戶端根據(jù)自己已有的背書節(jié)點(diǎn)集合列表F向背書節(jié)點(diǎn)發(fā)送廣播交易請(qǐng)求m, 以及自己對(duì)m的簽名sc. (2) 背書節(jié)點(diǎn)模擬執(zhí)行 背書節(jié)點(diǎn)收到后先驗(yàn)證客戶端的簽名sc, 然后用智能合約進(jìn)行模擬執(zhí)行, 輸出執(zhí)行結(jié)果讀寫集resi,然后根據(jù)統(tǒng)一的哈希函數(shù)H生成相應(yīng)的讀寫集resi的哈希值H(resi), 使用在3.1.1 節(jié)中方案描述的自己的xi對(duì)H(resi) 生成相應(yīng)的簽名si, 最終簽名為(si,ei,pi), 其中ei為簽名中計(jì)算出來(lái)的參數(shù),pi在系統(tǒng)初始化階段由區(qū)塊鏈管理員發(fā)給背書節(jié)點(diǎn). 算法1 交易背書Input: parameters m, sc, xi, pi, qi, ri Output: result H(resi), ei, si 1 if ver(sc,m) == true then 2execute the smart contract to get the result;3resi = result;4Ri ≡gri (mod pi);5ei = H(Ri||m);6si ≡ri +xiei (mod qi);7 end 8 return H(resi),ei,si (3) 返回匿名背書結(jié)果 各背書節(jié)點(diǎn)將上步過(guò)程中產(chǎn)生的簽名si及讀寫哈希值H(resi) 發(fā)送回提交交易請(qǐng)求的客戶端. (4) 背書結(jié)果收集 客戶端在本地進(jìn)行模擬執(zhí)行然后根據(jù)統(tǒng)一哈希函數(shù)對(duì)結(jié)果進(jìn)行哈希, 生成本地讀寫集res′的哈希值H(res′), 收集背書結(jié)果, 判斷H(res′)=H(res) 是否成立, 成立則驗(yàn)證該群簽名si(驗(yàn)證方法可見(jiàn)3.1.1 節(jié)中的簽名驗(yàn)證), 驗(yàn)證通過(guò)后將{m,H(resi),si}加入待發(fā)送的結(jié)果集合F中, 判斷是否已經(jīng)收集到集合F中所有背書節(jié)點(diǎn)的簽名, 或者時(shí)間是否超過(guò)背書時(shí)限Te, 是則準(zhǔn)備將其發(fā)送給排序節(jié)點(diǎn). 算法2 背書結(jié)果收集Input: parameters m, si, ei, pi, H(resi), total Output: result F 1 execute the smart contract to get the result;2 res′ = result;3 create set F for each i in all do 5 add {m,H(resi),si} to set F;4if H(res′) == H(resi) AND ver(si,m,ei,pi) == true then 6 if time out OR i ≥total then 7 break;end 9end 10 end 11 return F 8 (5) 發(fā)送交易及背書結(jié)果 將上一步的結(jié)果集合F及客戶端自己的簽名sc發(fā)送給區(qū)塊鏈排序節(jié)點(diǎn). (6) 背書策略驗(yàn)證及交易排序 排序節(jié)點(diǎn)收到客戶端發(fā)送的背書節(jié)點(diǎn)集合后首先檢查客戶端的簽名sc是否正確, 然后檢查簽名是否存在同一背書節(jié)點(diǎn)多簽的情況(通過(guò)計(jì)算yi ≡c(modpi) ), 在區(qū)塊鏈管理員的輔助下驗(yàn)證是否滿足背書策略要求t, 滿足則進(jìn)行每個(gè)群簽名si的驗(yàn)證. 驗(yàn)證通過(guò)后檢查交易m的完整性, 是否已經(jīng)存在, 全部通過(guò)后進(jìn)行交易排序, 輸出排序后的交易TX. 算法3 交易排序Input: parameters m, sc, si, yi, ti, t Output: result TX 1 if ver(sc,m) == True AND when i ?= j,yi ?= yj then 2if sum(ti) ≥t then 3 for each i in all do 4 if ver(si,m,ei,pi) == true AND transaction m is complete and not repeated then 5 add m to set TX;6 end end 8end 9 end 10 sort TX;11 return TX 7 (7) 生成區(qū)塊, 廣播及記賬 當(dāng)排序完成后, 排序節(jié)點(diǎn)用排序后的交易TX 生成區(qū)塊, 發(fā)送給提交節(jié)點(diǎn), 提交節(jié)點(diǎn)發(fā)布新的世界狀態(tài), 并廣播給區(qū)塊鏈內(nèi)的所有節(jié)點(diǎn), 讓它們進(jìn)行復(fù)制, 寫入各節(jié)點(diǎn)的賬本. 3.2.6 許可區(qū)塊鏈溯源及身份追蹤 當(dāng)交易出現(xiàn)爭(zhēng)議或問(wèn)題時(shí), 為了進(jìn)行溯源, 需要追蹤背書節(jié)點(diǎn)身份. 在本匿名方案中, 追蹤簽名對(duì)應(yīng)的yi仍然有效時(shí), 只需要區(qū)塊鏈管理員計(jì)算yi ≡c(modpi), 查詢yi在現(xiàn)有關(guān)系對(duì)照表(ID,yi,ti) 中的對(duì)應(yīng)ID 即可獲取該背書節(jié)點(diǎn)身份. 追蹤簽名對(duì)應(yīng)的yi失效時(shí), 根據(jù)歷史y′i失效記錄時(shí)間time 查詢歷史關(guān)系對(duì)照表(time,c′,ID,y′i,t′i), 計(jì)算y′i ≡c′(modpi) 獲取簽名者身份ID. 算法4 背書節(jié)點(diǎn)身份追蹤Input: parameters m, si, pi, c, (ID,yi,ti), (time,c′,ID,y′i,t′i)Output: result ID 1 yi ≡c (mod pi);2 if yi not in (ID,yi,ti) then 3get ID from (time,c′,ID,y′i,t′i);4 end 5 get ID from (ID,yi,ti);6 if ver(si,m,ei,pi) == true then 7return ID;8 end 9 return signature illegal 本實(shí)驗(yàn)使用電腦 CPU 為 Intel(R) Core(TM) i7-9750H, 內(nèi)存為 8 GB, 操作系統(tǒng)為 64 位的Ubuntu 20.04.1 LTS, 使用編寫語(yǔ)言為與Hyperledger Fabric 源碼相同的Golang, Golang 版本為1.15, 使用庫(kù)主要包含Golang 的math/big, crypto 中的rand 及SHA3 庫(kù), Schnorr 簽名使用庫(kù)github.com/ChainSafe/go-schnorrkel. 具體實(shí)驗(yàn)分為群簽名的效率測(cè)試實(shí)驗(yàn)及在Hyperledger Fabric 許可區(qū)塊鏈上的匿名背書仿真實(shí)驗(yàn)兩部分. 該部分實(shí)驗(yàn)通過(guò)編寫Golang 代碼, 測(cè)試方案中的群簽名在簽名及驗(yàn)證的效率, 方案中的加入以及刪除新的成員節(jié)點(diǎn)的效率, 測(cè)試結(jié)果可見(jiàn)圖7. 分析以上測(cè)試結(jié)果可知, 本方案中的群簽名部分在簽名上的效率要稍差, 驗(yàn)證效率良好, 考慮匿名背書中因?yàn)楹灻糠质遣⑿刑幚淼? 實(shí)際影響不會(huì)很大. 成員加入部分, 因?yàn)榘鲁蓡T的密鑰生成, 花費(fèi)時(shí)間較長(zhǎng), 但也在可接受的范圍內(nèi), 成員刪除部分則有著很高的效率. 圖7 (a) 簽名和驗(yàn)證; (b) 成員節(jié)點(diǎn)的加入; (c) 成員節(jié)點(diǎn)的刪除;Figure 7 (a) Signing and verification; (b) Joining of member nodes; (c) Deletion of member nodes 本部分實(shí)驗(yàn)通過(guò)部署版本1.4.6 的Hyperledger Fabric 并編寫代碼來(lái)仿真模擬實(shí)現(xiàn), 以測(cè)試本方案應(yīng)用對(duì)許可區(qū)塊鏈的效率的影響. 我們部署的Hyperledger Fabric 包含兩個(gè)組織, 每個(gè)組織各有兩個(gè)peer節(jié)點(diǎn), 它們同時(shí)具有背書節(jié)點(diǎn)及記賬節(jié)點(diǎn)身份, 五個(gè)orderer 節(jié)點(diǎn)用來(lái)實(shí)現(xiàn)排序服務(wù)及raft 共識(shí). 實(shí)驗(yàn)中的交易請(qǐng)求除了初始交易請(qǐng)求由排序節(jié)點(diǎn)發(fā)出, 其它均由組織2 的管理員節(jié)點(diǎn)上的客戶端發(fā)出. 設(shè)定的背書策略為上述四個(gè)peer 共同完成交易背書, 通過(guò)Golang 的math/rand 為背書節(jié)點(diǎn)隨機(jī)設(shè)定的背書權(quán)重, 范圍為1 至3, 權(quán)重總和達(dá)到5 即背書成功. 實(shí)驗(yàn)樣本采用2750 條獨(dú)立的交易數(shù)據(jù), 并將這些數(shù)據(jù)以50 為單位遞增, 分為10 組, 分別進(jìn)行交易的執(zhí)行實(shí)驗(yàn), 對(duì)最后的結(jié)果處理中, 我們?nèi)サ魧?shí)驗(yàn)結(jié)果中的最大及最小誤差項(xiàng)并對(duì)剩下數(shù)據(jù)進(jìn)行平均處理,實(shí)驗(yàn)測(cè)試結(jié)果可見(jiàn)表1、圖8. 對(duì)以上數(shù)據(jù)分析對(duì)比可知, 使用本方案中的匿名背書方法對(duì)Fabric 許可區(qū)塊鏈的交易執(zhí)行效率影響較小, 整個(gè)許可區(qū)塊鏈交易在保證背書身份的匿名前提下仍具有較高執(zhí)行效率. 圖8 (a) 匿名背書交易執(zhí)行時(shí)間與原Fabric 許可鏈交易執(zhí)行時(shí)間(平均); (b) 交易時(shí)間差值Figure 8 (a) Anonymous endorsement transaction time and original Fabric permissioned blockchain transaction time (average); (b) Trading time difference 表1 匿名背書許可區(qū)塊鏈交易執(zhí)行時(shí)間Table 1 Running time of anonymous endorsement permissioned blockchain transaction 本文在基于現(xiàn)有許可區(qū)塊鏈中存在的安全問(wèn)題, 提出了一種基于群簽名的許可區(qū)塊鏈匿名背書方案.通過(guò)中國(guó)剩余定理實(shí)現(xiàn)適用于許可區(qū)塊鏈匿名背書要求的群簽名方案, 該方案除了實(shí)現(xiàn)對(duì)背書節(jié)點(diǎn)身份的保護(hù)外, 還解決了現(xiàn)有許可區(qū)塊鏈匿名方案中存在的成員加入與刪除效率不高的問(wèn)題. 在此基礎(chǔ)上, 提出了一種以Hyperledger Fabric 許可區(qū)塊鏈為基礎(chǔ)的匿名背書方案, 該方案可以實(shí)現(xiàn)非對(duì)等的權(quán)重背書節(jié)點(diǎn)配置下的匿名背書, 以滿足許可區(qū)塊鏈應(yīng)用中的溯源要求. 通過(guò)在Hyperledger Fabric 許可區(qū)塊鏈上的仿真實(shí)驗(yàn), 給出方案的測(cè)試結(jié)果, 實(shí)驗(yàn)分析表明使用所提出的許可區(qū)塊鏈背書, 在具有匿名性的前提下仍有著較好的計(jì)算效率.3 許可區(qū)塊鏈的匿名背書
3.1 匿名背書的群簽名方案
3.2 匿名背書方案的設(shè)計(jì)
4 仿真實(shí)驗(yàn)及分析
4.1 群簽名性能測(cè)試及分析
4.2 Hyperledger Fabric 許可區(qū)塊鏈上的仿真實(shí)驗(yàn)及分析
5 結(jié)束語(yǔ)