王子鈺劉建偉張宗洋,3喻 輝
1(北京航空航天大學網絡空間安全學院 北京 100191)2(北京航空航天大學高等理工學院 北京 100191)3(信息安全國家重點實驗室(中國科學院信息工程研究所) 北京 100093)
自從2008年中本聰提出基于區塊鏈技術的比特幣這一全新的去中心化的數字貨幣[1],電子現金技術就此進入了全新的發展篇章[2].傳統的電子現金以1983年Chaum提出的盲不可追蹤E-cash[3]為代表,用戶通過可信中心機構實現交易交互,并利用盲簽名技術保護用戶隱私.然而在比特幣區塊鏈系統中,公開的賬本揭示各交易從區塊獎勵交易(coinbase transaction)到未花費交易輸出(unspent transaction output, UTXO)的所有細節.作為用戶資產的合法證明,區塊鏈賬本包括各歷史交易的輸入交易簽名、面額和輸出交易地址;而輸出交易地址又可以視為比特幣系統用戶身份[1,4].研究表明,電子現金的匿名性(anonymity)需要實現假名性(pseudonym)和不可連接性(unlinkability)[5].比特幣區塊鏈賬本的輸出交易地址是簽名公鑰經過一定雜湊變換的Base58Check編碼字符串,具有一定程度的假名性;但由于交易關系在區塊鏈中是顯式表達的,各用戶之間并非不可連接的.因此,比特幣系統不匿名且容易泄露用戶隱私[6].
針對比特幣系統用戶隱私的常見攻擊方式為去匿名化(deanonymous)攻擊[7-10],該攻擊包括3個步驟[11]:根據區塊鏈賬本生成交易圖;根據交易內容將交易圖轉化為地址圖;根據社會工程學意義上的交易習慣將地址圖轉化為用戶實體圖.這些交易習慣包括:重疊的交易輸入意味著多個輸入交易地址被同一個用戶實體控制;唯一的新產生的輸出地址很可能是輸入交易用戶控制的找零地址.
需要指出的是,本文探討的匿名性僅涉及區塊鏈賬本的協議層面,而針對點對點(peer-to-peer, P2P)網絡的去匿名化攻擊不在本文的探討范圍內.學術界針對區塊鏈賬本式數字貨幣協議層隱私保護提升措施包括3個方面:
1) 混幣(Mixing).為打破交易之間的相互連接關系,Maxwell于2013年提出CoinJoin的思想[12],即若干用戶執行相應協議,將等額比特幣的交易輸出至新生成的地址,從而混淆交易中的連接關系.基于這一思想的混幣協議有眾多改進和變體[13-23].盡管這些研究成果打破交易實體間聯系,但是本質只保護了用戶身份隱私,混幣交易仍舊暴露交易金額.
2) 替代幣(Altcoin).由于比特幣系統在隱私性、交易速度、可擴展性等許多方面并不完美,因此基于區塊鏈技術的替代幣亦受到學者們的廣泛關注,主要包括門羅幣(Monero)[24],ZeroCoin[25]和ZeroCash[26].但這些替代幣也各有缺陷.門羅幣基本思想是同時混淆全網當前待執行的若干筆交易,本質仍借鑒了CoinJoin的混幣概念,而門羅幣分析攻擊[27-28]表明非強制性混幣的設計不足以迫使用戶主動確保交易匿名集,弱匿名集的交易乃至非匿名性交易的增殖效應將大大削弱系統整體匿名性;且門羅幣在不使用RingCT的情況下也無法保護交易金額隱私.ZeroCoin[25]只保護付款者隱私;ZeroCash[26]在其基礎上將擴展隱私保護的內容到付款者、付款金額及收款者三方面,實現全匿名區塊鏈系統,但該方案的效率較低.
3) 加密交易(confidential transaction, CT).Maxwell在2015年首次提出了基于Pedersen承諾的加密交易思想[29].礦工(miner)可在具體交易金額未知的前提下利用承諾同態性對交易的輸入和輸出總和進行驗證.之后,該思想被持續完善與補充[30-31].但是Pedersen承諾在標準加密交易中無“打開承諾”的操作,交易收款者仍需額外通信信道協商交易金額.Dumb Account方案[32]利用非交互式零知識(none interactive zero knowledge,NIZK)證明技術來驗證基于Paillier同態密文交易的合法性,符合CT的理念并可直接解密密文;但是其密文和公鑰過長將導致交易效率極低.上述金額加密方案都未改善輸入輸出的不可連接性,仍舊暴露用戶隱私.Ruffing和Moreno-Sanchez[33]在2018年將CT和CoinJoin的概念結合,提出了分布式隱藏交易金額的ValueShuffle協議,該協議同樣因為無強制混幣要求而不能抵抗分析攻擊[27-28].
綜上所述,本文研究一種實現收付款者身份隱私保護、交易金額加密的全匿名區塊鏈方案;該方案因系統性強制嵌入混幣操作到全區塊中,以抗文獻[27-28]的分析攻擊;并在方案構造過程中考慮密文長度,避免引入過多的交易存儲開銷而導致單個區塊中的交易數目過少.
本文結合了混幣和加密交易的思想實現付款者、付款金額及收款者三者隱私保護的全匿名區塊鏈.本文利用BGN06加密方案*本文使用的同態加密方案最早于2005年由Boneh等人發表于TCC 2005會議[34],后由作者修訂于2006年發表在作者個人主頁,因此本文統一以更新稿年份代指本方案,即BGN06加密方案.的類Pedersen承諾同態性進行交易金額驗證,且交易收款者無需額外通信可直接解密密文,相比Dumb Account方案[32]密文長度減少一半;利用新型NIZK證明技術BulletProof[35]驗證交易金額的正值區間,改進原始CT實現[29]和MimbleWimble[31]中利用Borromean環簽名的區間證明方案;利用BGL03單向聚合簽名[36](one way aggregated signature, OWAS)及混幣技術保護用戶身份隱私;通過刪除獨立交易簽名和加密方案公鑰來提高區塊中存儲的交易數目.在本方案中,礦工負責交易驗證、交易打包及交易混淆,符合礦工實體在原始區塊鏈系統分工;嵌入混幣方案到全區塊的范疇可提升匿名集的大小,可抗分析攻擊[27-28].
本文主要貢獻有5個方面:
1) 在原始區塊鏈系統中,礦工負責驗證交易及區塊的合法性.本文基于此特性進行適當修改,為礦工添加加密交易密文驗證及交易混淆的功能以實現全匿名區塊鏈.
2) 結合BGN06加密方案的同態特性,提出四步驗證機制,符合真實區塊鏈系統交易模型,確保交易發起者和驗證礦工不能非法增加或減少其所擁有的未花費交易額度;且交易收款者無需額外通信信道即可獲知輸入交易金額.
3) 利用BGL03單向聚合簽名方案聚合區塊內部所有交易的輸入交易簽名,系統性嵌入混幣技術到全區塊的范圍,保護交易用戶身份隱私且可抗針對區塊鏈交易數據的分析攻擊[27-28].
4) 本文所采用的BGN06加密方案密文長度在相同安全性下為Dumb Account方案[32]中Paillier密文長度的一半;且為進一步降低區塊中交易存儲開銷,礦工打包交易密文到區塊的過程中,可刪去加密公鑰而只保留簽名公鑰以便于權屬證明.對比評估本方案相比各隱私保護區塊鏈方案,定量分析后可得知本區塊鏈系統因實現全匿名特性而引入的交易存儲開銷是合理的.
5) 本方案相比ZeroCash[26]同樣可實現付款者、收款者身份和交易金額三者隱私保護的全匿名區塊鏈系統.但本方案不需要ZeroCash中的可信啟動(Setup)階段,不會因秘密參數泄露而造成貨幣濫發;且支持區塊鏈數據修剪(Pruning),避免如ZeroCash中密文數據占用過大的存儲開銷.
本節對比特幣區塊鏈系統及相關密碼學進行詳細敘述.其中,為簡化敘述便于讀者理解,本節關于比特幣區塊鏈交易結構的介紹采用Pay-to-Public-Key(P2PK)結構,并省略部分與本文思想無關的細節.本節分別規定本文所用的符號;分析比特幣區塊鏈系統的交易結構、區塊結構和UTXO池;介紹CoinJoin思想與混幣概念;介紹BGL03單向聚合簽名方案、BGN06同態加密方案與Pedersen承諾方案、包括BulletProof正值區間驗證和Pedersen承諾方案相等驗證等在內的本方案所需要的NIZK證明技術.
區塊鏈系統用戶實體為Alice,Bob,Carol,David;礦工Miner.抗碰撞雜湊函數Hash.大素數p,q,q1,q2;大合數n=q1q2.比特幣區塊鏈系統中交易為tx,區塊為block;每一筆交易中輸入、輸出為TXin,TXout.模p,q和n的整數群表示為p,q和n;用于聚合簽名的橢圓曲線群和雙線性映射表示為,1和e1:×→1,用于BGN06加密方案的表示為2,3和e2:2×2→3.從集合或群中隨機選取元素表示為.交易及其下標索引表示為:向用戶公鑰地址b發起的第a個輸入交易為TXina,b,并生成向用戶公鑰地址d發起的第c個輸出交易和TXtotal為交易發起用戶用礦工驗證公鑰加密的密文交易;TXcoinbase為礦工的區塊獎勵交易.交易中加密的金額用v表示.密碼學公私鑰為PK,SK;密文C,明文消息M;數字簽名σ.下標i為加密和簽名敘述過程中用戶索引,用戶總個數為k.
比特幣區塊鏈系統包括用戶和礦工2類實體.用戶執行交易過程,生成交易并廣播;礦工接收到若干交易,對這些交易的合法性進行驗證后打包生成區塊,對區塊執行工作量證明,獲得幸運數字(Nonce)后即將合法區塊廣播至全網,并更新UTXO池.以Alice發起一筆向Bob的交易為例,Alice將生成的交易廣播,被臨近礦工Miner收到后驗證;Miner打包若干合法交易生成區塊,并將合法區塊廣播至全網;且增加一筆指向Bob地址的未花費輸出.比特幣區塊鏈系統架構及基于上例分析的交易發起與認證的過程如圖1所示:

