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


3 具體方案
3.1 密鑰生成協議

3.2 交易生成協議



3.3 數字簽名協議



3.4 問責協議

4 方案分析
4.1 安全分析
4.2 性能分析


5 結 語