韓妍妍 徐鵬格 李兆斌 魏占禎
1(西安電子科技大學(xué)通信工程學(xué)院 陜西 西安 710071) 2(北京電子科技學(xué)院通信工程系 北京 100070)
比特幣[1]是由中本聰于2008年提出的一種點(diǎn)對(duì)點(diǎn)的電子現(xiàn)金支付系統(tǒng)。比特幣的發(fā)行和交易不依賴于任何金融機(jī)構(gòu),而是由P2P網(wǎng)絡(luò)節(jié)點(diǎn)共同實(shí)現(xiàn)的。其中比特幣的發(fā)行稱為挖礦。礦工通過(guò)執(zhí)行PoW共識(shí)協(xié)議將若干比特幣交易打包成區(qū)塊。該塊在經(jīng)過(guò)網(wǎng)絡(luò)節(jié)點(diǎn)的校驗(yàn)后被記入?yún)^(qū)塊鏈中,礦工也因此獲得創(chuàng)建新塊的新幣獎(jiǎng)勵(lì)以及交易費(fèi)。挖礦機(jī)制鞏固了去中心化的清算交易機(jī)制,在沒(méi)有中央權(quán)力機(jī)構(gòu)的情況下實(shí)現(xiàn)了全網(wǎng)共識(shí)。而比特幣交易[2]是比特幣網(wǎng)絡(luò)中最重要的部分。與傳統(tǒng)的銀行交易不同,任何規(guī)模的比特幣交易都是利用secp256k1標(biāo)準(zhǔn)的ECDSA[3]算法實(shí)現(xiàn)完全自動(dòng)化的。因此,擁有私鑰就相當(dāng)于擁有對(duì)比特幣的使用權(quán)。作為存儲(chǔ)和保護(hù)比特幣私鑰的重要途徑,比特幣錢(qián)包受到了學(xué)術(shù)界和產(chǎn)業(yè)界的高度關(guān)注。
比特幣核心(BitcoinCore)[4]是最早提供比特幣錢(qián)包服務(wù)的免費(fèi)開(kāi)源軟件。比特幣核心的開(kāi)發(fā)是完全透明化的,用戶可以驗(yàn)證軟件的二進(jìn)制版本與源包是否對(duì)應(yīng),從而排除軟件進(jìn)行惡意篡改的可能。因此,比特幣核心是比特幣最安全的管理模式。然而該軟件需要驗(yàn)證整個(gè)區(qū)塊鏈來(lái)防止用戶雙重花費(fèi),這顯然需要額外的成本。目前,該軟件需要大約80 GB的存儲(chǔ)空間來(lái)存儲(chǔ)比特幣交易等相關(guān)數(shù)據(jù),并且一筆交易的驗(yàn)證時(shí)間大約為1個(gè)小時(shí)。從長(zhǎng)遠(yuǎn)考慮,這顯然不符合用戶的利益。正如中本聰?shù)陌灼?shū)所述,用戶可以在不運(yùn)行完整網(wǎng)絡(luò)節(jié)點(diǎn)的情況下驗(yàn)證比特幣交易(簡(jiǎn)化支付驗(yàn)證,SPV)。由此產(chǎn)生的SPV錢(qián)包只需下載區(qū)塊頭,而不用下載包含在每個(gè)區(qū)塊中的交易信息。這種不含交易信息的區(qū)塊鏈大小只有完整區(qū)塊鏈的1/1 000。在絕大多數(shù)的實(shí)際情況中,連接良好的SPV節(jié)點(diǎn)是足夠安全的,它在資源需求、實(shí)用性和安全性之間維持恰當(dāng)?shù)钠胶?。因此,與BitcoinCore相比,SPV錢(qián)包因更少的資源開(kāi)銷(xiāo)和帶寬消耗而越來(lái)越受歡迎。
軟件錢(qián)包所面臨的共同安全問(wèn)題是黑客攻擊。如果攻擊者可以訪問(wèn)軟件錢(qián)包操作系統(tǒng),他就可以訪問(wèn)錢(qián)包,從而盜取用戶的私鑰。以Trezor錢(qián)包為代表的硬件錢(qián)包通常采用與Internet分離,單獨(dú)保存比特幣密鑰的方法。設(shè)備在內(nèi)部簽署交易,允許用戶通過(guò)USB連接方式將簽名的交易發(fā)送到不可信賴的計(jì)算機(jī)。這種將私鑰與易受攻擊的環(huán)境相分離的方法增加了攻擊者非法獲取私鑰的難度。另一方面,以Gennaro等[5]為代表的學(xué)者在2016年提出了一種新的密鑰管理思路:將密鑰進(jìn)行拆分,并由一組閾值成員共同生成簽名。并且,他們?cè)贛ackenzie等[6]方案的基礎(chǔ)上設(shè)計(jì)出一種最優(yōu)的(t,n)門(mén)限ECDSA方案。隨后大量?jī)?yōu)秀的雙方或多方ECDSA算法[7-10]相繼提出,為門(mén)限錢(qián)包設(shè)計(jì)提供了有力的密碼算法支撐。其中:多方ECDSA更適用于企業(yè)管理比特幣;而雙方ECDSA則更符合個(gè)體用戶增強(qiáng)比特幣密鑰的安全需求。Mann等[11]利用電腦桌面錢(qián)包與智能手機(jī)錢(qián)包結(jié)合的方法則是雙方ECDSA的應(yīng)用實(shí)例。
此外,比特幣的匿名性也受到了學(xué)術(shù)界和產(chǎn)業(yè)界的高度關(guān)注。雖然比特幣可以通過(guò)使用假名來(lái)保護(hù)用戶的隱私,但由于比特幣交易記錄是公開(kāi)且未加密的,用戶的密鑰嚴(yán)格限制為可鏈接的匿名性。目前大致有替換幣和混幣兩種技術(shù)手段來(lái)增強(qiáng)其匿名性。ZeroCoin[12]等協(xié)議是先將密碼貨幣兌換為替代幣,之后再換回密碼貨幣,從而達(dá)到混淆的作用,但這種技術(shù)與比特幣協(xié)議不兼容。CoinJion[13]和CoinShuffle[14]等協(xié)議則是采用混幣技術(shù),將多個(gè)用戶的比特幣交易合并到一個(gè)單一交易中,使外部各方更難以辨別支付方和付款方,并且不需要修改比特幣協(xié)議。例如,芥末錢(qián)包正是采用CoinJion混幣協(xié)議來(lái)增強(qiáng)比特幣的匿名性。
基于以上研究基礎(chǔ),本文提出智能手機(jī)錢(qián)包與硬件錢(qián)包相結(jié)合的密鑰管理方案。利用Diffie-Hellman協(xié)議生成比特幣密鑰,利用CoinShuffle協(xié)議[14]創(chuàng)建比特幣交易,借鑒Lindell等[7]雙方ECDSA方案的研究思路對(duì)交易進(jìn)行簽名,從而實(shí)現(xiàn)用戶密鑰由兩個(gè)錢(qián)包共同管理,所創(chuàng)建的交易輸入輸出地址之間具有不可鏈接性。本文還利用離散對(duì)數(shù)的零知識(shí)證明保證智能手機(jī)錢(qián)包和硬件錢(qián)包數(shù)據(jù)交互的正確性。而本文的問(wèn)責(zé)協(xié)議可保證方案的順利執(zhí)行,增強(qiáng)方案的魯棒性。安全性分析表明,本文方案能抵御中間人攻擊、去匿名攻擊、雙重花費(fèi)等多種攻擊。與現(xiàn)有的若干密鑰管理方案相比,本文方案更加安全,更便于隨時(shí)隨地進(jìn)行比特幣交易,具有一定的理論和實(shí)際意義。
橢圓曲線數(shù)字簽名算法(ECDSA)[15]由階為q、生成元為G的循環(huán)群參數(shù)化,其中G為某條橢圓曲線上的點(diǎn)。ECDSA算法具體定義如下:
Gen(1κ):隨機(jī)選擇一個(gè)私鑰sk∈Zq,計(jì)算公鑰Q=sk·G。輸出公私鑰對(duì)(Q,sk)。
Sig(sk∈Zq,m∈{0,1}*):隨機(jī)選取一個(gè)隨機(jī)數(shù)k∈Zq,計(jì)算(rx,ry)=k·G。然后計(jì)算s=k-1·(H(m)+sk·rx),輸出數(shù)字簽名σ=(s,rxmodq),其中H()表示哈希函數(shù)。
Diffie-Hellman密鑰交換協(xié)議[16](DH協(xié)議)可實(shí)現(xiàn)兩個(gè)用戶在公共信道上安全的交換密鑰,并且產(chǎn)生的密鑰可應(yīng)用于加密、密鑰管理或其他密碼算法。DH協(xié)議是基于離散對(duì)數(shù)問(wèn)題的困難性來(lái)實(shí)現(xiàn)的,為滿足通信雙方共享密鑰的目的,通信雙方A和B需完成如下操作:
1) A、B分別選取一個(gè)隨機(jī)數(shù)0≤xA,xB 2) A將yA發(fā)送給B,B將yB發(fā)送給A。 同態(tài)加密算法[17-18]的同態(tài)性是指對(duì)若干明文進(jìn)行運(yùn)算后再加密,與加密后對(duì)密文進(jìn)行相應(yīng)運(yùn)算的結(jié)果是等價(jià)的。Pailliler加密算法[18]屬于部分同態(tài)加密算法。假設(shè)其公鑰對(duì)為(n,g),m1、m2為待處理的明文數(shù)據(jù),Enc(·)為加密算法,Dec(·)為解密算法,則Pailliler加密算法具有如下性質(zhì): Enc(m1)*Enc(m2)(modn2)=Enc(m1+m2(modn)) (1) Enc(m1)*gm2(modn2)=Enc(m1+m2(modn)) (2) Enc(m1)m2(modn2)=Enc(m1m2(modn)) (3) CoinShuffle協(xié)議[14]是一種混幣技術(shù),需要用戶與比特幣網(wǎng)絡(luò)中n-1名成員合作完成。假設(shè)全體成員輸入地址的比特幣幣值為value。該協(xié)議分為如下四個(gè)階段。若前三個(gè)階段未成功運(yùn)行,將進(jìn)入問(wèn)責(zé)階段。 1) Announcement:每位成員廣播自己的輸入地址,并接收其他成員的輸入地址,然后創(chuàng)建輸入地址列表Tin。 2) Shuffling:全體成員對(duì)所有成員的輸出地址按設(shè)定的規(guī)則進(jìn)行洗牌,生成輸出地址列表Tout。 3) Transaction Verification:每位成員分別創(chuàng)建比特幣交易Tx={Tin,Tout,value}。全體成員均對(duì)交易進(jìn)行獨(dú)立簽名后,將簽名后交易廣播到比特幣網(wǎng)絡(luò)。 4) Blame:在前三個(gè)階段中,如果某些成員偏離了協(xié)議,則誠(chéng)實(shí)的參與者將報(bào)錯(cuò)并進(jìn)入問(wèn)責(zé)階段,暴露并排除不誠(chéng)實(shí)的成員。 零知識(shí)證明[19-21]是證明者(Prover)向驗(yàn)證者(Verifier)證明他們知道值x的方法,證明者除了證明知道值x而不傳達(dá)其他任何信息。離散對(duì)數(shù)的零知識(shí)證明是最常用的零知識(shí)證明之一,可通過(guò)Fiat-Shamir協(xié)議[20]或Schnorr協(xié)議[21]進(jìn)行實(shí)例化。下面給出兩種離散對(duì)數(shù)的零知識(shí)證明的基本結(jié)構(gòu)。第一種對(duì)應(yīng)于基本的離散對(duì)數(shù)的零知識(shí)證明,第二種允許證明者先對(duì)證明做出承諾,稍后揭示。假設(shè)G是階為q,生成元為G的循環(huán)群。 智能手機(jī)錢(qián)包Alice和硬件錢(qián)包Bob通過(guò)USB連接。Alice主要負(fù)責(zé)創(chuàng)建、廣播和存儲(chǔ)與用戶相關(guān)的比特幣交易,Bob則負(fù)責(zé)協(xié)助Alice完成對(duì)交易的簽名。因此,只需要Alice連接比特幣網(wǎng)絡(luò)。整個(gè)方案由密鑰生成協(xié)議、交易生成協(xié)議、數(shù)字簽名協(xié)議,以及問(wèn)責(zé)協(xié)議四部分組成。下面以adrin→adrout為例來(lái)闡述方案設(shè)計(jì),即用戶將幣值value的比特幣從地址adrin全部轉(zhuǎn)入地址adrout,如圖1所示。 圖1 整體方案設(shè)計(jì) 假設(shè)G是階為q、生成元為G的循環(huán)群。 1) 密鑰生成協(xié)議。Alice和Bob可根據(jù)以下操作生成輸入地址Adrin以及對(duì)應(yīng)的私鑰份額skA、skB。類(lèi)似地,用戶可以生成輸出地址Adrout。 (1) Alice和Bob利用BIP39規(guī)則[22]生成錢(qián)包種子seedA和seedB。為便于描述,兩個(gè)錢(qián)包各自在本地選取一個(gè)隨機(jī)數(shù)seedA,seedB∈Zq作為種子。 (2) Alice和Bob分別利用種子、比特幣地址編號(hào)c、口令pw生成私鑰份額skA、skB。 用戶需將兩個(gè)錢(qián)包的種子和口令妥善保管,便于錢(qián)包導(dǎo)入和導(dǎo)出比特幣密鑰。 2) 交易生成協(xié)議。本協(xié)議利用CoinShuffle協(xié)議來(lái)創(chuàng)建比特幣交易,用戶僅需利用Alice與比特幣網(wǎng)絡(luò)中n-1名成員互動(dòng)完成。 (1) Alice建立臨時(shí)公鑰加密算法的公私鑰對(duì)(p,k),并廣播簽名消息(p,Adrin)。然后接收驗(yàn)證其他成員的相關(guān)簽名消息是否正確。最終生成交易的輸入地址列表Tin。 (2) Alice按照自己的編號(hào)分三種情況與網(wǎng)絡(luò)中n-1位成員共同生成打亂的輸出地址列表Tout。 (3) 為保證過(guò)程(2)的正確執(zhí)行,Alice及其他成員均需廣播包括Tx在內(nèi)的簽名消息。若全體消息均正確,Alice即可創(chuàng)建比特幣交易Tx={Tin,Tout,value}。 3) 數(shù)字簽名協(xié)議。Alice和Bob利用雙方ECDSA算法協(xié)作完成對(duì)比特幣交易的簽名。 (2) Alice將(Tx,Enc(skA))發(fā)送給Bob。Tx為未簽名的比特幣交易,Enc(skA)為私鑰份額skA同態(tài)加密后的密文。 4) 問(wèn)責(zé)協(xié)議。問(wèn)責(zé)協(xié)議主要保證Alice和n-1名成員正確執(zhí)行該協(xié)議,排除惡意合作成員。協(xié)議的主要內(nèi)容如下: (1) 如果發(fā)現(xiàn)某成員的輸入地址的幣值低于約定值value,或地址上的比特幣已被花費(fèi),問(wèn)責(zé)該成員。 (2) 如果在輸出地址洗牌過(guò)程中,某成員在協(xié)議執(zhí)行過(guò)程中操作失敗,進(jìn)入問(wèn)責(zé)協(xié)議。 (3) 在驗(yàn)證輸出地址列表正確性時(shí),如果發(fā)現(xiàn)某兩個(gè)成員Pi和Pj所提供的哈希值hi與hj不等,執(zhí)行協(xié)議問(wèn)責(zé)惡意成員。 Alice與Bob以及Alice與其他成員的數(shù)據(jù)交互過(guò)程如圖2所示。為簡(jiǎn)便起見(jiàn),示意圖省略了Alice和Bob數(shù)據(jù)交互所使用的零知識(shí)證明以及問(wèn)責(zé)協(xié)議的內(nèi)容。以下為各協(xié)議的具體內(nèi)容。 1) Alice和Bob分別隨機(jī)生成種子seedA,seedB∈Zq,然后計(jì)算公私鑰對(duì)(pkA,skA)、(pkB,skB)。 skA=seedA·H(pw‖c) (4) skB=seedB·H(pw‖c) (5) pkA=skA·G (6) pkB=skB·G (7) 揚(yáng)州大學(xué)服裝與服飾設(shè)計(jì)專(zhuān)業(yè)教學(xué)大綱安排有《民族服飾采風(fēng)》課程,每年都安排大三學(xué)生到西南地區(qū)采風(fēng),其中廣西就是主要的采風(fēng)地點(diǎn)。為了實(shí)現(xiàn)各門(mén)課程的協(xié)調(diào)融合,針對(duì)學(xué)生的“學(xué)術(shù)性學(xué)習(xí)”過(guò)程中遇到的困惑和問(wèn)題進(jìn)行有的放矢地應(yīng)答,筆者利用講座或“微課程”等形式帶領(lǐng)學(xué)生研讀該書(shū)“服用門(mén)”部分,推進(jìn)研究性學(xué)習(xí)在學(xué)生中的實(shí)踐工作。 5) Alice和Bob計(jì)算公鑰Q及輸入地址Adrin,并保存在本地。Q的計(jì)算如式(8)所示,式(9)為比特幣地址生成算法,詳見(jiàn)參考文獻(xiàn)[22]。 Q=skA·pkB=skB·pkA (8) Adrin=Base58(RIPEMD160(SHA256(Q))) (9) 用戶再次運(yùn)行密鑰生成協(xié)議生成輸出地址Adrout。 假設(shè)n位成員的順序已定,Alice是第m位成員,協(xié)商的臨時(shí)會(huì)話標(biāo)識(shí)符為τ。此外,為保證所發(fā)送信息的完整性和不可抵賴性,全體成員需對(duì)所發(fā)送的消息進(jìn)行簽名。假設(shè)Alice的臨時(shí)ECDSA公私鑰對(duì)為(y,x),其他成員已知Alice的驗(yàn)證公鑰y。下文中的E(·)表示某公鑰加密算法,定義E((p1,p2,…,pn),M)=E(p1,(E(p2,(…E(pn,M))…))),pi為第i位成員的加密公鑰(i∈[1,n]),M為明文。 1) Alice生成一個(gè)臨時(shí)的公鑰加密算法的公私鑰對(duì)(p,k),然后計(jì)算: σ1=sig(x,(p,Adrin,1,τ)) (10) 并廣播(p,adrin,σ1)。如果m=1,上述過(guò)程可省略。然后接收其他成員Pt(t∈[1,n],t≠m)的簽名信息,并驗(yàn)證其所提供的比特幣地址中是否有足夠的比特幣。若正確,存儲(chǔ)該信息,最終生成交易的輸入地址列表Tin。否則,進(jìn)入問(wèn)責(zé)協(xié)議。 2) Alice需按自己的編號(hào)分如下三種情況進(jìn)行計(jì)算: (1) 如果m=1,計(jì)算: c1=E((p2,p3,…,pn),Adrout) (11) σ2=sig(x,(C1,2,τ)) (12) 然后將(C1,σ2)發(fā)送給第2名成員。其中C1=(c1)為一元向量。 如果某個(gè)元素解密失敗,或者其中某兩個(gè)元素的解密結(jié)果相同,則進(jìn)入問(wèn)責(zé)協(xié)議2)。否則繼續(xù)計(jì)算: cm=E((pm+1,pm+2,…,pn),Adrout) (13) σ2=sig(x,(Cm,2,τ)) (14) 將信息(Cm,σ2)發(fā)送給第m+1名成員。 σ2=sig(x,(Tout,2,τ)) (15) 最后廣播(Tout,σ2)給其他所有成員。 3) 為保證大家在廣播過(guò)程中誠(chéng)實(shí),Alice(其他成員也需進(jìn)行如下廣播)還需計(jì)算: h=H((p2,p3,…,pn),Tout) (16) σ3=sig(x,(h,3,τ))) (17) 廣播(h,σ3)。當(dāng)接收到其他成員所發(fā)送的簽名信息后,若發(fā)現(xiàn)任意兩個(gè)成員a和b所提供的哈希值ha≠hb,進(jìn)入問(wèn)責(zé)協(xié)議。否則Alice創(chuàng)建交易Tx={Tin,Tout,value}。 DB=kB·G (18) R=kB·DA (19) (20) 式中:r是R的橫坐標(biāo)。 R=kA·DB (21) (22) (23) 計(jì)算r′=x′ modq。若r′=r,簽名有效,Alice向其他成員廣播簽名值σ。 4) 接收到其他n-1名成員的簽名廣播后,將全部簽名加入比特幣交易Tx,然后廣播到比特幣網(wǎng)絡(luò)中。若發(fā)現(xiàn)某成員在該協(xié)議中進(jìn)行了雙花,則進(jìn)入問(wèn)責(zé)協(xié)議。 Alice根據(jù)以下原則執(zhí)行問(wèn)責(zé)協(xié)議: 1) 如果發(fā)現(xiàn)某成員所提供輸入地址的幣值低于約定值value,或地址上的比特幣已被花費(fèi)。需將該情況廣播給其他成員,問(wèn)責(zé)該成員。此情況可能發(fā)生在交易生成協(xié)議的步驟1)或數(shù)字簽名協(xié)議的步驟4)。 2) 在生成輸出地址列表Tout的過(guò)程中,如果發(fā)現(xiàn)所接收向量中有重復(fù)密文,又或缺少密文,問(wèn)責(zé)上一位成員。此外,如果對(duì)向量中的元素解密失敗,進(jìn)行報(bào)錯(cuò)廣播,計(jì)算: h′=H((p2,p3,…,pn)) (24) σ4=sig(x,(h′,4,τ)) (25) 3) 在驗(yàn)證輸出地址列表Tout時(shí),如果發(fā)現(xiàn)成員Pi和Pj所提供的哈希值hi與hj不等,即hi≠hj,需成員Pi和Pj廣播他們收到的所有關(guān)于加密公鑰{p2,p3,…,pn}和輸出地址列表Tout相關(guān)的簽名信息。其他成員重新計(jì)算hi與hj,并驗(yàn)證其是否正確。 (1) 如果計(jì)算發(fā)現(xiàn)hi或hj不正確,直接暴露不誠(chéng)實(shí)的成員Pi或Pj。 (2) 否則,分為兩種情況:某成員通過(guò)向成員Pi和Pj發(fā)送不同的加密公鑰或者最后一名成員Pn向兩位成員提供了錯(cuò)誤的輸出地址向量Tout。此時(shí),利用兩位成員所公布的簽名消息可找出惡意成員。 誠(chéng)實(shí)用戶可以檢測(cè)到旨在破壞協(xié)議的攻擊,并且可以識(shí)別和排除至少一個(gè)行為不端的參與者。然后,其他參與者可以在沒(méi)有惡意的參與者的情況下再次運(yùn)行協(xié)議。 總體而言,智能手機(jī)錢(qián)包Alice和硬件錢(qián)包Bob首先各自生成并保存一個(gè)用于衍生密鑰的種子,然后結(jié)合密碼口令pw利用BIP32[22]生成所需私鑰份額。這種雙錢(qián)包的密鑰管理方案相較傳統(tǒng)的單位置存儲(chǔ)方案顯然更加安全。此外,攻擊者即使盜取了某個(gè)錢(qián)包的種子,在沒(méi)有pw的情況下也無(wú)法生成任一私鑰份額,更無(wú)法獲取任何比特幣私鑰。因此,本文方案有效提高了個(gè)體用戶的比特幣密鑰管理的安全性。 在密鑰生成協(xié)議中,Alice和Bob利用DH協(xié)議完成比特幣地址的生成工作。基于離散對(duì)數(shù)難解問(wèn)題,僅根據(jù)pkA、pkB、相關(guān)零知識(shí)證明等信息,任何人均無(wú)法計(jì)算得到相關(guān)私鑰份額skA或skB。在數(shù)字簽名協(xié)議中,Alice和Bob利用基于同態(tài)加密算法的雙方ECDSA來(lái)計(jì)算比特幣交易的數(shù)字簽名。攻擊者即使截獲了Alice和Bob通信的密文CT或者CT′,在沒(méi)有解密私鑰的條件下也無(wú)法得到相關(guān)私鑰份額的有用信息。因此,兩個(gè)協(xié)議中的數(shù)據(jù)傳輸工作可選用數(shù)據(jù)線完成。此外,本文方案利用CoinShuffle協(xié)議創(chuàng)建比特幣交易來(lái)有效提高用戶使用比特幣時(shí)的匿名性,利用問(wèn)責(zé)協(xié)議增強(qiáng)交易生成協(xié)議的魯棒性。 下面對(duì)方案的安全性進(jìn)行具體分析。本文方案可以抵御中間人攻擊、去匿名攻擊、雙重花費(fèi)、偽造攻擊,但無(wú)法抵御拒絕服務(wù)攻擊。 1) 抵御中間人攻擊。DH協(xié)議是無(wú)法抵御“中間人攻擊”的。在密鑰生成協(xié)議和數(shù)字簽名協(xié)議中,由于雙方的公鑰是由當(dāng)事方而不是可信第三方發(fā)布,所以攻擊者M(jìn)allory不僅能監(jiān)聽(tīng)Alice和Bob之間的信息,還能修改、刪除信息,并能產(chǎn)生全新的信息。因此,本文方案利用兩種離散對(duì)數(shù)的零知識(shí)證明來(lái)協(xié)助Alice或Bob對(duì)收到公鑰進(jìn)行驗(yàn)證從而抵御該攻擊。而在交易生成協(xié)議中Alice和其他成員都需對(duì)每輪發(fā)送的數(shù)據(jù)進(jìn)行簽名,這不僅可以抵御中間人攻擊,還能有效防止成員在該協(xié)議中進(jìn)行惡意操作。 2) 抵御去匿名攻擊。由于比特幣分布式賬本固有的性質(zhì),比特幣交易的輸入地址和輸出地址往往是相關(guān)聯(lián)的,用戶的隱私也由此受到損害。本文方案采用CoinShuffle協(xié)議來(lái)提高比特幣交易的匿名性。在此協(xié)議中,每個(gè)成員Pi依次利用后續(xù)成員Pj(j>i)的公鑰對(duì)其輸出地址進(jìn)行分層加密。從第2名成員開(kāi)始,每個(gè)成員Pi從成員Pi-1接收i-1個(gè)密文,并從密文中剝離一層加密,添加其輸出地址的密文后隨機(jī)洗牌。隨后將混洗的密文集發(fā)送給下一個(gè)參與者Pi+1。如果每位成員均誠(chéng)實(shí),則由最后一個(gè)成員生成輸出地址的混洗列表Tout。CoinShuffle協(xié)議[14]打亂了輸入輸出地址的對(duì)應(yīng)順序,并且映射關(guān)系在成員間不可見(jiàn),使用戶以真正的匿名方式使用比特幣。 3) 抵御偽造攻擊。首先對(duì)數(shù)字簽名協(xié)議的正確性做簡(jiǎn)要證明。Alice對(duì)Bob的密文進(jìn)行解密,得到δ=D(CT′),從而可以繼續(xù)計(jì)算: k-1·(m′+sk·rx) (26) 式(26)顯然與集中式的ECDSA的簽名結(jié)果相同,ECDSA的不可偽造性保證了數(shù)字簽名協(xié)議的不可偽造。另外,在此協(xié)議中,Alice不僅可利用公鑰對(duì)所生成的簽名做驗(yàn)證,也可以對(duì)接收到的其他成員的簽名進(jìn)行驗(yàn)證。當(dāng)所有的簽名驗(yàn)證無(wú)誤后,Alice才會(huì)將比特幣交易廣播到比特幣網(wǎng)絡(luò)中。若發(fā)現(xiàn)錯(cuò)誤簽名,進(jìn)入問(wèn)責(zé)協(xié)議,剔除不誠(chéng)實(shí)的合作成員后重新運(yùn)行協(xié)議。因此,攻擊者無(wú)法通過(guò)偽造交易的簽名來(lái)盜取用戶的比特幣。 4) 抵御雙重花費(fèi)。在創(chuàng)建比特幣交易的過(guò)程中,惡意成員可能會(huì)將已花費(fèi)的比特幣地址作為輸入地址,或者在協(xié)議執(zhí)行的同時(shí)另外創(chuàng)建單筆交易,并發(fā)布到比特幣網(wǎng)絡(luò)中,從而實(shí)現(xiàn)雙花。本文方案采用問(wèn)責(zé)協(xié)議來(lái)抵御雙重花費(fèi)。針對(duì)前者,各成員可以提前驗(yàn)證其他成員所提供的輸入地址是否有效,若無(wú)效,問(wèn)責(zé)惡意成員。對(duì)于后者而言,比特幣網(wǎng)絡(luò)最終僅會(huì)對(duì)其中一個(gè)交易達(dá)成共識(shí),因此,全體成員在簽名協(xié)議執(zhí)行以后,需要觀察共同創(chuàng)建的比特幣交易是否被區(qū)塊鏈記錄。如果發(fā)現(xiàn)某成員企圖實(shí)現(xiàn)惡意雙花,則進(jìn)入問(wèn)責(zé)協(xié)議。此外,問(wèn)責(zé)協(xié)議還起到保證交易生成協(xié)議正確執(zhí)行的作用。 表1分別從Alice和Bob的本地開(kāi)銷(xiāo)、通信開(kāi)銷(xiāo)、交互輪次等方面對(duì)方案主要協(xié)議的計(jì)算復(fù)雜性進(jìn)行分析。其中通信開(kāi)銷(xiāo)主要指Alice與Bob、Alice與其他成員之間的通信成本。在密鑰生成協(xié)議中,Alice和Bob的本地開(kāi)銷(xiāo)主要來(lái)自哈希運(yùn)算以及橢圓曲線上的點(diǎn)乘運(yùn)算,而通信開(kāi)銷(xiāo)主要為Alice和Bob之間對(duì)離散對(duì)數(shù)值的兩次零知識(shí)證明;在交易生成協(xié)議中,Bob因不參與該協(xié)議而不產(chǎn)生任何開(kāi)銷(xiāo),Alice的本地開(kāi)銷(xiāo)主要來(lái)自于數(shù)字簽名和公鑰加解密算法,而通信開(kāi)銷(xiāo)主要由Alice與其他成員進(jìn)行若干次數(shù)據(jù)交互所產(chǎn)生;在數(shù)字簽名協(xié)議中,Alice的本地開(kāi)銷(xiāo)主要來(lái)自于橢圓曲線上的點(diǎn)乘運(yùn)算和同態(tài)加解密算法,Bob還需完成若干次同態(tài)加性和乘性運(yùn)算,而通信開(kāi)銷(xiāo)主要來(lái)自于Alice和Bob對(duì)離散對(duì)數(shù)的兩次零知識(shí)證明,以及Alice與其他成員進(jìn)行的數(shù)據(jù)交互。為便于開(kāi)銷(xiāo)統(tǒng)計(jì),表1將Alice廣播(或接收并驗(yàn)證)數(shù)據(jù)的通信開(kāi)銷(xiāo)視為一致,并且忽略其他開(kāi)銷(xiāo)相對(duì)較小的運(yùn)算。 表1 方案的計(jì)算開(kāi)銷(xiāo)統(tǒng)計(jì) 表2為本文方案與現(xiàn)有的幾種密鑰管理方案的性能對(duì)比。Gennaro等[6]的方案適合企業(yè)或團(tuán)體對(duì)比特幣進(jìn)行聯(lián)合管理,而本文方案和其他三種方案均適合于個(gè)體管理比特幣。本文方案將智能手機(jī)錢(qián)包和硬件錢(qián)包相結(jié)合,既能滿足用戶隨時(shí)隨地進(jìn)行比特幣交易的需求,也能有效保證用戶密鑰的安全性。并且整個(gè)方案的設(shè)計(jì)與現(xiàn)有的比特幣系統(tǒng)完全兼容。 表2 方案的特性對(duì)比 1) 交易便利。當(dāng)使用硬件錢(qián)包花費(fèi)比特幣時(shí),一般需要先在固定的網(wǎng)站上創(chuàng)建交易,然后將交易發(fā)送到硬件錢(qián)包并請(qǐng)求數(shù)字簽名。硬件錢(qián)包完成簽名后將其發(fā)回計(jì)算機(jī)。這在某種程度上限制了用戶進(jìn)行比特幣交易的時(shí)間地點(diǎn)。而在本文方案中,用戶只需利用USB連接智能手機(jī)錢(qián)包和硬錢(qián)包就可隨時(shí)隨地完成比特幣交易,彌補(bǔ)了這一缺點(diǎn)。 2) 安全性高。本文方案可以抵御中間人攻擊、去匿名攻擊、雙重花費(fèi)等多種攻擊。即使智能手機(jī)錢(qián)包被攻擊者攻擊,但由于硬件錢(qián)包中的私鑰份額與網(wǎng)絡(luò)隔絕,攻擊者仍然無(wú)法獲取比特幣密鑰,這彌補(bǔ)了熱錢(qián)包易受黑客攻擊的弱點(diǎn)。此外,芥末錢(qián)包采用CoinJoin協(xié)議[13]來(lái)實(shí)現(xiàn)交易輸入輸出地址的不可鏈接,本文方案所利用的CoinShuffle協(xié)議[14]在前者的基礎(chǔ)上,進(jìn)一步實(shí)現(xiàn)了輸入輸出地址的映射關(guān)系在成員之間不可見(jiàn),這保證了成員內(nèi)部也無(wú)法獲取其他人輸出地址的信息,具有更高的匿名性。 3) 與比特幣系統(tǒng)兼容。整個(gè)方案所采用的雙方ECDSA以及CoinShuffle協(xié)議是不需要任何可信第三方的,并且與當(dāng)前的比特幣系統(tǒng)完全兼容。 本文以雙方ECDSA和CoinShuffle協(xié)議[14]為理論基礎(chǔ),將智能手機(jī)錢(qián)包與硬件錢(qián)包結(jié)合以提高比特幣密鑰的安全性。本文方案以最理想的情況為例闡述協(xié)議內(nèi)容,但現(xiàn)實(shí)情況卻更為復(fù)雜。在實(shí)際情況中,用戶可能有若干輸入地址、若干輸出地址。在交易生成協(xié)議中,只需先將全體成員的每個(gè)輸入地址進(jìn)行洗牌,再將每個(gè)輸出地址進(jìn)行洗牌就可實(shí)現(xiàn)比特幣地址之間的不可鏈接性。此外,比特幣交易的匿名性會(huì)隨著參與交易生成協(xié)議的成員人數(shù)n的增加而加強(qiáng),但交易完成時(shí)間也會(huì)隨之延長(zhǎng),因此用戶應(yīng)根據(jù)實(shí)際需求選擇合適的成員人數(shù)n。本文方案為其他區(qū)塊鏈項(xiàng)目的密鑰管理方案提供了新思路,具有一定的研究意義。1.3 同態(tài)加密算法
1.4 CoinShuffle協(xié)議
1.5 零知識(shí)證明
2 方案設(shè)計(jì)
3 具體方案
3.1 密鑰生成協(xié)議
3.2 交易生成協(xié)議
3.3 數(shù)字簽名協(xié)議
3.4 問(wèn)責(zé)協(xié)議
4 方案分析
4.1 安全分析
4.2 性能分析
5 結(jié) 語(yǔ)