Fig. 1 Transaction proposing and confirmation圖1 交易發起及確認
比特幣區塊鏈系統的交易結構包括交易ID、鎖定時間和輸入輸出交易等信息.交易ID是交易實體數據的雜湊值;鎖定時間約束了交易生效的UTC時間(國際標準時間);輸入交易引用了當前交易的金額來源,來自于先前交易的輸出;輸出交易根據具體金額指向不同的輸出地址.此外,輸入交易需要提供對應先前輸出交易公鑰地址的簽名以證明所有權.比特幣區塊鏈系統中的公鑰與簽名使用基于橢圓曲線的數字簽名算法(elliptic curve digital signature algorithm, ECDSA);輸出地址是ECDSA公鑰經過若干雜湊變換而成的.值得注意的是,交易支持多輸入、多輸出,輸出地址可為付款方控制的找零地址,以此實現比特幣系統中金額的合并與拆分.比特幣交易結構如圖2所示:

Fig. 2 Bitcoin transaction structure圖2 比特幣交易結構
比特幣區塊包括區塊信息、區塊頭部和區塊本體3部分.區塊信息包括網絡魔法數(作為比特幣客戶端解析區塊數據時的識別碼)、區塊大小.區塊頭部包括當前區塊雜湊值、引用先前區塊雜湊值、區塊中交易的梅克爾(Merkle)樹樹根、幸運數字、困難目標和時間戳.雜湊當前區塊本體、先前區塊、幸運數字的結果應滿足系統困難目標.比特幣區塊鏈結構如圖3所示:

