董順宇 唐 波 劉金會(huì),
1(西北工業(yè)大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 西安 710129)
2(西北工業(yè)大學(xué)深圳研究院 廣東深圳 518057)
(dongshunyu@mail.nwpu.edu.cn)
比特幣是一種去中心化的加密貨幣,由Nakamoto[1]于2008年推出,并于2009年1月部署.比特幣具有多個(gè)特點(diǎn),包括:點(diǎn)對(duì)點(diǎn)協(xié)議;通過(guò)工作量證明(proof of work, PoW)協(xié)議[2]進(jìn)行比特幣的去中心化生產(chǎn);通過(guò)透明交易、偽匿名和個(gè)人隱私保護(hù)防止雙重支出.這些都使得比特幣越來(lái)越受歡迎.
在比特幣網(wǎng)絡(luò)中,比特幣地址充當(dāng)用戶賬戶.一般來(lái)說(shuō),匿名化的目的是防止攻擊者通過(guò)比特幣網(wǎng)絡(luò)和用于記錄交易的區(qū)塊鏈發(fā)現(xiàn)比特幣地址與真實(shí)或虛擬用戶身份信息之間的關(guān)系.相反,去匿名化是揭示比特幣地址與用戶之間的關(guān)系,其中IP地址是重要的用戶身份信息.然而,它容易受到一些去匿名化攻擊.對(duì)于去匿名化攻擊的防御方法有很多種,最常見(jiàn)的是使用比特幣混幣的方法.
關(guān)于比特幣混幣的研究起源于Maxwell[3]提出的CoinJoin匿名化方法.目前關(guān)于混幣的研究集中在3個(gè)方向:1)使用中心化網(wǎng)站,如BitcoinFog.c,BitLaundry.com,Blockchain.info,而Mixcoin[4]是一個(gè)有代表性的研究;2)去中心化協(xié)議,如Fair Exchange,XIM,CoinParty,CoinShuffle,它們與比特幣協(xié)議兼容;3)新的混幣技術(shù),如Zerocoin,Zerocash,Pinocchio,CryptoNote,它們與比特幣協(xié)議不兼容,必須在新的區(qū)塊鏈中應(yīng)用.
集中混合中心化解決方案:最早的提議之一是Mixcoin.對(duì)Mixcoin改進(jìn)后的一個(gè)集中混合中心化解決方案是Blindcoin[5].它本質(zhì)上為Mixcoin增加了致盲性.Alice使用盲簽名從混合器獲得授權(quán),因此混合器看不到接收者的身份.當(dāng)前Blindcoin協(xié)議和一些盲簽名方案進(jìn)行結(jié)合的盲幣協(xié)議較少.
BLS簽名[6]是利用雙線性對(duì)構(gòu)造的一種短簽名方案,在基于身份密碼學(xué)和基于雙線性對(duì)密碼學(xué)中具有非常廣泛的應(yīng)用,可以將區(qū)塊中的所有簽名聚合成一個(gè),它的簽名長(zhǎng)度也較短.本文基于區(qū)塊鏈Blindcoin協(xié)議提出的前向安全BLS盲簽名方案延續(xù)了Blindcoin的特性,用戶的輸入輸出地址之間的聯(lián)系對(duì)第三方服務(wù)商是不可見(jiàn)的,而且大幅度降低了對(duì)帶寬和存儲(chǔ)的要求,并且支持簽名聚合,簽名私鑰會(huì)隨著時(shí)間周期的變化而更新,從而也能夠防止自適應(yīng)攻擊,具有前向安全性.前向安全性是指當(dāng)前密鑰被攻擊者獲取后,歷史的密鑰仍然是安全的,與此對(duì)應(yīng)的后向安全性[7]是指當(dāng)前密鑰被攻擊者獲取后,未來(lái)的密鑰仍然是安全的.
交易數(shù)據(jù)存儲(chǔ)在由大量區(qū)塊組成的比特幣區(qū)塊鏈[8]中,每個(gè)區(qū)塊就像公共賬本中的一個(gè)頁(yè)面,記錄一個(gè)區(qū)塊頭和最近10 min內(nèi)比特幣系統(tǒng)中發(fā)布的所有交易[9].區(qū)塊頭中有一項(xiàng)表示上一個(gè)哈希值,并且這個(gè)區(qū)塊的哈希值也包含在下一個(gè)區(qū)塊中,因此,所有的區(qū)塊都進(jìn)入了1條鏈.Nakamoto[1]采用PoW來(lái)確保生成塊是去中心化的、規(guī)則的和安全的.比特幣交易如圖1所示.
圖1 比特幣交易圖
隨著臨時(shí)匿名性的不足在比特幣社區(qū)的影響越來(lái)越大,一個(gè)名為CoinJoin[10]的提案成為一種潛在的解決方案.在CoinJoin中,用戶通過(guò)集中式混合服務(wù)(有時(shí)稱為tumbler)路由各用戶之間的交易,該服務(wù)用于將這些交易發(fā)布到分類賬之前,模糊這些交易的發(fā)送者和接收者之間的關(guān)系.然而,這種集中式混合服務(wù)引入了單點(diǎn)信任和故障.事實(shí)上,混合服務(wù)總是知道每筆交易的發(fā)送者和接收者之間的聯(lián)系,沒(méi)有辦法可以阻止混合服務(wù)竊取用戶的資產(chǎn).人們已經(jīng)提出了一系列越來(lái)越復(fù)雜的協(xié)議來(lái)解決CoinJoin的局限性.第1個(gè)改進(jìn)是Mixcoin,它試圖通過(guò)在盜竊用戶資產(chǎn)時(shí)追究混合服務(wù)的“責(zé)任”來(lái)降低盜竊風(fēng)險(xiǎn)(盜竊在技術(shù)上仍然是可能的,并且混合服務(wù)仍然知道誰(shuí)與誰(shuí)在進(jìn)行交易).基于這種基本理念(包括Blindcoin和Blindly Signed Contracts[11])的一系列漸進(jìn)式改進(jìn),一項(xiàng)名為T(mén)umbleBit[12]的提案最終以與比特幣完全兼容的方式解決了Mixcoin的問(wèn)責(zé)制和匿名性弱點(diǎn);然而,TumbleBit方法平均每筆交易需要超過(guò)20 min(即2個(gè)比特幣區(qū)塊),并引入了額外的交易費(fèi)用.Kate等人[13]的CoinShuffle和CoinShuffle++方案采用不同的方法,各用戶之間執(zhí)行特殊的多方計(jì)算,這樣就不需要第三方混合服務(wù).新興的以隱私為中心的加密貨幣,如Zcash[14]和Monero[15]方案采用了諸如零知識(shí)簡(jiǎn)潔非交互式知識(shí)論證[16]、可追蹤環(huán)簽名、機(jī)密交易和隱形地址等加密原語(yǔ),以提供比那些加密貨幣更好的隱私屬性.
在經(jīng)典假設(shè)條件下,盲簽名需要面向隨機(jī)諭言機(jī)模型(random oracle model, ROM)和公共參考串(common reference string, CRS)來(lái)構(gòu)造.Fischlin等人[17]在CRS模型中提出了一種圓形最優(yōu)盲簽名的通用構(gòu)造.Schnorr[18]基于Schnorr簽名[19]構(gòu)建了一個(gè)有效的3輪盲簽名.盡管Schnorr盲簽名被認(rèn)為對(duì)多簽名是安全的,但直到最近才在代數(shù)群模型和ROM中建立可證明的安全性.Baldimtsi等人[20]的研究表明,僅在ROM中證明Schnorr盲簽名是不可能的.Pointcheval等人[21]證明了基于DDH(decisional Deffie-Hellman)假設(shè)的3輪Okamoto-Schnorr盲簽名對(duì)于多對(duì)數(shù)多簽名是安全的.
Anderson[22]首次提出可以將數(shù)字簽名和前向安全性相結(jié)合,構(gòu)造了一種前向安全數(shù)字簽名,該簽名具有以下特性:如果消息的簽名者被攻擊者攻擊,那么攻擊者就不可能在更早的時(shí)間偽造簽名.因此,前向安全性意味著敵手不能構(gòu)建更早時(shí)間身份驗(yàn)證的消息.與前向安全加密一樣,Anderson的前向安全簽名是通過(guò)將時(shí)間劃分為時(shí)間周期并使用單向轉(zhuǎn)換更新每個(gè)時(shí)間周期中的私鑰實(shí)現(xiàn)前向安全性.由于更新算法的單向性,當(dāng)簽名者受到攻擊時(shí),當(dāng)前時(shí)間周期的簽名密鑰會(huì)泄露給攻擊者,但較早時(shí)間周期的簽名密鑰無(wú)法恢復(fù).之后前向安全簽名由Bellare等人[23]進(jìn)行了形式化,并已擴(kuò)展到許多變體,如群簽名[24]、環(huán)簽名[25]和盲簽名[26].
區(qū)塊鏈中的每個(gè)用戶都可以訪問(wèn)網(wǎng)絡(luò)中共享的所有交易.這一特點(diǎn)使用戶能夠驗(yàn)證每筆交易的完整性和真實(shí)性.但是,它也帶來(lái)了一些隱私挑戰(zhàn):它會(huì)向網(wǎng)絡(luò)中的任何人公開(kāi)與特定ID關(guān)聯(lián)的所有交易的歷史記錄.如比特幣使用假名地址作為用戶的標(biāo)識(shí)符,以取消地址和真實(shí)身份之間的連接.此外,它允許用戶為每個(gè)交易創(chuàng)建一個(gè)新的地址,以加強(qiáng)用戶的隱私.這樣可以在一定程度上保證身份的隱私.然而,它仍然容易受到一些去匿名化攻擊[27].
一般比特幣交易有1對(duì)2的輸入和1對(duì)2的輸出,因此很容易分析比特幣的轉(zhuǎn)移路徑.CoinJoin交易將許多輸入和輸出組合在一起,并將它們放在一個(gè)交易中,因此CoinJoin交易中的輸入很難對(duì)應(yīng)到輸出.假設(shè)一個(gè)事務(wù)中的輸入和輸出的個(gè)數(shù)都是N,每個(gè)輸入分別對(duì)應(yīng)1個(gè)輸出,給定事件G是某個(gè)輸入對(duì)應(yīng)某個(gè)輸出,CoinJoin交易是最簡(jiǎn)單有效的匿名化方法.根據(jù)上述原理,中心化混幣提供商通過(guò)網(wǎng)站接收用戶的比特幣并進(jìn)行混幣活動(dòng).但是,中心化混幣有2個(gè)嚴(yán)重的弱點(diǎn):1)混幣器必須知道用戶的輸入地址和輸出地址,因此不能為用戶提供真正的匿名性;2)用戶必須信任混幣器,提前向混幣器發(fā)送比特幣,用戶面臨幣損風(fēng)險(xiǎn)[28].中心化混幣的基本模型如圖2所示:
圖2 中心化混幣基本模型
圖3 盲簽名技術(shù)的隱藏機(jī)制
為了提供中心化混幣的內(nèi)部隱私性[29],需要服務(wù)商在不知道用戶輸入輸出地址對(duì)應(yīng)關(guān)系的情況下進(jìn)行輸入和輸出階段,利用盲簽名技術(shù)可以達(dá)到這一目的.盲簽名方案是一種加密原語(yǔ),其中簽名者可以交互地對(duì)用戶持有的消息進(jìn)行簽名,但是看不到被簽消息的真實(shí)內(nèi)容,原因是消息的擁有者對(duì)原消息進(jìn)行了盲化,當(dāng)消息擁有者收到盲簽名后能夠通過(guò)去盲處理獲得真實(shí)的簽名.盲簽名原理如圖3所示.
利用盲簽名技術(shù)改進(jìn)Mixcoin的缺點(diǎn),解決的問(wèn)題就是讓用戶的輸入輸出地址之間的聯(lián)系對(duì)第三方服務(wù)商是不可見(jiàn)的.在Blindcoin協(xié)議中,用戶使用了盲簽名技術(shù),使得第三方可以在不連接用戶的輸入和輸出地址的情況下,實(shí)現(xiàn)對(duì)用戶的數(shù)據(jù)交換.其本質(zhì)上為Mixcoin增加了盲性.Mixcoin和Blindcoin的原理如圖4所示.
圖4 Mixcoin和Blindcoin原理流程對(duì)比
首先給出前向安全盲簽名方案[30]的形式化定義:
定義1.前向安全盲簽名.一種前向安全的盲簽名系統(tǒng),包含了4個(gè)基本步驟:FBSIG.KeyGen,FBSIG.Update,FBSIG.Sign,FBSIG.Verify.密鑰生成算法FBSIG.KeyGen是一種多項(xiàng)式時(shí)間算法,輸入安全參數(shù)k和時(shí)間周期總數(shù)T,輸出系統(tǒng)參數(shù)param、簽名者的初始私鑰sk0以及公鑰pk.
私鑰更新算法FBSIG.Update是一種確定性或概率算法,輸入當(dāng)前時(shí)間周期i和當(dāng)前時(shí)間周期的私鑰ski,通過(guò)單向函數(shù)輸出下一時(shí)間周期i+1的簽名私鑰ski+1并且刪除ski+1.
簽名算法FBSIG.Sign是一種概率算法,假設(shè)請(qǐng)求簽署的消息為m∈M:{0,1}n,通過(guò)3個(gè)子算法,產(chǎn)生簽名sig(m).
1) 盲化算法Blind:輸入盲化因子α以及明文消息m,輸出被盲化后的消息σ(m),并發(fā)送給簽名者;
2) 簽名算法Sig:盲化后的消息σ(m)和簽名者的當(dāng)前私鑰ski作為輸入,輸出對(duì)盲化消息的簽名sig(σ(m)),并發(fā)送給簽名請(qǐng)求者;
3) 去盲算法Unblind:輸入之前的盲化因子α和簽名sig(σ(m)),輸出去盲后的簽名sig(m).
驗(yàn)證算法FBSIG.Verify是一種確定性算法,(i,m,sig(m),pk)作為輸入,輸出“accept”或者“reject”,對(duì)于每一個(gè)有效的簽名輸出“accept”,否則輸出“reject”.
通過(guò)使用BLS簽名方案,可以提高簽名過(guò)程的存儲(chǔ)效率并且支持簽名聚合.由此產(chǎn)生的方案非常適合比特幣,在需要多重簽名的地方也很適用.下面簡(jiǎn)要概述BLS簽名方案及其聚合機(jī)制[31].該方案需要:
1) 一個(gè)有效可計(jì)算的非退化配對(duì)e:G1×G2→Gt在素?cái)?shù)階q的群G1,G2,Gt中.讓g1和g2分別是G1和G2的生成元.
2) 哈希函數(shù)H0:M→G1.BLS簽名方案的工作原理如下.
密鑰生成:選擇一個(gè)隨機(jī)的sk←q并輸出(pk,sk),其中
簽名Sign(sk,m):輸出σ←H0(m)sk∈G1.
驗(yàn)證Verify(pk,m,σ):如果e(σ,g2)=e(H0(m),pk)則簽名驗(yàn)證成功,否則簽名驗(yàn)證失敗.
該簽名方案支持簡(jiǎn)單的簽名聚合過(guò)程.給定三元組(pki,mi,σi),其中i=1,2,…,n,任何人都可以聚合簽名σ1,σ2,…,σn∈G1.通過(guò)計(jì)算轉(zhuǎn)換成一個(gè)簡(jiǎn)短的聚合簽名σ←σ1…σn∈G1.
為了驗(yàn)證聚合簽名σ∈G1,需要檢查:e(σ,g2)=e(H0(m1),pk1)…e(H0(mn),pkn).
此外,驗(yàn)證者可以得到一個(gè)簡(jiǎn)短的聚合公鑰apkpk1…pkn∈G2.
信任對(duì)于比特幣混幣的成功非常重要.作為第三方服務(wù),必須讓用戶相信資金會(huì)被適當(dāng)?shù)鼗旌虾头颠€.因此,混幣器經(jīng)常為用戶提供檢查混幣狀態(tài)的服務(wù)并且自豪地宣傳其功能.盡管如此,比特幣混合器仍然被指控詐騙和實(shí)施不善.雖然混幣器可能對(duì)其參與者的資金和匿名性構(gòu)成威脅,但用戶和外部攻擊者也對(duì)威脅形勢(shì)作出了貢獻(xiàn).用戶和外部攻擊者帶來(lái)的一些威脅,如跟蹤交易,可以通過(guò)混淆功能得到緩解.其他如硬幣盜竊,可以通過(guò)混合器的實(shí)現(xiàn)來(lái)緩解.當(dāng)前的大多數(shù)混合實(shí)現(xiàn)都涉及由全能運(yùn)營(yíng)商運(yùn)行的集中式第三方,混幣器操作員帶來(lái)的威脅更難檢測(cè).
以下是常見(jiàn)的一些威脅:1)排列泄露.攻擊者能夠訪問(wèn)與輸入和輸出地址之間的排列有關(guān)的混合日志或數(shù)據(jù)庫(kù).2)硬幣盜竊.對(duì)手通過(guò)為用戶提供替代地址或破壞混合器的地址竊取輸入的硬幣,混幣器運(yùn)營(yíng)商還可以竊取用戶資金.3)參與者的放棄.惡意混幣器運(yùn)營(yíng)商可以拒絕選定的良性用戶參與以減少匿名集.4)參與并破壞.敵對(duì)參與者通過(guò)在混合協(xié)議執(zhí)行之前中止混合協(xié)議來(lái)破壞混合.
為了解決上述比特幣的隱私問(wèn)題,理想的解決方案應(yīng)該考慮以下屬性.
匿名性:用戶應(yīng)該是唯一知道從輸入地址到輸出地址的鏈接的實(shí)體.
不可偽造性:任何攻擊者都無(wú)法知道用戶個(gè)人信息ID,不可偽造用戶的簽名密鑰,進(jìn)而無(wú)法偽造用戶的簽名及授權(quán).
盲性:能夠保證第三方服務(wù)商即簽名者不知道盲化因子r且無(wú)法得到原消息m,看不到用戶輸入地址所對(duì)應(yīng)的輸出地址.
前向安全性:第三方服務(wù)商當(dāng)前密鑰被攻擊者獲取后歷史的密鑰仍是安全的,不會(huì)造成安全性問(wèn)題.
抗自適應(yīng)攻擊:在保證前向安全性的基礎(chǔ)上,需要保證每個(gè)時(shí)間周期密鑰的變化,使得分析者不能根據(jù)某一周期簽名的結(jié)果對(duì)其他時(shí)間周期進(jìn)行修正.
中心化混幣大致思路是服務(wù)商幫助想要進(jìn)行混幣交易的用戶找到同伴,構(gòu)造混幣交易,并從中收取一定的手續(xù)費(fèi).該過(guò)程的基本模型由4個(gè)階段構(gòu)成,分別是協(xié)商、輸入、輸出、結(jié)束.本文方案主要用于協(xié)商階段.步驟如下:
1) 協(xié)商階段.想要參與混幣的用戶,與混幣服務(wù)商進(jìn)行協(xié)商,約定用于混幣的輸入地址、輸出地址、服務(wù)商的接收地址,返回地址、混幣金額、混幣輸入輸出時(shí)間、混幣手續(xù)費(fèi)等相關(guān)參數(shù).
① 系統(tǒng)初始化階段.
PKG(public key generation)首先選擇q,G1,G2,e,然后再選擇P∈G1作為生成元,定義哈希函數(shù)H:{0,1}*→G1.最后PKG再隨機(jī)性選取s∈計(jì)算公鑰Pb=sP,將s秘密保存,公開(kāi)參數(shù){q,G1,G2,e,P,Pb}.
② 密鑰生成階段.
簽名者將自身的個(gè)人信息ID交給PKG,PKG將任意選擇x∈然后計(jì)算pk=xP,QID=H(ID‖pk),CID=sQID.最后PKG將x,pk,CID發(fā)送給簽名者.此時(shí)第三方服務(wù)商的初始密鑰參數(shù)已經(jīng)生成.
③ 密鑰更新階段.
④ 盲簽名產(chǎn)生階段.
用戶向服務(wù)商發(fā)送參數(shù)申請(qǐng)混幣.首先用戶需要將輸出地址address1進(jìn)行盲化,address1即明文消息m.用戶任意選取隨機(jī)數(shù)r∈為盲因子,然后計(jì)算m′=rH(m),將明文消息m盲化,并且將m′發(fā)送給簽名方.簽名方在收到盲化消息m′后對(duì)其簽名,計(jì)算并且將發(fā)送給用戶.
⑤ 驗(yàn)證階段.
簽名的驗(yàn)證者(用戶)需判斷等式e(σ,p)=e(H(ID‖pk),Pb)e(H(m),pk)是否成立.如果該等式成立,則說(shuō)明(σ,pk)就是簽名者ID在消息m上的簽名.此時(shí)服務(wù)商已經(jīng)返回其他參數(shù)及盲簽名承諾,完成協(xié)商.
2) 輸入階段.用戶按照協(xié)商階段商定的相關(guān)參數(shù),在約定時(shí)間之前將約定資產(chǎn)從輸入地址發(fā)送到服務(wù)商指定的接收地址.
第三方服務(wù)商在賬本公開(kāi)對(duì)盲化輸出地址的簽名,用戶以新身份A′在賬本公開(kāi)去盲化后的輸出地址簽名.
3) 輸出階段.服務(wù)商在約定時(shí)間之前,將扣除手續(xù)費(fèi)后的資產(chǎn),通過(guò)返回地址發(fā)送到用戶指定的輸出地址.
4) 結(jié)束階段.如果協(xié)議正常運(yùn)行結(jié)束,服務(wù)商和用戶銷毀協(xié)商階段留下的記錄,保護(hù)用戶隱私.
Blindcoin協(xié)議首先修改了協(xié)商階段的簽名部分,第三方服務(wù)商通過(guò)BLS盲簽名算法對(duì)用戶輸出地址的承諾進(jìn)行簽名,然后用戶對(duì)收到的盲簽名進(jìn)行去盲操作,得到針對(duì)真實(shí)輸出地址的簽名,并作為輸出地址獲得混幣后的資產(chǎn)憑證交給第三方服務(wù)商,此時(shí)用戶使用的是另外一個(gè)身份并將該憑證交給第三方,服務(wù)商可以驗(yàn)證該簽名的正確性以及是否使用過(guò).由于服務(wù)商在協(xié)商階段知道用戶的輸入地址但不知道輸出地址,而在輸出階段知道輸出地址卻不知道對(duì)應(yīng)的輸入地址,因而無(wú)法判斷用戶輸入和輸出地址的關(guān)系.
本文方案安全性依賴于底層BLS的安全證明.BLS的安全性是在隨機(jī)諭言機(jī)模型下,其中哈希函數(shù)H被設(shè)置為隨機(jī)諭言機(jī).其不可偽造性形式化證明如下:
假設(shè)哈希函數(shù)H是隨機(jī)諭言機(jī).如果CDH(computational Diffie-Hellman)問(wèn)題很難解決,那么BLS簽名方案在減少損失L=qH的存在性不可偽造(existential unforgeability against chosen-message attacks, EU-CMA)安全模型中是可證明安全的,其中qH是隨機(jī)諭言機(jī)的查詢次數(shù).
假設(shè)在EU-CMA模型中存在一個(gè)能夠以(t,qs,ε)的優(yōu)勢(shì)破壞簽名方案的敵手F,那么可以構(gòu)造一個(gè)模擬器B模擬敵手F來(lái)解決CDH問(wèn)題.給定CDH問(wèn)題實(shí)例(g,ga,gb),模擬器B控制隨機(jī)諭言機(jī),模擬F并執(zhí)行以下操作.
設(shè)置階段Setup:模擬器B設(shè)置公鑰h=gα,私鑰為α,此處α是a.模擬者運(yùn)行密鑰生成算法,生成公鑰.注意:模擬者并不掌握私鑰,要求模擬者能夠在不掌握私鑰的情況下構(gòu)造可模擬的簽名,并且為敵手設(shè)計(jì)可規(guī)約的簽名.
哈希詢問(wèn)階段H-Query:敵手在此階段進(jìn)行哈希查詢.模擬器在收到敵手的詢問(wèn)后選擇一個(gè)隨機(jī)數(shù)i*∈[1,qH].模擬器B準(zhǔn)備一個(gè)空表(開(kāi)始時(shí)為空),用來(lái)存儲(chǔ)所有的哈希查詢和結(jié)果.第i次查詢?cè)O(shè)為mi,若mi已經(jīng)在模擬器維護(hù)的表中,則直接回復(fù).否則回復(fù)如下:
并將(i,mi,wi,H(mi))添加到哈希列表中.注意:哈希請(qǐng)求這里是全局存在的,即使是敵手在最后計(jì)算偽造簽名時(shí),也必須訪問(wèn)隨機(jī)諭言機(jī),獲得哈希結(jié)果,即在規(guī)約算法或者模擬者模擬算法的過(guò)程中,所有的哈希結(jié)果必須由隨機(jī)諭言機(jī)計(jì)算得到.哈希請(qǐng)求開(kāi)始之前,模擬者猜測(cè)第i次詢問(wèn)的消息mi作為敵手輸出仿造簽名時(shí)的那一次請(qǐng)求,所以在哈希請(qǐng)求設(shè)計(jì)時(shí),將第i次請(qǐng)求設(shè)計(jì)成為可規(guī)約的,將其他時(shí)間的請(qǐng)求設(shè)計(jì)為可模擬的.這是能夠強(qiáng)制敵手攻破困難問(wèn)題的核心設(shè)計(jì).
查詢階段Query:敵手F在此階段進(jìn)行簽名查詢,對(duì)于mi上的簽名查詢,如果mi是哈希列表中的第i*條查詢消息,則中止.其他情況下模擬器B計(jì)算簽名σmi=(ga)wi,按照簽名規(guī)定的形式(σm=H(m)α),模擬器產(chǎn)生的簽名是合法的.模擬者按照上述過(guò)程對(duì)敵手F的簽名請(qǐng)求進(jìn)行回復(fù),如果詢問(wèn)到消息mi是之前詢問(wèn)過(guò)的,則終止詢問(wèn),因?yàn)椴辉试S敵手對(duì)1個(gè)消息進(jìn)行2次查詢.
在最后偽造時(shí),選擇一個(gè)沒(méi)有請(qǐng)求過(guò)的消息進(jìn)行偽造,如果是之前偽造過(guò)的消息,則終止偽造過(guò)程.對(duì)新的消息進(jìn)行哈希詢問(wèn),然后計(jì)算簽名,輸出偽造的簽名.
不可偽造性分析:第三方混幣服務(wù)商的私鑰x,是由簽名者將自身個(gè)人信息ID交給PKG,PKG任意選擇x∈即簽名者的私鑰是由密鑰生成中心和用戶自身身份ID構(gòu)成,密鑰生成中心不知道用戶最后的簽名密鑰,也就無(wú)法偽造用戶的簽名及授權(quán),任何攻擊者無(wú)法知道用戶個(gè)人信息ID也就無(wú)法偽造用戶的簽名密鑰,即第三方服務(wù)商的密鑰具有不可偽造性.
盲性分析:消息的擁有者即用戶在消息盲化階段任意選擇r∈作為盲化因子,并通過(guò)計(jì)算m′=rH(m)對(duì)明文消息m進(jìn)行盲化,得到盲化后的消息m′,然后通過(guò)安全信道將m′發(fā)送給簽名者,簽名者對(duì)m′進(jìn)行簽名,由于盲因子由用戶隨機(jī)選擇并保密,所以簽名者無(wú)法得知盲因子r,更無(wú)法計(jì)算H(m)=m′r-1,因此在簽名者不知道盲因子r的情況下是不能得到原消息m的,所以該方案滿足盲性.
匿名性分析:第三方服務(wù)商在賬本公開(kāi)對(duì)盲化輸出地址的簽名,用戶采用新身份A′在賬本公開(kāi)去盲化后的輸出地址簽名,由于A′與A在第三方服務(wù)商看來(lái)并無(wú)實(shí)際聯(lián)系,結(jié)果是服務(wù)商在協(xié)商階段知道用戶的輸入地址但不知道輸出地址,而在輸出階段知道輸出地址而不知道對(duì)應(yīng)的輸入地址,因而無(wú)法判斷用戶輸入輸出地址的關(guān)系.
表1 相關(guān)方案混幣協(xié)議安全性對(duì)比
BLS短簽名讓用戶確認(rèn)簽名者是可信的,它是最短的數(shù)字簽名.之所以使用它,是因?yàn)樵谧畲蟪潭壬鲜褂米钚挼膮^(qū)塊鏈混幣環(huán)境中需要短簽名.與使用的其他簽名(如RSA和DSA)相比,BLS確實(shí)能夠生成短簽名.例如,當(dāng)使用1 024 b模數(shù)時(shí),RSA簽名的長(zhǎng)度為1 024 b.同樣,當(dāng)使用1 024 b模數(shù)時(shí),標(biāo)準(zhǔn)DSA簽名的長(zhǎng)度為320 b.DSA的橢圓曲線變體,例如ECDSA,也是320 b. 320 b的簽名太長(zhǎng),無(wú)法鍵入.而B(niǎo)LS簽名方案的長(zhǎng)度大約為160 b,并提供類似于320 b DSA簽名的安全級(jí)別.簽名生成相對(duì)較快,簽名驗(yàn)證的計(jì)算復(fù)雜度稍低,因?yàn)樗ㄓ?jì)算量不高的配對(duì)操作.BLS簽名的主要優(yōu)點(diǎn)是使用可以組合成單個(gè)簽名的多個(gè)公鑰,將多個(gè)簽名組合成多個(gè)消息.
為了測(cè)試本文系統(tǒng)的性能,使用原始文件的數(shù)據(jù)集完成測(cè)試,用戶將數(shù)據(jù)文件拆分為1組塊的集合,從10~500塊,塊大小為1 KB.接下來(lái)將根據(jù)計(jì)算成本評(píng)估簽名方案的性能.
計(jì)算成本:為了評(píng)估密鑰和簽名的生成性能,分別從100~500不同數(shù)量的塊生成密鑰和簽名,在實(shí)驗(yàn)中逐次增加50塊.如圖5所示,生成簽名的時(shí)間成本隨著區(qū)塊數(shù)量的增加而線性增加.密鑰生成時(shí)間范圍為0.021~0.046 s.而生成簽名的時(shí)間范圍為0.071~0.286 s.從圖5可以看出,在密鑰生成過(guò)程和簽名生成過(guò)程中花費(fèi)的時(shí)間很少,確保了本文方案的效率.
圖5 密鑰及簽名生成的計(jì)算開(kāi)銷
本文基于區(qū)塊鏈Blindcoin協(xié)議提出了一種前向安全盲幣協(xié)議,該協(xié)議具備Blindcoin的特性,用戶的輸入輸出地址之間對(duì)第三方服務(wù)商是不可見(jiàn)的,而且該方案在帶寬和存儲(chǔ)需求方面實(shí)現(xiàn)了大幅降低,并且支持簽名聚合,簽名私鑰會(huì)隨著時(shí)間周期的變化而更新,具備前向安全性,同時(shí)也能夠抵抗自適應(yīng)攻擊.因此本文方案提供了相對(duì)好的隱私性.本文方案能夠?qū)崿F(xiàn)的功能與目前比特幣中的多重簽名是一致的,但在鏈上僅表現(xiàn)為單一聚合簽名.在本文方案中,用戶的交易信息不會(huì)被攻擊者鎖定,用戶既能夠享受多重簽名技術(shù)帶來(lái)的便利,也能夠保證良好的隱私性.未來(lái)工作將關(guān)注參與者數(shù)量上升會(huì)增大攻擊者混入的概率問(wèn)題,進(jìn)而設(shè)計(jì)出具有更多安全性和功能的盲幣協(xié)議.