楊亞濤, 蔡居良, 張?bào)戕? 袁 征
1(北京電子科技學(xué)院 電子與通信工程系,北京 100070)
2(北京電子科技學(xué)院 密碼科學(xué)與技術(shù)系,北京 100070)
3(西安電子科技大學(xué) 通信工程學(xué)院,陜西 西安 710071)
區(qū)塊鏈技術(shù)因其“去中心化”與“去信任化”等特點(diǎn),可在可信第三方不參與的情況下與陌生節(jié)點(diǎn)之間進(jìn)行安全的信息傳遞,有效提高了信息交互效率,降低交互成本,在比特幣、供應(yīng)鏈等領(lǐng)域具有較為廣闊的前景[1].哈希算法以及數(shù)字簽名算法在區(qū)塊鏈中應(yīng)用廣泛,用以驗(yàn)證區(qū)塊以及交易的正確性.區(qū)塊鏈在實(shí)際場(chǎng)景中應(yīng)用時(shí),不僅需要核驗(yàn)節(jié)點(diǎn)的公鑰地址,還應(yīng)驗(yàn)證各個(gè)節(jié)點(diǎn)的真實(shí)身份.傳統(tǒng)的PKI體制因?yàn)榭尚胖行牡臋?quán)重過(guò)大,不符合區(qū)塊鏈“去中心化”與“去信任化”的特點(diǎn).因此,無(wú)證書(shū)的加密與簽名方案[2]可以在區(qū)塊鏈技術(shù)中得到應(yīng)用.2012年,Yu等人[3]提出一種在標(biāo)準(zhǔn)模型下可證明安全的無(wú)證書(shū)簽名方案,但該方案需要使用5次以上的雙線性對(duì)運(yùn)算,計(jì)算效率較低.同年,Gong等人[4]提出基于橢圓曲線的無(wú)證書(shū)密碼體制,但其并不能有效抵抗第一類超級(jí)攻擊者的攻擊.2017年,Tseng等人[5]提出一種抗連續(xù)泄漏攻擊的安全無(wú)證書(shū)簽名方案.
隱私泄露是區(qū)塊鏈技術(shù)中不容忽視的問(wèn)題[6].與傳統(tǒng)中心化結(jié)構(gòu)不同,區(qū)塊鏈機(jī)制不依賴特定中心節(jié)點(diǎn)處理與存儲(chǔ)數(shù)據(jù),因此可以避免惡意中心或因其他原因?qū)е碌闹行男畔⑿孤禰7].但為了驗(yàn)證交易信息,區(qū)塊鏈中的所有交易記錄必須公開(kāi),因此將顯著增加信息泄露風(fēng)險(xiǎn).Kosba等人[8]認(rèn)為,交易地址暴露于區(qū)塊鏈環(huán)境中容易被跟蹤查找.因?yàn)閰^(qū)塊鏈技術(shù)與當(dāng)前 IT架構(gòu)存在區(qū)別,以往的隱私保護(hù)方案并不適用.所以,區(qū)塊鏈的隱私保護(hù)需要更具針對(duì)性的機(jī)制[9].2013年,Miers等人[10]基于比特幣提出了擁有匿名性的區(qū)塊鏈數(shù)字貨幣方案——零幣.該方案通過(guò)運(yùn)用零知識(shí)證明等密碼學(xué)技術(shù),以隱藏用戶地址、切斷交易雙方聯(lián)系的方式保證了交易的非關(guān)聯(lián)性,從而達(dá)到匿名與不可追蹤的效果.但該方案基于公有鏈進(jìn)行設(shè)計(jì),區(qū)塊生成速度與比特幣近似,無(wú)法進(jìn)行高效率的交易流通,并且節(jié)點(diǎn)需要額外維護(hù)貨幣作廢列表以保證交易的惟一性,在一定程度上影響了交易驗(yàn)證的效率.2016年,Shen等人[11]提出了基于環(huán)簽名的區(qū)塊鏈秘密交易方案.該方案隨機(jī)選取無(wú)關(guān)地址后連同交易發(fā)起方進(jìn)行環(huán)簽名,達(dá)到混淆交易用戶身份的目的.但該方案與零幣方案均存在因切斷交易關(guān)聯(lián)性而導(dǎo)致溯源性較差的問(wèn)題,難以在實(shí)際場(chǎng)景中得到應(yīng)用,并且單次交易信息量過(guò)大,而該方案的匿名性取決于參與環(huán)簽名的地址數(shù)量,為縮小交易信息量而減少地址個(gè)數(shù),也將面臨去匿名化的風(fēng)險(xiǎn).
群簽名的概念由Chaum和Heyst[12]在1991年提出后,它以獨(dú)特的性質(zhì)引起人們的關(guān)注并被廣泛研究.群簽名允許群體中任何一名成員代表整個(gè)群體對(duì)消息進(jìn)行匿名簽名.與普通數(shù)字簽名一樣,群簽名可以公開(kāi)驗(yàn)證,并且發(fā)生糾紛時(shí),群管理員可以打開(kāi)群簽名以揭露簽名者的真實(shí)身份.基于身份的群簽名方案具有在身份標(biāo)識(shí)驗(yàn)證的基礎(chǔ)上,采用群簽名的方式保護(hù)用戶的隱私,兼具二者特點(diǎn),在區(qū)塊鏈環(huán)境中具有應(yīng)用價(jià)值.目前,許多基于身份的群簽名方案被提出.2008年,Zhang等人[13]提出一種針對(duì)惡意PKG的無(wú)證書(shū)群簽名方案.2010年,陳虎等人[14]提出一種高效的無(wú)證書(shū)簽名與群簽名方案,具有前向安全性等特點(diǎn),但其并不能使用戶的不同交易隱蔽關(guān)聯(lián)性,無(wú)法直接應(yīng)用于區(qū)塊鏈中.2012年,Zhan等人[15]提出基于身份的門限群簽名方案.同年,Cheng等人[16]提出了實(shí)用的基于身份的群簽名方案.2015年,Lin等人[17]提出一種基于群簽名和基于身份簽名的安全隱私保護(hù)協(xié)議.2017年,Bande等人[18]提出具有驗(yàn)證者本地撤銷的安全隱私保護(hù)群簽名方案,其安全性基于強(qiáng)RSA假設(shè).但該方案并非基于身份,所以難以抵抗公鑰替換攻擊.以上方案雖然可以實(shí)現(xiàn)無(wú)證書(shū)簽名以及利用群簽名保護(hù)簽名者隱私,但均沒(méi)有針對(duì)區(qū)塊鏈特殊架構(gòu)進(jìn)行設(shè)計(jì),無(wú)法應(yīng)用于區(qū)塊鏈高開(kāi)放度的環(huán)境中,對(duì)節(jié)點(diǎn)身份進(jìn)行隱藏與保護(hù).
本文的貢獻(xiàn)在于,提出一種基于SM9算法可證明安全的區(qū)塊鏈隱私保護(hù)方案,對(duì)現(xiàn)有SM9算法進(jìn)行適當(dāng)優(yōu)化,提出了一種基于 SM9算法的群簽名方案,以區(qū)塊鏈中的聯(lián)盟鏈為應(yīng)用環(huán)境,實(shí)現(xiàn)對(duì)交易過(guò)程的隱私保護(hù).方案效率較現(xiàn)有方案相比,所需指數(shù)運(yùn)算與雙線性對(duì)運(yùn)算均有減少,運(yùn)算效率得到提升,可以為聯(lián)盟鏈的應(yīng)用提供有效安全和隱私保護(hù)支撐.
區(qū)塊鏈?zhǔn)且环N按照時(shí)間順序?qū)?shù)據(jù)區(qū)塊以鏈條的方式組合成特定的數(shù)據(jù)結(jié)構(gòu)[19],并以密碼學(xué)方式保證的不可篡改和不可偽造的去中心化共享總賬,能夠安全存儲(chǔ)簡(jiǎn)單的、有先后關(guān)系的、能在系統(tǒng)內(nèi)驗(yàn)證的數(shù)據(jù)[20].區(qū)塊鏈可以看做存儲(chǔ)數(shù)字記錄的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)由網(wǎng)絡(luò)節(jié)點(diǎn)共享,節(jié)點(diǎn)可以提交新的記錄,區(qū)塊鏈網(wǎng)絡(luò)通過(guò)共識(shí)機(jī)制保證節(jié)點(diǎn)之間數(shù)據(jù)的一致性,記錄一旦被輸入,就永遠(yuǎn)不會(huì)被更改或刪除.
總體上區(qū)塊鏈可以分為 3種類型:公有鏈、聯(lián)盟鏈和私有鏈,本文設(shè)計(jì)的隱私保護(hù)方案主要在聯(lián)盟鏈中實(shí)現(xiàn).在聯(lián)盟鏈中,區(qū)塊鏈的區(qū)塊和交易的有效性由預(yù)先設(shè)定的一個(gè)驗(yàn)證者群體決定,這個(gè)驗(yàn)證群體形成一個(gè)聯(lián)盟.例如,要使得聯(lián)盟鏈中的一個(gè)區(qū)塊有效,需要聯(lián)盟中 50%以上的成員認(rèn)可通過(guò),新區(qū)塊才有效.區(qū)塊鏈上的信息可以是公開(kāi)的,也可以只對(duì)聯(lián)盟成員可見(jiàn).
SM9密碼算法涉及有限域、橢圓曲線、橢圓曲線上雙線性對(duì)的運(yùn)算等基本知識(shí)和技術(shù)[21],其中,SM9數(shù)字簽名算法包括數(shù)字簽名生成算法和驗(yàn)證算法.簽名者持有一個(gè)標(biāo)識(shí)和一個(gè)相應(yīng)的私鑰,該私鑰由密鑰生成中心(key generation center,簡(jiǎn)稱 KGC)通過(guò)主私鑰和簽名者的標(biāo)識(shí)結(jié)合產(chǎn)生.簽名者用自身私鑰對(duì)數(shù)據(jù)產(chǎn)生數(shù)字簽名,驗(yàn)證者用簽名者的標(biāo)識(shí)生成其公鑰,驗(yàn)證簽名的有效性,即驗(yàn)證發(fā)送數(shù)據(jù)的真實(shí)性、完整性和數(shù)據(jù)發(fā)送者的身份.
群簽名是由包含下面過(guò)程的數(shù)字簽名方案[22]組成.
(1) 創(chuàng)建:一個(gè)用以產(chǎn)生群公鑰和私鑰的多項(xiàng)式時(shí)間概率算法;
(2) 加入:一個(gè)用戶和群管理員之間使用戶成為群管理員的交互式協(xié)議.執(zhí)行該協(xié)議可以產(chǎn)生群?jiǎn)T的私鑰和成員證書(shū),并使群管理員得到群成員的私有密鑰;
(3) 簽名:一個(gè)概率算法,當(dāng)輸入一個(gè)消息和一個(gè)群成員的私鑰后,輸出對(duì)消息的簽名;
(4) 驗(yàn)證:一個(gè)在輸入消息原文、對(duì)消息的群簽名以及群公鑰后驗(yàn)證簽名是否有效的算法;
(5) 打開(kāi):一個(gè)在給定一個(gè)簽名及群私鑰的條件下,確認(rèn)簽名人的合法身份的算法.
本文提出一種適用于區(qū)塊鏈技術(shù)的隱私保護(hù)方案,通過(guò)對(duì)廣播交易信息中用戶身份信息進(jìn)行多KGC群簽名運(yùn)算,實(shí)現(xiàn)隱藏用戶身份以及同一用戶不同交易之間的關(guān)聯(lián)性.具體描述如下.
本方案基于聯(lián)盟鏈進(jìn)行設(shè)計(jì),節(jié)點(diǎn)由主要節(jié)點(diǎn)與次要節(jié)點(diǎn)構(gòu)成,具體結(jié)構(gòu)如圖1所示.
次要節(jié)點(diǎn)持有各自的簽名密鑰對(duì)與群簽名密鑰對(duì),次要節(jié)點(diǎn)為群簽名中的用戶,次要節(jié)點(diǎn)之間可進(jìn)行交易,完成區(qū)塊鏈中點(diǎn)對(duì)點(diǎn)交易信息傳遞的流程.交易商定結(jié)束,需對(duì)信息進(jìn)行群簽名后進(jìn)行廣播,新區(qū)塊將交易信息寫入并由各個(gè)節(jié)點(diǎn)確認(rèn)后即為生效.
次要節(jié)點(diǎn)之間需要使用簽名來(lái)驗(yàn)證對(duì)方身份,并使用群簽名生成需要廣播的交易信息.
簽名具體步驟如下.
1. 簽名生成
設(shè)消息為比特串M,則次要節(jié)點(diǎn)A若需要對(duì)其進(jìn)行數(shù)字簽名,則首先計(jì)算群GT中元素g=e(P1,Ppub-e),并選取隨機(jī)數(shù)r∈[1,N-1],計(jì)算w=gr以及整數(shù)h=H2(M||w,N),之后,計(jì)算整數(shù)l=(r-h) modN,若l為0,則重新選取隨機(jī)數(shù);l不為0時(shí),則最后計(jì)算S=[l]dsA,可得到關(guān)于消息M的簽名(h,S).
2. 簽名驗(yàn)證
設(shè)驗(yàn)證者為次要節(jié)點(diǎn)B,其接收到的消息M′的簽名為(h′,S′),如需要驗(yàn)證簽名,則需要首先驗(yàn)證h′∈[1,N-1]以及S′∈G1,若均成立,則計(jì)算群GT中的元素g=e(P1,Ppub-e),再計(jì)算群GT中的元素t=gh′與整數(shù)h1=H1(IDA||hid,N),之后計(jì)算群G2中的元素P=[h1]P2+Ppub-s與群GT中的元素u=e(S′,P),再計(jì)算群GT中的元素w′=u·t,最后計(jì)算h2=H2(M′||w′,N)并與h′進(jìn)行比較,若一致,則驗(yàn)證通過(guò).
相比 SM9標(biāo)準(zhǔn)的簽名驗(yàn)簽算法,考慮到聯(lián)盟區(qū)塊鏈中多個(gè)主要節(jié)點(diǎn)與 KGC的功能要求,我們提出采用多KGC模式對(duì)標(biāo)準(zhǔn)SM9簽名算法的參數(shù)生成步驟進(jìn)行改進(jìn),將KGC的功能分配于主要節(jié)點(diǎn),主要節(jié)點(diǎn)共同參與參數(shù)維護(hù)與密鑰生成,符合聯(lián)盟鏈部分去中心化的架構(gòu)要求,以及將無(wú)證書(shū)體制與聯(lián)盟區(qū)塊鏈運(yùn)作模式結(jié)合的需要.因簽名算法基于SM9算法進(jìn)行改進(jìn),故加密算法改進(jìn)方式于此類似,不再贅述.
群簽名主要功能如下.
1. 創(chuàng)建
設(shè)群管理員(group manager,簡(jiǎn)稱GM)的身份為IDGM,則其需要向全部KGC申請(qǐng)建立群,KGC在核實(shí)GM身份后,將IDGM記錄,以便之后KGC對(duì)新加入的成員生成并發(fā)放群私鑰.申請(qǐng)群成功后,該群的公鑰即為GM身份IDGM.群管理員的私鑰則由簽名算法生成并交由管理員GM保存.
2. 加入
當(dāng)次要節(jié)點(diǎn)A想加入群時(shí),主要分兩種情況.
(2) 若KGC在群中,則次要節(jié)點(diǎn)A可直接將自己的身份IDA通過(guò)安全信道送于KGC核實(shí),通過(guò)后,群密鑰對(duì)生成方法與第1種情況相同.
3. 群簽名
若群中次要節(jié)點(diǎn)A要對(duì)消息M進(jìn)行群簽名,則其需要首先計(jì)算g=e(P1,Ppub-e),并秘密選取隨機(jī)數(shù)r1∈[1,N-1]與r2∈[1,N-1],計(jì)算w=gr1,之后計(jì)算h=H2(M||w,N),計(jì)算S1= (r2-1)·(r1-h) ·dsA與S2= (r2-1)(r1-h) ·dsAG,最后計(jì)算h1=H1(IDA||hid,N),P3′=[h1]P2+Ppub-s,P3=[r2]P3′得出次要節(jié)點(diǎn)A對(duì)消息M的群簽名(h,P3,S1,S2).
4. 驗(yàn)證
對(duì)于接收到的消息M′與其群簽名 (h′,P3′,S1′,S2′),群中次要節(jié)點(diǎn)B若想驗(yàn)證其是否屬于群IDGM,則需要首先計(jì)算h1=H1(IDGM||hid,N),接著計(jì)算P=[h1]P2+Ppub-s,之后計(jì)算u1=e(S2,P)與u2=e(S1,Ppub-e),若u1≠u2,則驗(yàn)證不通過(guò);否則繼續(xù)計(jì)算u=e(S1,P3),g=e(P1,Ppub-e)與t=gh′,最終計(jì)算w′=u·t,得到h=H2(M′||w′,N).對(duì)比h′與h,一致則驗(yàn)證通過(guò),至此可證明該消息由群IDGM中某個(gè)成員所簽名.
5. 打開(kāi)
在區(qū)塊鏈交易中,節(jié)點(diǎn)間進(jìn)行信息交互時(shí)需要核對(duì)對(duì)方身份,所以將簽名算法與群簽名算法一同使用,當(dāng)需要核實(shí)信息簽名來(lái)源時(shí),KGC可根據(jù)所持有的用戶信息IDA找到該用戶所屬密鑰,并查看是否已被撤銷或更新,以確定交易產(chǎn)生的時(shí)間以及是否合法.
6. 系統(tǒng)維護(hù)與成員撤銷
當(dāng) GM 需要撤銷群成員節(jié)點(diǎn)時(shí),在將要撤銷的成員信息中記錄“已作廢”標(biāo)記;而當(dāng)系統(tǒng)參數(shù)需要更新時(shí),KGC可重新生成系統(tǒng)參數(shù),并且更新用戶信息,分發(fā)給群成員新的密鑰對(duì).同時(shí)保留曾經(jīng)使用的系統(tǒng)參數(shù).
次要節(jié)點(diǎn)之間的交易流程如圖2所示.
交易進(jìn)行時(shí),發(fā)起方節(jié)點(diǎn)A需將與本次交易相關(guān)的上次交易信息的所屬編號(hào)Num(TX0),與上次交易中,節(jié)點(diǎn)A所屬的哈希值HashA(TX0),使用與上次交易相同的群簽名要素P3(A)進(jìn)行群簽名(h,P3(A),S1,S2)后,結(jié)合本此交易的待交易信息UTXO0(B)(如貨幣數(shù)量等)進(jìn)行簽名,使用接收方節(jié)點(diǎn)B的身份為公鑰進(jìn)行加密,并將信息傳遞給節(jié)點(diǎn)B.交易請(qǐng)求信息①中包含的內(nèi)容為
其中,Sig(M)表示基于SM9算法的多KGC簽名方案,GSig(M)表示使用本文設(shè)計(jì)的群簽名方案.
節(jié)點(diǎn)B接受后,使用私鑰進(jìn)行解密,使用節(jié)點(diǎn)A的公鑰驗(yàn)證簽名,以及使用群身份進(jìn)行群簽名驗(yàn)證,全部通過(guò)并且核對(duì)本次交易的輸入P3(A)與上次交易的輸出P3(A)′是否一致,相同后確認(rèn)交易信息,無(wú)誤后組合Num(TX0),HashA(TX0)以及UTXO0(B),并計(jì)算其哈希值,作為所屬自己的本次交易輸出哈希值,并將此數(shù)據(jù)進(jìn)行群簽名(h,P3(B),S1,S2),最終將結(jié)果簽名,使用節(jié)點(diǎn)A公鑰進(jìn)行加密,返回節(jié)點(diǎn)A,交易確認(rèn)信息②中包含的內(nèi)容為
節(jié)點(diǎn)A解密驗(yàn)簽通過(guò)后,將交易信息進(jìn)行廣播,并入新生區(qū)塊中,廣播的交易信息(TX)結(jié)構(gòu)如圖3所示.
廣播的交易信息主要包括與本次交易關(guān)聯(lián)的上次交易信息TX0以及本次交易的輸出UTXO.TX0用于追溯上次交易的相關(guān)信息,并據(jù)此核對(duì)本次交易輸入是否合理;UTXO主要包括各個(gè)輸出所屬的交易信息UTXO0以及輸出哈希值與群簽名,除了用于各個(gè)節(jié)點(diǎn)的確認(rèn)之外,也作為下次交易輸入的核對(duì)信息.
本方案基于聯(lián)盟鏈,主要節(jié)點(diǎn)負(fù)責(zé)區(qū)塊生成.各主要節(jié)點(diǎn)首先需商定區(qū)塊生成的共識(shí)算法,確保不會(huì)生成分叉區(qū)塊.次要節(jié)點(diǎn)不能生成區(qū)塊.區(qū)塊結(jié)構(gòu)如圖4所示.
其中,新生區(qū)塊需要記錄上一個(gè)區(qū)塊的編號(hào)Num(Block0)以及其哈希值Hash(Block0)來(lái)保證區(qū)塊之間的關(guān)聯(lián)性.同時(shí),生成區(qū)塊時(shí),需要確定本區(qū)塊的編號(hào)Num(Block)并計(jì)算本區(qū)塊中全部數(shù)據(jù)的哈希值Hash(Block),將此4個(gè)數(shù)據(jù)組合,進(jìn)行簽名,最后發(fā)布.
各節(jié)點(diǎn)在接受新區(qū)塊時(shí),需對(duì)其進(jìn)行身份驗(yàn)證,確認(rèn)其為主要節(jié)點(diǎn)生成,并且與最近一次生成的區(qū)塊相關(guān)聯(lián)后,再進(jìn)行交易信息驗(yàn)證流程.各次要節(jié)點(diǎn)接收到交易信息后,需要首先驗(yàn)證其群簽名是否有效,驗(yàn)證通過(guò)后,尋找與此交易輸入關(guān)聯(lián)的上一次的交易輸出UTXO0,核對(duì)本次交易輸入端的P3與上次交易輸出端的3P′是否相同:若一致,則本次交易驗(yàn)證通過(guò).當(dāng)本次交易經(jīng)過(guò)全部次要節(jié)點(diǎn)中半數(shù)以上驗(yàn)證通過(guò)后,才可并入新區(qū)塊中.至此,節(jié)點(diǎn)A與B的交易確認(rèn)有效.
本方案在保護(hù)節(jié)點(diǎn)用戶身份隱私的同時(shí),因交易采用 UTXO的形式,具有可溯源特性.在實(shí)際場(chǎng)景,如供貨鏈、物品買賣、房屋租賃等交易中,不同節(jié)點(diǎn)用戶交易過(guò)程中可能會(huì)產(chǎn)生糾紛,通過(guò)應(yīng)用本方案,可進(jìn)行溯源追責(zé).本方案的具體交易流程如圖5所示.
交易流程說(shuō)明如下.
1) 當(dāng)次要節(jié)點(diǎn)A準(zhǔn)備向B發(fā)起交易時(shí),需首先將與本次交易關(guān)聯(lián)的上次的交易輸出以及本次的交易內(nèi)容進(jìn)行簽名與群簽名,加密處理后,形成如公式(1)所示內(nèi)容,發(fā)送至次要節(jié)點(diǎn)B;
2) 節(jié)點(diǎn)B收到后進(jìn)行解密與驗(yàn)簽,審核交易信息無(wú)誤后,附上自己關(guān)于此次交易自身的群簽名,做簽名加密處理后,形成如公式(2)所示內(nèi)容,返回節(jié)點(diǎn)A;
3) 節(jié)點(diǎn)A審核無(wú)誤后,將所有相關(guān)信息組合成如圖3所示的等待入鏈的交易信息,包括上次交易的編號(hào)Num(TX0)及哈希值HashA(TX0)、本次交易輸入輸出的群簽名GSig(Hash0)與GSig(HashB)等內(nèi)容,發(fā)送至主要節(jié)點(diǎn)V1.此時(shí),交易發(fā)起方節(jié)點(diǎn)A與接收方節(jié)點(diǎn)B等候新區(qū)塊發(fā)布與審核;
4) 主要節(jié)點(diǎn)V1將收到的所有交易信息以圖4所示的結(jié)構(gòu)寫入新生區(qū)塊,發(fā)布區(qū)塊并等待次要節(jié)點(diǎn)反饋,所有進(jìn)行交易后等待的次要節(jié)點(diǎn)收到發(fā)布的新區(qū)塊后,對(duì)其中信息進(jìn)行群簽名驗(yàn)簽,并將驗(yàn)簽結(jié)果返回主要節(jié)點(diǎn)V1;
5) 當(dāng)V1收到當(dāng)前參與交易節(jié)點(diǎn)半數(shù)以上的驗(yàn)簽通過(guò)信息后,將新生區(qū)塊并入鏈中.至此,所有在此區(qū)塊中的交易生效,交易流程結(jié)束.
上述交易流程中采用 UTXO的交易方式,所有節(jié)點(diǎn)均可通過(guò)查看已入鏈區(qū)塊的交易信息進(jìn)行交易溯源.如在貨物買賣場(chǎng)景中,若交易接收方收到的貨物出現(xiàn)了質(zhì)量問(wèn)題,則可以通過(guò)對(duì)該次交易逐鏈溯源的方式,找到該貨物的首發(fā)地址,即為主要節(jié)點(diǎn)的供貨商或該貨物的生產(chǎn)廠家進(jìn)行追責(zé).
對(duì)于簽名算法,在簽名驗(yàn)證階段,需要驗(yàn)證h2與h′是否相等,因?yàn)閔2=H2(M′||w′,N),h′=H2(M||w,N),驗(yàn)證二者是否相等等價(jià)于驗(yàn)證w與w′是否相等.因?yàn)閡=e(S′,P),而:
又因:
則:
所以驗(yàn)證通過(guò),簽名算法正確性得到證明.
對(duì)于群簽名算法,在群簽名驗(yàn)證階段,需要比對(duì)u1與u2是否一致,所以其正確性證明如下:
u1=e(S2,P)=e(S2,([h1]P2+Ppub-s))=e(S2,([h1]P2+[ks]P2)),而:
由雙線性對(duì)性質(zhì)可得:
二者結(jié)果一致,所以可繼續(xù)執(zhí)行下面的驗(yàn)證過(guò)程.而:
二者同樣一致,所以驗(yàn)證通過(guò),方案正確性得到證明.
3.2.1 不可偽造性
根據(jù)無(wú)證書(shū)簽名的安全模型[3]可知,方案需要做到成員密鑰對(duì)于簽名不可偽造.
· 第1類敵手——公鑰替換攻擊
對(duì)于簽名算法,因?yàn)榛谏矸莸臒o(wú)證書(shū)簽名算法使用節(jié)點(diǎn)的ID為公鑰進(jìn)行簽名,所以可抵抗公鑰替換攻擊.對(duì)于群簽名算法,敵手E1知道群節(jié)點(diǎn)A的公鑰IDA,若利用此身份進(jìn)行通信,則必須偽造該身份的密鑰對(duì).
· 第2類敵手——惡意的KGC攻擊
在區(qū)塊生成與驗(yàn)證階段中,主要節(jié)點(diǎn)負(fù)責(zé)生成區(qū)塊,所生成區(qū)塊中包含其自身簽名,各節(jié)點(diǎn)需要驗(yàn)證后方可并入鏈中.除了主要節(jié)點(diǎn),其余節(jié)點(diǎn)均不能生成區(qū)塊,除了由主要節(jié)點(diǎn)生成的合法區(qū)塊,任何新區(qū)塊均為無(wú)效區(qū)塊,保證了新生區(qū)塊的不可偽造性.各個(gè)節(jié)點(diǎn)驗(yàn)證TX時(shí),需要驗(yàn)證輸入與輸出的群簽名,通過(guò)后才能并入?yún)^(qū)塊,保證了交易信息的不可偽造性.
3.2.2 前向與后向安全性
當(dāng)群簽名方案的系統(tǒng)參數(shù)需要更新時(shí),KGC需重新商定ks以及根據(jù)各自持有的kej確定主私鑰,向所有節(jié)點(diǎn)發(fā)放新的密鑰對(duì).以前的系統(tǒng)參數(shù)仍要保留,群成員節(jié)點(diǎn)可以根據(jù)當(dāng)時(shí)生效的參數(shù)來(lái)驗(yàn)證更新前的簽名.對(duì)于系統(tǒng)參數(shù)而言,由于ks與kej均為隨機(jī)選取,所以二者在更新前后不存在聯(lián)系,敵手無(wú)法根據(jù)當(dāng)前階段的密鑰偽造更新前的密鑰.若敵手持有更新前的密鑰,也無(wú)法加入群,同時(shí)也無(wú)法偽造當(dāng)前階段正確的群簽名.
給定合法的群簽名(h,P3,S1,S2),從算法流程可知:簽名驗(yàn)證過(guò)程中,僅使用群身份IDGM作為公鑰進(jìn)行驗(yàn)證,來(lái)判斷是否為群內(nèi)成員節(jié)點(diǎn),但不能驗(yàn)證具體成員節(jié)點(diǎn)身份.
本方案基于 SM9算法改進(jìn)設(shè)計(jì),除了初始參數(shù)與密鑰生成之外,簽名驗(yàn)簽步驟基本一致,所以計(jì)算代價(jià)與SM9數(shù)字簽名算法基本相同.而本方案還可有效抵抗惡意KGC攻擊,彌補(bǔ)了SM9數(shù)字簽名算法的不足.
為了說(shuō)明本方案的運(yùn)算效率與安全性,本文列舉幾種典型方案進(jìn)行對(duì)比.現(xiàn)定義符號(hào)TE表示指數(shù)運(yùn)算,TM表示群中元素點(diǎn)乘運(yùn)算,TB表示雙線性對(duì)運(yùn)算.由于dsA為區(qū)塊鏈中群成員節(jié)點(diǎn)持有,可將g=e(dsA,P2)視為預(yù)運(yùn)算,不作為運(yùn)算步驟考慮.可得到性能對(duì)比分析表,見(jiàn)表1.
Table 1 Comparison of efficiency and security表1 方案效率與安全性對(duì)比
在上述運(yùn)算過(guò)程中,雙線性對(duì)運(yùn)算消耗資源較多,因此主要比較該運(yùn)算在方案中的使用次數(shù)[26].從表1中可以看出:本文的方案在驗(yàn)簽步驟上較文獻(xiàn)[2]減少 2次雙線性對(duì)運(yùn)算,驗(yàn)簽效率提高約 40%;與文獻(xiàn)[23,24]相比,雖然雙線性對(duì)運(yùn)算的使用次數(shù)相同,但本方案指數(shù)運(yùn)算分別減少4次與2次,計(jì)算效率整體得到提高.本方案與SM9算法與文獻(xiàn)[25]相比整體效率相當(dāng).對(duì)于方案安全性,文獻(xiàn)[2]與SM9簽名算法均無(wú)法抵抗第二類攻擊,本方案通過(guò)多KGC的方式,安全性更高,滿足了區(qū)塊鏈節(jié)點(diǎn)認(rèn)證以及交易信息確認(rèn)中保護(hù)身份隱私的需要.
除此之外,本文列舉兩種主流的區(qū)塊鏈系統(tǒng)隱私保護(hù)方案進(jìn)行對(duì)比.考慮到實(shí)際應(yīng)用中可能發(fā)生的追責(zé)情況,方案應(yīng)在保護(hù)隱私的同時(shí),滿足一定的溯源性,且為了滿足高頻率的交易請(qǐng)求,區(qū)塊生成時(shí)間應(yīng)在保證安全的基礎(chǔ)上擁有較快的生成速率.對(duì)比分析表見(jiàn)表2.
Table 2 Comparison of different privacy preserving schemes表2 隱私保護(hù)方案對(duì)比
通過(guò)表 2對(duì)比可以看出:在交易關(guān)聯(lián)性方面,文獻(xiàn)[11]方案由于交易發(fā)起方通過(guò)環(huán)簽名的方式隱藏身份,但通過(guò)統(tǒng)計(jì)分析等方法,仍存在暴露關(guān)聯(lián)交易的風(fēng)險(xiǎn);本方案在具有強(qiáng)匿名性的同時(shí),由于P3=[r2]P3′,同一節(jié)點(diǎn)用戶的不同交易均存在密碼學(xué)計(jì)算困難問(wèn)題,無(wú)法證明關(guān)聯(lián),保證了弱關(guān)聯(lián)性.在溯源性方面,由于文獻(xiàn)[10]方案采用貨幣“生成-銷毀”以及零知識(shí)證明認(rèn)證的方式來(lái)代替用戶間的交易過(guò)程,導(dǎo)致溯源性弱;而本方案沿用區(qū)塊鏈中的 UTXO方式進(jìn)行區(qū)塊生成,使得交易仍可溯源,在實(shí)際場(chǎng)景應(yīng)用中,主要節(jié)點(diǎn)需要公開(kāi)身份,而本方案初始交易均需由主要節(jié)點(diǎn)發(fā)起,故可在需要情況下進(jìn)行溯源追蹤.在交易信息量方面,文獻(xiàn)[10,11]方案每筆交易需要產(chǎn)生的數(shù)據(jù)量較大,本方案在保證性能的前提下,交易信息量分別為兩種隱私保護(hù)方案的1/5與1/3,減輕了區(qū)塊容量的壓力,方案更適用于實(shí)際應(yīng)用,具有較高的安全性與通信效率.
本文主要測(cè)試方案中所使用的群簽名算法的運(yùn)行時(shí)間以及主要節(jié)點(diǎn)生成新區(qū)塊后驗(yàn)證成功與并入鏈中所需的時(shí)間.方案仿真使用Java語(yǔ)言進(jìn)行測(cè)試,使用Windows系統(tǒng),CPU2.4GHz,內(nèi)存為4GB.新生區(qū)塊由一個(gè)主要節(jié)點(diǎn)產(chǎn)生,并由10個(gè)次要節(jié)點(diǎn)進(jìn)行驗(yàn)證.由圖6~圖8可知,群簽名生成與驗(yàn)證所需時(shí)間為21.632ms與46.141ms,所需時(shí)間較短;對(duì)于生成交易信息過(guò)程,在節(jié)點(diǎn)確認(rèn)信息無(wú)誤的情況下,生成發(fā)送至主要節(jié)點(diǎn)的交易信息所需時(shí)間為 133.642ms,所需時(shí)間較短;而對(duì)于區(qū)塊驗(yàn)證過(guò)程,在不考慮區(qū)塊內(nèi)容傳輸時(shí)間的情況下,過(guò)半數(shù)節(jié)點(diǎn)驗(yàn)證通過(guò),新生區(qū)塊合理并入鏈中所需時(shí)間為63.572ms;主要節(jié)點(diǎn)產(chǎn)生新區(qū)塊的間隔定為2s,由此可知,在擁有10個(gè)次要節(jié)點(diǎn)時(shí),一次交易從產(chǎn)生到有效所需的時(shí)間為2.063s,交易時(shí)間相對(duì)較短,可以滿足區(qū)塊鏈交易實(shí)際需要.
本文通過(guò)將 SM9算法、群簽名與區(qū)塊鏈技術(shù)相結(jié)合,提出并設(shè)計(jì)了一種可應(yīng)用于區(qū)塊鏈環(huán)境中的隱私保護(hù)方案,通過(guò)多 KGC群簽名機(jī)制隱藏了交易雙方的節(jié)點(diǎn)身份.通過(guò)安全性證明與效率分析,本方案具有簽名不可偽造性、可保證節(jié)點(diǎn)匿名性及前向安全性,計(jì)算效率較目前提出的方案有較大提升.綜合而言,本方案在運(yùn)算時(shí)間與安全性方面整體具有較大優(yōu)勢(shì),可實(shí)現(xiàn)在節(jié)點(diǎn)間進(jìn)行身份驗(yàn)證的同時(shí),保護(hù)節(jié)點(diǎn)隱私的目的,符合聯(lián)盟區(qū)塊鏈部分去中心化和保護(hù)節(jié)點(diǎn)隱私的要求.本方案可應(yīng)用于大量需要驗(yàn)證用戶身份的場(chǎng)合,如房屋租賃、實(shí)物交易等等.如何根據(jù)具體應(yīng)用場(chǎng)景簡(jiǎn)化交易流程,提高單位時(shí)間內(nèi)的交易數(shù)量,可以作為下一階段的研究工作.