Fig. 3 Bitcoin blockchain structure圖3 比特幣區塊鏈結構
比特幣所有已驗證(Verified)、已確認(Confirmed)且未花費(Unspent)交易被存入UTXO池中.礦工驗證一筆交易是否合法的過程包括:輸入交易是否未花費,即在UTXO池中存在輸入交易;輸入金額總和與輸出金額總和相等;輸入輸出金額皆為正值;輸入交易簽名符合先前輸出交易的公鑰.如圖4所示,以一實例詳述上述過程.假設在先前區塊中包含某筆交易支付給Alice的地址2比特幣;Alice在區塊1中第1筆交易分別對Bob和Carol支付1比特幣;Bob在區塊2中第1筆交易支付1比特幣給David.礦工收到Alice發起的交易首先在先前的UTXO中尋找到該交易所引用的某人向Alice支付2比特幣交易的雜湊值及其索引,而后驗證輸入輸出是否相等、金額正值及公鑰簽名匹配,最后將若干合法交易打包成區塊并進行執行后續操作.礦工針對Bob發起的交易驗證過程類似,在UTXO池中尋找所引用的輸入交易雜湊值,這里具體為區塊1中第1筆交易,確認其索引1的輸出金額1與當前輸出金額1相等;確認其輸出公鑰地址匹配PKBob當前交易簽名σBob.

Fig. 4 Bitcoin blockchain and transaction example圖4 比特幣區塊鏈與交易實例
比特幣區塊鏈系統中的CoinJoin交易包含若干對金額相等的輸入和輸出,通過各種類型的協議打亂原本的輸入輸出關系.當交易發起者驗證自己的輸出地址存在于輸出列表后,簽署CoinJoin交易.當所有交易發起者簽署該交易后,該交易生效并被廣播給礦工.CoinJoin的本質是破壞輸入輸出關系,使得去匿名化攻擊失效,即實現了付款者和收款者隱私.若干CoinJoin變體使用混幣費用來防止DoS、女巫攻擊.混幣費用亦作為提升匿名集的動機.若某一交易與弱匿名集乃至無匿名交易混幣,其真實匿名集則無法達到所宣稱的大小,因此敵手可通過增殖效應對其去匿名化攻擊,即CoinJoin的匿名性依賴于匿名集大小.此外,CoinJoin還存在一個重要的缺陷,即混幣服務無法對參與混幣的金額進行加密,且要求參與混幣的必須為同一金額的交易.
本節參照文獻[36]給出BGL03單向聚合簽名的定義.單向聚合簽名方案包括5個算法:密鑰生成算法、簽名算法、驗證算法、聚合算法和聚合驗證算法.聚合出的簽名長度與聚合前的獨立簽名長度相當.聚合實體可以與簽名實體完全不同,聚合算法只需獲取參與簽名用戶單獨的簽名/消息對和公鑰,即可生成聚合簽名.聚合驗證算法只需聚合簽名、聚合用戶公鑰和消息集合,即可驗證聚合簽名是否合法.需要強調的是,聚合簽名的潛在要求是聚合過程中被簽名的消息應彼此不同.
BGL03單向聚合簽名方案:
1) 參數約定.大素數p,橢圓曲線群為和1,群生成元為g,雙線性映射e1:×→1;

3) 簽名.待簽名消息為Mi∈{0,1}*,雜湊變換為Hi=Hash(Mi)∈,簽名σi=∈;

5) 聚合.要求Mi各不相同,聚合結果為簽名
6) 聚合驗證.驗證等式是否成立:
上述聚合簽名方案的安全性依賴于隨機預言模型,需要假設判定性Diffie-Hellman(DDH)問題容易但計算性Diffie-Hellman(CDH)問題困難的間隙Diffie-Hellman群(GDH),且雙線性映射的原像為不同的群(co-GDH)[36].此外,聚合簽名方案的單向性體現在從聚合簽名中提取獨立的簽名個體的難度可規約到解CDH問題[37].
本節介紹BGN06同態加密方案[34]與Pedersen承諾方案[38].
1) BGN06同態加密方案

PKi=(ni=q1iq2i,2i,3i,e2i,gi,hi).

③ 解密.計算密文q1i次方得:

④ 同態性.密文域的乘法運算等于明文域的加法,即
故同態性要求用相同公鑰加密,且盲化因子隨機數影響密文形態.需要強調的是,若事先約定橢圓曲線,則群參數n與群生成元g可決定2群參數;且群3與雙線性映射e2在文獻[34]中用于密文加法同態性,該性質在本全匿名區塊鏈方案中不需要使用,故刪減后的公鑰可保留為PK=(ni,gi,hi).
2) Pedersen承諾方案
文獻[38]介紹的Pedersen承諾方案與BGN06加密方案密文形態類似,都將數域群上的秘密變換到橢圓曲線群上,并通過隨機盲化因子防止秘密泄露.需要強調的是,在BGN06加密方案中,元素h不再是隨機群元素,而是2的q1階子群的生成元,并作為公鑰的一部分.因此,BGN06加密方案賦予Pedersen承諾方案“解盲化”或“解承諾”的能力,這符合區塊鏈交易中收款方可以直接通過密文確認自己收到交易金額的特性,而不需要依賴額外的金額傳輸信道.
本方案需要的零知識證明用于交易發起者(付款方)向交易驗證者(礦工)驗證交易的合法性,包括承諾內容相等證明和區間證明.所有證明過程是非交互的,即示證內容包含在交易發起者廣播的交易內容中.
1.6.1 承諾相等證明
文獻[40]介紹承諾相等證明協議為:證明者Prover欲向驗證者Verifier證明承諾E和F是對相同明文M值的承諾.針對安全參數t,l,s1和s2,承諾隨機數分別為r1和r2,模n1群中元素g1和h1,模n2群中元素g2和h2,承諾值分別為
其中,
r1∈[-2s1n1+1,2s1n1-1],
r2∈[-2s2n2+1,2s2n2-1].
步驟1.Prover選擇隨機數ω,η1,η2并計算
其中,
ω∈[1,2l+tb-1],
η1∈[1,2l+t+s1n1-1],
η2∈[1,2l+t+s2n2-1].
步驟2.Prover計算y=H(W1‖W2).
步驟3.Prover計算:
D=ω+yM,D1=η1+yr1,D2=η2+yr2.
上述D,D1,D2∈;并發送證明π=(y,D,D1,D2)給Verifier(包括承諾E和F);
步驟4.Verifier驗證等式是否成立:
1.6.2 區間證明
高效非交互式BulletProof區間證明過程詳見文獻[35],本文由于篇幅所限,不贅述該方案證明過程.需要強調的是,BulletProof區間證明方案相比原始CT方案[29-31]中基于Borromean環簽名的區間證明方案和Dumb Account方案[32]中區間證明方案在效率上有所提升.
本節將詳細介紹基于聚合簽名與加密交易的全匿名區塊鏈系統.全匿名區塊鏈系統保護用戶在交易過程中的隱私數據,包括付款者身份、交易金額和收款者身份3類數據.因此,本方案擁有類比于ZeroCash[26]方案的全匿名特性.本節依次詳述方案初始參量;詳述礦工對加密交易合法性的驗證過程;詳述礦工對一個區塊內所有交易聚合簽名的打包過程;介紹全匿名區塊鏈及UTXO池構造.本節相等證明的思路基于文獻[32]、聚合簽名的思路基于文獻[16]并根據本方案的BGN06加密方案實際情況做出相應修改.
本全匿名區塊鏈系統所依賴的密碼學工具包括BGN06加密方案[34]與BGL03單向聚合簽名[36],因此需要對這2個方案的初始參數進行約定.其內容包括BGN06加密方案的合數階橢圓曲線;BGL03單向聚合簽名方案的素數階橢圓曲線、大素數p、群和1、群生成元g、雙線性映射e1:×→1.
礦工交易驗證的本質是驗證交易發起者(付款方)生成的交易是否合法:包括付款方對輸入交易的權屬證明(簽名符合先前交易輸出的公鑰)、交易輸入之和與輸出之和相等及所有金額滿足正值等內容.為敘述方便,本節在此暫時忽略對交易費的考量,但本方案支持交易發起者顯式地向礦工可解密賬戶支付交易費用.驗證交易的本質是確保交易發起者只能對自己所擁有的金額執行交易操作,無法憑空創造或惡意破壞交易金額.本節敘述礦工對交易驗證的過程,包括在第2.2.1節詳述四步驗證交易輸入、輸出之和相等,在第2.2.2節介紹利用BulletProof驗證金額區間及簽名驗證.
2.2.1 四步驗證輸入輸出和相等
交易驗證的本質是確保交易發起者無法作弊.因此交易驗證的過程包括:交易發起者對自身擁有交易金額的正確解讀與對交易輸出金額的正確分發.不失一般性,本節以多輸入、多輸出的交易為例詳述四步驗證過程.

2) 交易生成.
PRNc,d,TXoutc,d←TXCreate(TXina,b),
其中,TXina,b表示用PKb加密的若干輸入交易密文,下標a表示輸入密文序號;TXoutc,d表示用PKd加密的若干輸出交易密文,下標c表示輸出密文序號.交易輸入與輸出均為對金額va,b或vc,d的BGN06密文,要求va,b,vc,d∈[0,vtotal],輸入交易密文為

例如:輸入、輸出交易可為
TXin1,1,TXin2,1,TXin1,2,TXin2,2,TXin3,2,
TXout1,3,TXout2,3,TXout3,3,TXout1,4,TXout2,4,
即交易生成者輸入為用公鑰PK1加密的交易TXin1,1,TXin2,1,和用公鑰PK2加密的交易TXin1,2,TXin2,2,TXin3,2;交易輸出是用PK3加密的交易TXout1,3,TXout2,3,TXout3,3,和用公鑰PK4加密的交易TXout1,4,TXout2,4.
3) 交易驗證.礦工針對交易發起者的交易驗證,



相等秘密驗證過程參照1.6節,四步驗證為:




2.2.2 其他驗證
π5為BulletProof驗證交易金額正值所用證明,驗證過程詳見文獻[35].由于BGN06加密方案本質是針對n上的金額,因此負值模n計算后為正,可使得惡意交易發起者憑空創造或惡意毀滅交易輸出金額.需要強調的是,由于驗證過程包括輸入輸出求和相等驗證,因此區間證明不需單獨驗證每筆交易金額的上限是否小于輸入或輸出總和.
單筆交易的簽名驗證過程與傳統比特幣區塊鏈系統相同,即驗證當前交易的σb與先前交易PKd中的簽名驗證公鑰是否匹配.
礦工在驗證完若干合法交易后,需要對合法交易打包成區塊并進行工作量證明,以獲得區塊獎勵.這里的潛在要求是所有交易為已確認(Confirmed)的交易,因此不存在對未驗證(Unverified)交易的引用.所有交易將去除中間證明,只包括內容:
TXina,b,(PRNc,d,TXoutc,d),σb,PKd.
由于BGL03單向聚合簽名方案要求聚合的簽名消息完全不同,而同一區塊中可能存在支付給相同收款方公鑰且相同金額的交易TXoutc,d.因此,礦工需要對每筆輸出交易的偽隨機數PRNc,d進行驗證,確保區塊內(PRNc,d,TXoutc,d)完全不同,對于相同偽隨機數、交易輸出密文對的交易可延遲到后續區塊處理.
礦工針對若干筆附帶有偽隨機數的交易內容進行隨機排布,包括無輸入的coinbase交易TXcoinbase,并聚合簽名σ=∏σb,則區塊內的簽名和交易內容為
σ,TX=(TX1,TX2,…,TXi,…),
TXi=[TXcoinbase,TXina,b,(PRNc,d,TXoutc,d),PKd]i.
需要強調的是,為削減區塊中次要信息所占據的空間以最大化提升區塊中的交易數量,包含到區塊中的交易輸出公鑰只需包含交易收款方簽名公鑰以用于交易權屬證明,而不需要包含加密公鑰.
為驗證先前交易的引用以匹配單向聚合簽名的內容,UTXO池的結構也需要適當修改.原始的比特幣區塊鏈系統的UTXO結構為:hashTX,[Index],現修改為hashBlock,H(PNGc,d,TXoutc,d).這是因為,原始交易引用的索引是針對單一交易中不同的交易輸出;而全匿名區塊鏈中的輸入索引是針對混淆交易順序的區塊中所有交易輸出的索引.因此,針對1.2節中原始區塊鏈與UTXO池結構所舉實例,圖4可對應修改為圖5.
本節詳述本方案與其他方案效率與功能對比,首先論證本方案安全性與匿名性;其次詳述本方案公鑰長度、密文長度,及因功能提升所引入的區塊中交易存儲開銷,并與參考文獻對比;最后詳述本方案與各區塊鏈隱私保護改進方案在功能和效率方面的對比提升.

Fig. 5 An example of full anonymous blockchain and transaction圖5 全匿名區塊鏈系統與交易實例
本方案基于BGN06公鑰加密方案和BGL03聚合簽名方案.其中BGN06密文安全性基于子群判定困難問題,該問題可簡述為:在未知大合數群階數的因數分解前提下,無法在多項式時間內判斷某一隨機群元素是否屬于該合數階群的素數階子群;具體的安全性分析詳見文獻[34].BGL03聚合簽名安全性依賴co-GDH群上的CDH困難問題[36-37].
本方案通過四步相等驗證和BulletProof金額正值驗證,交易發起者無法在交易生成過程中對加密金額作弊,且無法憑空造幣或惡意毀幣;無加密方案私鑰的礦工收到輸入交易密文無法正確解密,只能驗證交易是否合法,因此礦工也不能造幣或毀幣.需要強調的是,本方案的交易金額權屬證明不可只依賴密文解密能力而拋棄簽名驗證,因為除加密者外,解密合法密文并不能驗證用戶身份.但在方案實現中,可在鏈上數據中刪去交易收款者加密公鑰以提高區塊中可容納的交易數目.基于BGN06加密方案的密文交易符合加密交易的概念,確保用戶交易金額隱私;礦工打包交易時隨機排列合法交易,混淆了交易用戶關系,確保了收付款者隱私.因此,本區塊鏈方案是全匿名的.此外,本方案區塊數據可支持公開驗證,只需驗證聚合簽名、區塊內的所有交易密文和偽隨機數、輸出公鑰是否滿足:
∏e1(PKc,d,H(PNGc,d,TXoutc,d))=e1(g,σ).
3.2.1 公鑰與密文長度
根據當前硬件系統的發展,密碼學安全參數的選取需要保證基于大整數分解方案模數為2048 b(256 B),基于橢圓曲線方案的安全參數為256 b(32 B)[41].此外,對于使用256 b表達的橢圓曲線上的點可用33 B編碼表示[29].因此,本方案中BGN06加密方案使用256 B表示大合數;使用32 B表示BGL03聚合簽名的橢圓曲線.
由1.5節所述,若本方案在系統參數約定時優先約定加密方案所基于的橢圓曲線,則群2可由群參數nb與群生成元gb決定;且群3與雙線性映射e2因不需要密文加法同態而刪去.因此,本方案公鑰長度為|PKb|=|nb|+|gb|+|hb|+|gxb|=801 B.但是,為提高區塊可容納交易數,本方案在礦工驗證交易合法后,刪去包含到區塊交易輸出地址中關于BGN06加密交易的公鑰.因此鏈上交易所含公玥長度加密交易需要模大合數nb,因此本方案密文長度為|nb|,即256 B.
不考慮P2PKH,原始比特幣區塊鏈系統用8 B空間表示輸出金額,33 B表示ECDSA公鑰.參考文獻[30-31]中標準加密交易實現的公鑰,其結構包括掃描密鑰版本、傳統地址版本、掃描密鑰、傳統地址,并對上述內容進行Base58Check編碼.其中掃描密鑰本質是基于橢圓曲線的Diffie-Hellman(ECDH)協商密鑰,協商出相同的隨機數種子以用于生成相同的盲化因子.不考慮版本號和P2PKH變換,文獻[30]所用中ECDH密鑰長33 B,ECDSA公鑰長33 B,共66 B.此外,文獻[30]中的密文采用Pedersen承諾形式,承諾密文為橢圓曲線上點,長度為33 B.ValueShuffle協議[33]需要采用分布式協商算法混幣并協商隨機盲化因子之和,因此盡管在分布式協商過程中需要增加盲化因子所帶來的通信開銷,但其基礎加密交易公鑰、密文長度與原方案[30]相同.
若考慮相同安全性(大整數分解需要大合數為256 B),則文獻[32]中Dumb Account系統需要的Paillier密文需要512 B長度表示(模n2群);加密公鑰為大合數與群生成元,長度為256+256=512 B.同時考慮ECDSA簽名公鑰,總公鑰長度為512+33=545 B.
3.2.2 交易與區塊大小
由于本方案相比原始的比特幣區塊鏈方案將明文存儲的金額轉換到模n群上的密文,將導致交易(區塊)大小對應提升;但由于采用了BGL03聚合簽名的方案,將區塊內所有交易的簽名聚合成一個簽名,且在交易包含過程中刪除了BGN06加密方案的公鑰,又從另一個方向縮小了區塊中交易的大小.當前,區塊鏈擴容問題為學術界研究熱點[42],因此,本節定量評估本文與各參考文獻中單一區塊中可容納的交易數目.
對于原始比特幣區塊鏈系統,近一年的區塊平均大小為644.2 kB,包含交易個數為1 682[43].扣除區塊頭及相關信息約100 B,可計算得每個交易大小約為392 B.其中,交易頭尾與輸入輸出無關的數據為8 B,不考慮P2PKH情況及交易輸入輸出個數計數器大小,每筆輸入包含32 B引用先前交易雜湊值、4 B索引、64 B的ECDSA簽名與4 B序號,每筆輸出包含33 B的ECDSA公鑰與8 B金額.因此若考慮輸入與輸出相等情況,平均約有2.649筆輸入輸出;考慮極限情況為單輸入、6.832筆輸出或單輸出、3.299筆輸入.根據上述交易輸入輸出數據,結合3.2.1節各方案公鑰、密文長度,計算在極限輸入輸出、相等輸入輸出時各方案區塊包含交易個數,結果如表1所示:

Table 1 Comparison of Public Key Length, Ciphertext Length and Transactions Number表1 公鑰與密文長度
詳細分析表1中加密交易密文在區塊中交易存儲開銷的評估數據,BGN06的密文大小還是顯著影響交易容量.BGN06的密文安全性基于合數階雙線性群上的子群判定問題,該困難問題的前提是合階數分解困難,因此不能選用過小的模數n.需要強調的是,雖然本方案相比標準加密交易實現的密文長度無優勢,但標準加密交易的Pedersen承諾無“解承諾”階段,即用戶在執行交易過程中,還需要增加額外的通信信道告知收款方具體交易金額,這不僅增加通信開銷,容易泄露用戶隱私,且收款方不能驗證是否收到付款方所聲稱的交易金額.相比之下,本方案的BGN06密文支持收款方私鑰解密,支持收款方直接通過交易信息獲取交易金額,符合實際交易場景,且根據對比基于Paillier密文的Dumb Account方案[32],因功能提升所引入的交易存儲開銷是合理的.
在需要事先協商混幣對象的中心化或分布式混幣混幣方案[13-15,17-18,20-23]中存在自舉階段(Bootstra-pping),即混幣過程是用戶非強制選擇的.雖然可利用Xim[19]公告板配對混幣用戶,但一旦出現弱匿名集或無匿名性混幣對象,其增殖效應將影響全網隱私保護效果[27-28],即使利用環簽名方案內嵌混幣服務的門羅幣[24]也不能幸免.因此,只有類似本方案與OWAS方案[16]、ZeroCoin[25]等將混幣強制嵌入交易系統的方案能保證匿名集的大小,使其足夠抵抗此類分析攻擊.相比之下,基于加密交易的方案[29-32]都不保護用戶隱私,且Pedersen承諾交易密文[29-31,33]需要額外通信信道傳輸交易金額.若交易收款者無法直接解密交易密文,則不能驗證是否收到付款方所聲稱的交易金額,直到下次花費該交易時才驗證輸入輸出合法性.ValueShuffle方案[33]雖然結合加密交易和分布式混幣實現了全匿名,但是非系統性嵌入混幣不抗分析攻擊[27-28].
綜上所述,本方案相比若干片面的區塊鏈隱私保護提升方案實現了全匿名性,并在區塊交易容量上相比Dumb Account方案[32]有所提升.相比全匿名方案ZeroCash[26],本文方案的系統參數約定不暴露加密交易相關的敏感信息,不存在因初始化信息泄露而出現的貨幣超發風險;相比ValueShuffle方案[33]可抗分析攻擊,用戶身份匿名集覆蓋到全區塊.本方案亦可支持類似MimbleWimble[31]的區塊鏈修剪,且修剪后的區塊鏈需只需保留聚合的交易簽名,進一步減小修剪后的區塊鏈大小.本方案與上述相關研究的具體功能對比如表2所示:

Table 2 Comparison of Related Works About Anonymous Blockchain Improvement表2 相關匿名區塊鏈改進方案功能對比
混幣技術基于Maxwell于2013年提出CoinJoin的思想[12],一筆CoinJoin交易混淆若干交易發起者制定的輸出地址,要求混幣的比特幣金額相等且公開.這一思想對匿名性的提升程度取決于參與混幣用戶的數目,即匿名集.基于這一思想的混幣協議有眾多改進和變體版本,包括結合兩方公平交換思想的方案[13];依賴若干中間人且兼容比特幣系統的公平交換方案[14];依賴智能合約的盲簽合約公平交換方案[15];基于單向聚合簽名并將混幣中心與礦工結合的系統性混幣方案[16];引入可信第三方的Mixcoin方案[17]及其利用盲簽名提升匿名性的變體Blindcoin方案[18];配對混幣用戶的Xim方案[19];基于CoinSwap思想[20],并兼容當前比特幣系統的Tumblebit方案[21];基于密碼學技術實現的點對點無中心混幣協議CoinShuffle[22]和引入DC-net的變體CoinShuffle++方案[23]等.但是,盡管上述研究成果打破交易實體的聯系,并在內外部不可連接性、混幣效率、抗偷幣、抗拒絕服務(denial of service, DoS)攻擊、抗女巫(Sybil)攻擊等方面各有所改進,但本質只保護了付款者和收款者身份隱私,CoinJoin交易仍舊暴露交易金額;且方案[13-15,17-18,20-23]需要自舉階段事先協商混幣對象,并可能因為弱匿名集或無匿名性混幣對象所導致的增殖效應而影響全網隱私保護效果[27-28].
此外,門羅幣[24]、ZeroCoin[25]和ZeroCash[26]等替代幣在引入改進功能的同時仍具有一定問題.門羅幣[24]交易包含多個輸入,利用環簽名技術可證實輸入交易的所有權卻不暴露簽名實體,其基本思想與CoinJoin混幣概念類似,但文獻[27]所述門羅幣分析攻擊可追蹤約88%的交易數據起源.全網約62%的交易輸入易遭受基于“鏈式反應”的分析攻擊而暴露用戶身份[28].此外,門羅幣交易也不強制保護交易金額隱私.基于零知識證明技術的ZeroCoin[25]系統引入非可連接性“籌碼”的思想,將混幣的范疇擴展到全網可花費的所有“籌碼”.鑄幣(Mint)時通過ZK技術證明付款者持有等額比特幣,在不泄露付款者隱私的前提下自主獲得“籌碼”;兌換(Redeem)時亦利用ZK技術證實“籌碼”的合法性并記錄所有歷史已花費籌碼的列表.但是,ZeroCoin[25]不保護交易金額和收款者隱私,且相對于比特幣系統維護未花費交易輸出,維護已兌換籌碼賬本的代價相對高昂.ZeroCash[26]在ZeroCoin[25]的基礎上將隱私保護的內容擴展到付款者、付款金額及收款者三方面,實現了全匿名;但是其問題包括需要可信第三方生成全局參數,底層的零知識簡潔非交互式知識證明技術依賴不可證偽(Non-falsifiable)的密碼學假設,方案整體的實現效率相對較低.
基于Pedersen承諾的加密交易[29-31]在不知道具體交易金額的前提下利用ECDH協商相同的隨機數種子,基于此生成總和相同的盲化因子,并利用承諾同態性驗證交易合法性.支持CT與區塊鏈修剪的MimbleWimble方案[31]雖然大大提升了UTXO大小,但修剪后區塊鏈數據本體大小趨于穩定.需要強調的是,上述方案[28-32]都不保護用戶隱私,且需要額外信道傳輸交易金額[29-31,33].Dumb Account方案[32]通過Paillier同態密文實現加密交易,交易收款者可直接解密輸入密文.但其密文安全性基于大整數分解,模n2群在當前算力條件下至少需要4 096 b密文以保證安全性,過長的密文和公鑰長度將導致每一區塊只能容納很少的交易個數.ValueShuffle方案[33]雖然結合加密交易和分布式混幣實現了全匿名,但是非系統性嵌入混幣不抗分析攻擊[27-28].
本文利用BGN06同態加密方案與BGL03單向聚合簽名方案,將全區塊系統性混幣技術與加密交易技術完美結合,構造了全匿名區塊鏈.結合類Pedersen承諾的相等證明,利用四步驗證方案確保交易發起者和驗證礦工無法憑空造幣或惡意毀幣,且礦工只能驗證交易是否合法而無法知悉或者獲取交易金額.本方案相比標準加密交易方案無需利用額外信道向交易接收者告知交易金額,相比Dumb Account方案[32]加密密文存儲開銷較小,相比ValueShuffle[33]避免混幣用戶間的額外通信信道.通過定量分析表明,本方案因功能提升所引入的區塊交易容量開銷是合理的.文獻[44]提出轉換BGN06方案到素數階群上可在保持相同安全性的前提下進一步降低密文長度,后續工作將在此基礎上繼續研究全匿名且支持可擴展的區塊鏈系統.