李旭東,牛玉坤,魏凌波,張 馳,俞能海
1.中國科學技術大學 中科院電磁空間信息重點實驗室,合肥 230027
2.中國科學院信息工程研究所信息安全國家重點實驗室,北京 100093
比特幣的概念最初由中本聰在發表的題為《比特幣:一種點對點的電子現金系統》中提出[1].比特幣是借助哈希函數、非對稱加密、數字簽名、Merkle 樹、PoW 共識機制等密碼學技術在P2P 網絡上開源實現的具有貨幣發行、交易和賬戶管理功能的密碼貨幣.其隱私概念包括交易匿名和地址不可關聯,交易匿名要求不能將特定的交易與用戶真實身份聯系起來,地址不可關聯要求同一用戶的兩個交易不能被關聯起來.
比特幣通過全網節點共同校驗數據區塊生成、維護區塊鏈,具有一致性、不可篡改性、可追溯性.(1)比特幣需要發送方使用私鑰簽名交易,經節點廣播,全網達成共識之后被記錄到區塊鏈上,保證信息一致性.(2)區塊鏈依靠區塊間的哈希指針和區塊內的Merkle 樹實現鏈上數據的不可篡改;基于難度系數的比特幣PoW 共識機制保證單一節點數據難以通過分叉攻擊篡改歷史交易數據.(3)區塊鏈上存儲著自coinbase 交易以來的所有交易數據,基于這些不可篡改的日志類型數據,可追溯特定地址的歷史交易記錄.
然而,一旦比特幣用戶的身份信息遭到泄露,這些數據永遠保存于整個區塊鏈賬本上,任何人也都可以公開獲取.因此區塊鏈系統應該更加重視隱私問題,提高隱私保護能力.
為了保護用戶隱私,比特幣用戶使用假名(即比特幣公鑰地址)參與交易.公鑰地址是標識和區分一個用戶的唯一方法.為了保障交易安全性,需對每筆交易都進行簽名與驗證,簽名算法使用了橢圓曲線數字簽名算法(ECDSA).每個用戶可以擁有任意數量的比特幣地址,這些地址由其客戶端存儲并透明管理.盡管依賴于假名,比特幣的隱私保護問題依然突出.(1)公開的區塊鏈賬本數據使得攻擊者可以提取有關用戶身份特征的信息(公開的交易金額和輸入輸出地址信息以及它們之間的關聯特征使得攻擊者可以追蹤整個歷史交易路徑).(2)比特幣通訊協議未加密,節點傳播交易信息時可能會泄露源IP 地址與比特幣地址的對應關系.(3)輕量級客戶端向全節點請求過程可能會泄露節點隱私信息,同時存在第三方錢包平臺竊取、泄露地址交易記錄等信息.
目前比特幣去匿名的研究主要集中在兩種方法上:一是對區塊鏈的分析,它從公開的區塊鏈賬本獲得交易信息,基于交易內在地址鏈接關系對其進行聚類分析,并結合線下信息將比特幣地址與個人身份關聯起來;另一種方法是對比特幣協議和網絡的分析,它利用了比特幣交易傳播機制和網絡拓撲結構推斷交易的源IP 地址.針對已有的去匿名攻擊方法,研究人員也提出了一些隱私保護方案,其中混幣技術、離鏈支付協議可以在一定程度上提高匿名性,而混幣技術根據是否需要可信第三方又可以進一步分為中心化混幣和去中心化混幣方案,這些都不需要對現有比特幣協議作出任何修改,然而也都存在缺陷.隱蔽地址、環簽名、零知識證明、同態加密等密碼學方案改進比特幣協議來達到更好的區塊鏈隱私保護效果.
本文的其余部分組織如下:第2 節從區塊鏈、網絡層、錢包和輕量級客戶端角度介紹現有的比特幣隱私保護存在的威脅及對應的保護機制;第3 節研究不需要修改現有比特幣協議的隱私保護機制,如混幣技術、離鏈支付協議;第4 節研究如何通過零知識證明、同態加密等密碼學方案改進比特幣協議達到更好的區塊鏈隱私保護效果;最后,第5 節展望比特幣及區塊鏈隱私保護研究工作.
Pfitzmann 等首先給出了匿名的定義,某一主體的匿名意味著該主體的身份在一組匿名集合主體內是不可識別的[2].比特幣匿名目的是為了防止攻擊者通過P2P 網絡和記錄了全部交易信息的區塊鏈發現比特幣假名地址與真實用戶身份信息之間的鏈接關系.比特幣匿名性需要滿足以下兩個要求:
(1)交易匿名性對于任何交易,無法確認其發送方或接收方所對應的真實身份.
(2)地址不可關聯性給定任意兩個地址,無法判斷其是否由同一個用戶擁有.
然而,比特幣作為公有鏈,交易信息全網公開,比特幣賬本上記錄了從創世區塊開始的所有交易信息(比特幣交易將比特幣從輸入地址轉移到輸出地址,交易金額和輸入輸出地址的鏈接關系都是公開可見的),任何人都可以作為比特幣P2P 網絡中的全節點獲得完整的賬本.這給比特幣去匿名技術帶來了一個思路,追溯比特幣交易發起人真實身份從理論上來說是可行的.
Reid 等分析比特幣交易的特征后提出了交易圖、初始用戶圖、用戶圖的網絡結構概念,并研究它們對用戶匿名帶來的影響[3].這里簡要介紹如何通過區塊鏈分析形成交易圖、初始用戶圖、用戶圖:
(1)交易圖整個區塊鏈可以看作是無環交易圖,其中每個頂點表示一個交易,起始點和終點之間的有向邊表示上一筆交易的輸出對應于下一筆交易的輸入.每個有向邊還包括一個比特幣值和一個時間戳.交易圖表示區塊鏈交易之間的比特幣流動.
如圖1(a)所示,圖中t1,t2,t3,t4都代表交易,其中,t1與t3之間的有向邊表示t1的一個輸出作為t3的一個輸入被花費.
交易圖是區塊鏈分析中最大的圖表,存儲開銷很大,因此在分析之前使用主集方法[4]或按權重過濾交易[5]是可行的方法.
(2)初始用戶圖初始用戶圖中,每個頂點代表一個公鑰地址,頂點之間的每個有向邊代表從一個公鑰地址到另一個公鑰地址的比特幣流動.初始化視每個公鑰地址為一個用戶,并且用戶圖是可以是循環的.
如圖1(b)所示,每個菱形頂點代表一個公鑰地址,菱形頂點之間的每個有向邊代表從一個公鑰地址到另一個公鑰地址的比特幣流動.交易t1和t2的輸出被t3兌換,最終被發送給公鑰pk1的用戶和公鑰pk2的用戶.
(3)用戶圖用戶圖通過利用多輸入交易的特點(同一個多輸入交易簽名通常由同一用戶簽署,因此可以很大程度上將交易輸入的多個公鑰地址聚合到同一用戶)對初始用戶圖進一步處理,聚合可能屬于同一用戶的公鑰地址來創建用戶圖.用戶圖中,每個頂點代表一個用戶,頂點之間的每個有向邊表示從一個用戶到另一個用戶的比特幣的流動.
如圖1(c)所示,每個圓形頂點代表一個用戶,并且圓形頂點之間的每個有向邊表示從一個用戶到另一個用戶的比特幣的流動.公鑰pk1和pk2由于它們對應于單個交易的一對輸入而被收縮成單個頂點用戶u1.
2013年,Meiklejohn 等在Reid 等研究工作[3]之上提出了兩類啟發式聚類分析方法[6],基于兩個思想:(1)同一個交易的輸入地址由同一用戶集群控制,因為比特幣交易通過簽名驗證交易的合法性,只有私鑰的所有者才擁有合法的公鑰地址簽名;(2)一次性找零地址由輸入地址的同一用戶集群控制.
除了交易圖對比特幣區塊鏈的分析,Androulaki 等通過攻擊實驗AddUnl 來定量分析地址不可鏈接性[7].AddUnl 由攻擊者A和知道比特幣實體的地址分配情況的挑戰者C組成,實驗按照如下步驟進行:
(1)攻擊者A從出現在比特幣賬本pubLog 中的地址中選擇一個地址a0,并將其發送給挑戰者C.
(2)挑戰者C隨機選擇一個比特b.如果b=1,則C從pubLog 中隨機選擇屬于同一個用戶的另一個地址a1;否則,C隨機選擇一個不屬于該用戶的地址a1.挑戰者C發送
(3)A對兩個地址
若比特幣交易滿足地址不可鏈接性,則對于所有具有概率多項式時間攻擊能力的攻擊者A相對于AR(隨機猜測結果的攻擊者)獲勝的概率可忽略:

然后通過nA×nA矩陣Elink來表示A的估計,其中矩陣元素Elink[i,j]={pi,j}表示每個地址同一個用戶擁有地址ai和aj的概率.然后引入真實關聯矩陣GTlink,如果ai和aj屬于同一個用戶,GTlink[i,j]=1,否則GTlink[i,j]=0.通過計算Elink與真實關聯矩陣GTlink的統計距離Elink[i,?]?GTlink[i,?]來量化比特幣提供的不可鏈接性UnlinkA=1 ?其中SuccA和SuccAR分別表示攻擊者A和AR通過最大誤差(Elink[i,?]?GTlink[i,?])表示的在攻擊實驗中的成功率.

圖1 交易圖、初始用戶和用戶圖Figure 1 Transaction graph,initial user graph,and user graph
結合來自比特幣系統外的信息會進一步提升攻擊效果.Reid 等[3]還將比特幣系統外部信息與流量和時間分析等技術結合起來,以說明各種類型的信息泄漏如何導致系統用戶的去匿名.2013年,Androulaki等[7]在大學進行模擬實驗,學生使用比特幣作為日常交易貨幣.研究人員通過基于行為的聚類技術分析比特幣交易數據,實驗數據顯示,即使通過不重復使用比特幣地址作為隱私保護手段,依然可以將40% 的用戶真實身份和比特幣地址聯系起來.美國普林斯頓大學最新研究[8]表明,如果用戶使用比特幣與接受數字貨幣的在線商家進行交易,商家可以將比特幣的支付流通信息輕松地與用戶cookies 相關聯,從而基本消除了比特幣交易匿名性質,找到用戶的真實身份.
隨著比特幣技術的不斷發展尤其是各類混合技術的出現,同一個混合交易的輸入地址可以屬于多個用戶,也打破了輸入輸出地址之間的鏈接關系,啟發式聚類分析已不再完全適用.但是結合其他比特幣去匿名技術,該方法仍然可以很大程度聚類用戶身份地址信息.
在本節中,我們從比特幣P2P 網絡隱私現狀開始分析,然后闡述研究人員對比特幣P2P 網絡機制作出的改進.
比特幣采用P2P 網絡架構廣播交易和區塊.P2P 網絡具有可靠性、去中心化和開放性,是比特幣系統穩定運行的保障.但是P2P 網絡的開放性和弱匿名性等特點使得比特幣網絡容易受到Sybil 攻擊[9],其引入的大量惡意節點會傳輸非法交易信息以及威脅路由、資源分配等網絡通信安全.
除此之外,現有的比特幣網絡對用戶隱私泄露存在諸多隱患:(1)比特幣節點通過不經加密和身份驗證的TCP 連接與其他網絡節點進行通信,攻擊者可以直接監聽網絡中傳播的交易信息內容.(2)搜集節點之間的拓撲關系,基于節點拓撲關系攻擊者可以進一步分析交易的傳播路徑,從而找到其源IP 地址節點.(3)比特幣網絡中節點的IP 地址信息可以被用來鏈接到用戶真實身份信息.
因此通過將比特幣地址映射到源節點IP 地址成為比特幣去匿名的又一思路,這種技術不依賴于交易之間的聯系.2011年,Reid 首先指出從P2P 網絡獲得的IP 地址信息可以用來減少比特幣系統的匿名性[3].
受Kaminsky 等[10]的啟發,2014年,Koshy 等分析了將比特幣地址直接映射到IP 數據的可能風險[11].他們使用CoinSeer 收集了超過500 萬筆交易的數據的IP 地址信息.實驗數據未經過地址聚類以便執行純網絡分析,試圖去尋找比特幣地址與源IP 地址的鏈接關系.然而由于P2P 網絡節點之間復雜拓撲關系和規模,攻擊效果并不明顯.
Lischke 和Fabian[12]利用網絡IP 分析來研究對比特幣隱私的影響后得出結論,使用代理或匿名服務(如Tor[13])時,IP 地址可能保持不可追蹤.
然而,Biryukov 等[14]的研究顯示,即使使用了Tor 用戶也有可能被去匿名化.2015年,Biryukov等[15]的研究展示了一個中間人攻擊手段,聲稱Tor 和比特幣結合在一起將會比不使用Tor 面臨更大的去匿名風險.一個擁有少量資源的攻擊者可以完全控制使用Tor 的比特幣用戶之間的信息流動.盡管使用了假名,攻擊者依然可以將用戶的交易鏈接在一起,控制哪些比特幣交易和區塊被中繼到用戶,并且可以延遲廣播或直接丟棄用戶交易和區塊,在用戶連接到比特幣網絡時得到他們的IP 地址信息.
Karame 介紹了一種通過將假名(地址)與底層客戶端的IP 地址相關聯來去匿名化比特幣用戶的方法[16].這種攻擊在文獻[11]中首次引入,后來在文獻[14]中進行了擴展.攻擊分3 步實行.
(1)攻擊者通過DoS 攻擊[17]斷開用戶與Tor 或其他匿名網絡的連接,客戶端可能利用這些工具來改變連接的比特幣節點.這允許攻擊者直接使用網絡接收的信息(例如,找出網絡的拓撲結構).
(2)推斷網絡拓撲結構,在這個階段,攻擊者將不接受傳入連接的比特幣客戶端作為目標,并且僅向網絡的其余部分展示最少的(如8 個)傳出連接.攻擊者的目標是學習從每個目標比特幣客戶端的八個入口節點獲得的信息.
(3)攻擊者使用所獲得的網絡知識,結合比特幣網絡交易的傳播機制,對交易進行去匿名化處理.作為該攻擊的一個實例,Koshy 等在文獻[11]中找到了比特幣網絡中11% 的交易的IP 地址.
2017年,Bojja 等[18]通過研究比特幣網絡節點的廣播機制對P2P 網絡進行了重構,以提供穩定的、可查證的匿名性為首要原則.Bojja 等提出了一個簡單的網絡政策Dandelion 保證在對網絡功能消耗最低的前提下,實現最佳的匿名性.
比特幣錢包是一個存儲并管理比特幣私鑰的容器.與傳統錢包不同,比特幣錢包不存儲比特幣,而是存儲比特幣對應的公私鑰對,用戶使用私鑰去簽名交易,并用公鑰生成地址接收發送方的比特幣[19].在比特幣的使用過程中,比特幣的控制權是通過私鑰、比特幣地址和數字簽名來確立的,比特幣地址可以由公鑰生成,公鑰則由私鑰衍生,數字簽名只能通過私鑰生成.因此掌握了比特幣私鑰,就獲得了對該比特幣的使用權.正是因為私鑰在比特幣系統中有如此高的重要性,需要用一個專門的軟硬件去保護私鑰的安全和有序使用,這也正是比特幣錢包在比特幣系統中扮演的角色.
中心化比特幣錢包不依賴比特幣網絡,只依賴自己的中心化服務器,不同步數據,所有的數據均從自己的中心化服務器中獲得.其在隱私與安全方面也存在諸多隱患,用戶無法保證服務提供商不保存任何轉賬記錄或者泄露客戶真實身份信息.每一個用戶的轉賬記錄和比特幣持有記錄都存儲在第三方數據庫中;即使錢包不要求實名制,也可以把賬戶的虛擬ID 作為識別用戶身份的方式:列在該ID 下的所有數字貨幣出入賬地址、轉賬交易記錄、持有比特幣數量,都有泄漏風險.在這種情況下,雖然錢包平臺不知道用戶真實身份,ID 某種程度上也就對應了真實身份.
由于區塊鏈的數據量太大(當前在200 GB 以上),全節點錢包嚴重限制了普通用戶的使用場景,因此,當前許多比特幣錢包客戶端開始采用SPV(simplified payment verification)模式.SPV 錢包只維護與本地地址相關的區塊鏈數據,通過請求比特幣全節點完成對交易合法性的驗證.
目前比較安全的比特幣存儲方式包括全節點錢包、硬件錢包、分層確定性錢包、多簽名錢包等.全節點(如Bitcoin-core 核心錢包)維護著全部的區塊鏈數據,完全去中心化,同步比特幣網絡所有交易數據;硬件錢包(如Ledger Nano S、Keepkey、Trezor)是指離線存儲私鑰,包含一個脫機部分可以決定是否對交易進行簽名;分層確定性(hierarchical deterministic)錢包的原理是利用隨機數產生一個主私鑰,之后再由主私鑰產生一系列子私鑰,且該過程不可逆,可以很好地實現權限控制管理;多簽名錢包如Copay 需要“m-of-n” 簽名實現多私鑰和用戶控制管理.
2016年,開源比特幣隱私工程(Open Bitcoin Privacy Project,簡稱OBPP)發布了比特幣錢包性能報告第二版,對20 款比特幣錢包進行了測評,根據這些錢包所提供的安全水平進行了評級.OBPP 評選出了5 款安全性或者隱私性最好的比特幣錢包,Ledger、Breadwallet、Airbitz、Darkwallet、ArcBit.報告發現,越來越多的比特幣錢包都采用分層確定性架構,這是專注于保護隱私的比特幣錢包的一個重要特征,它可以幫助客戶避免地址重用.
并非所有的節點都有能力儲存完整的區塊鏈賬本,許多比特幣客戶端被設計成運行在空間和功率受限的設備上,如智能電話、平板電腦、嵌入式系統等,在這些設備上使用的輕量級密碼算法和協議[20,21]也是目前重要的研究方向.對于這樣的設備,通過簡化的支付驗證(SPV)[22]的方式可以使它們在不必存儲完整區塊鏈的情況下進行工作.這種類型的客戶端被稱為SPV 客戶端或輕量級客戶端.隨著比特幣的使用熱潮,SPV 節點逐漸變成比特幣節點(尤其是比特幣錢包)最常采用的形式.
SPV 客戶端不存儲整個區塊鏈,也不驗證系統中的所有交易,只接收其所連接的完整節點為其過濾的交易的子集.目前,SPV 客戶端默認連接到四個不同的隨機選擇節點.SPV 客戶端從一個給定的區塊高度請求整個區塊或只包含來自每個區塊的相關交易的過濾區塊.SPV 客戶端只執行有限數量的驗證,例如在Merkle 樹中驗證區塊難度和交易的存在性證明,并將所有交易和區塊的驗證工作交給比特幣全節點.
由于SPV 節點需要讀取特定交易從而選擇性地驗證交易,這樣就又產生了隱私風險.與全節點收集每一個區塊內的全部交易所不同的是,SPV 節點對特定數據的請求可能無意中透露了錢包里的地址信息.例如,監控網絡的第三方可以跟蹤某個SPV 節點上的錢包所請求的全部交易信息,并且利用這些交易信息把比特幣地址和錢包的用戶關聯起來,從而損害了用戶的隱私.SPV 錢包結合Bloom 過濾器(Bloom filter)[23]解決了客戶端檢索的問題,原理是Bloom filter 可以通過一個采用概率而不是固定模式的過濾機制,從而可以過濾掉大量無關數據,減少客戶端不必要的下載量.

圖2 SPV 客戶端操作示意圖Figure 2 Sketch of operation undergone by SPV client
如圖2 所示,SPV 客戶端向比特幣全節點發送Bloom 過濾器,并接收與本地錢包相關的交易.然而SPV 在隱私和安全方面也存在隱患,因為網絡中的關鍵安全組件外包給系統中的少數節點,如果所有這些節點都是惡意的,那么它們可以有效地控制網絡上的SPV 客戶端的視圖,并且可以阻塞客戶端發送和接收交易.SPV 客戶端對Bloom 過濾器的依賴泄漏了關于比特幣用戶地址的大量信息,當用戶重新啟動SPV 客戶端或者攻擊者訪問屬于同一個SPV 客戶端的多個Bloom 過濾器時,這種信息泄漏進一步惡化.
網絡層同樣也會信息泄露SPV 客戶端的隱私,攻擊者可以嘗試通過識別用于外包Bloom 過濾器的IP 地址來將不同的Bloom 過濾器鏈接到單個錢包.例如,如果相同的IP 地址將兩個不同的Bloom 過濾器外包給常規節點,則該節點可以直接推斷出那些過濾器屬于同一個實體.由于與SPV 客戶端連接的攻擊者可以看到客戶端發出的交易,并且可能會使用該交易來了解客戶的地址,所以這種泄漏更加惡化.
源于網絡層的信息泄露可以得到遏制.例如,當SPV 客戶端發布比特幣交易或者外包他們的Bloom過濾器時,SPV 客戶端可以使用諸如Tor 的匿名網絡隱藏源IP 地址信息;BIP-150 和BIP-151 兩種比特幣改進方案在比特幣P2P 網絡中增加了對P2P 認證和加密的支持,其允許用戶運行連接到受信任的完整節點的SPV 客戶端,使用加密和身份驗證來保護SPV 客戶端的隱私.此外,可以使用身份驗證來創建可信比特幣節點網絡,并防止中間人攻擊.
2014年,Gervais 等[24]研究表明,現有比特幣SPV 客戶端對Bloom 過濾器的依賴泄漏了關于比特幣用戶地址的大量信息.Gervais 使用概率Ph(N)來量化由Bloom filterBi提供的隱私效果,即攻擊者正確地猜測Bi中與過濾器匹配的所有正確率(true positives)中的任何N個,并且攻擊者無先驗知識.這里,N表示插入到Bi中的比特幣地址的數量,S表示集合的基數.攻擊者正確猜測Bi的所有地址的概率由式(2)給出.顯然,Ph(.)值越大,SPV 節點的隱私性越小.

Gervais 等首先分析了攻擊者獲取與SPV 客戶端相關的單個Bloom 過濾器時SPV 客戶端的信息泄露情況,然后分析攻擊者可以獲取兩個不同的Bloom 過濾器B1、B2的情況.在分析由于獲取兩個Bloom過濾器而導致的信息泄漏時,Gervais 等區分兩種情況:(1)B1、B2屬于不同用戶;(2)B1、B2屬于同一個用戶.在B1、B2對應于同一個SPV 客戶端的情況下,出現三個子情況:(1)B1、B2使用相同的種子,過濾器大小相同;(2)B1、B2使用不同的種子;(3)B1、B2使用相同的種子,但過濾器大小不同.
在本節,我們概述并分析增強比特幣隱私的協議,我們首先描述混合服務和混幣技術,然后介紹盲簽名和離鏈支付協議對比特幣在隱私保護上的改善,這些協議都不需要修改現有的比特幣協議.
混幣技術是一種不需要修改比特幣協議的提高比特幣匿名性的有效手段,可以有效抵抗交易圖分析攻擊.混幣服務將不同用戶的比特幣混合后,重新分配到特定的接收地址.這一過程會破壞交易輸入輸出地址之間的鏈接關系.根據混合過程是否需要可信第三方(混合服務器)的參與,又可以進一步分為中心化混合方案[25–28]和去中心化混合方案[29–35],下面分別加以介紹.
3.1.1 中心化混合
中心化混合服務平臺協助比特幣用戶去更好地保持匿名以保護隱私,其引入可信第三方(混合服務器)來完成比特幣用戶的資金收集和分配任務.目前很多平臺(如BitcoinFog、BitLaundry、Blockchain.info等)都提供比特幣混合服務,其混合服務能夠做到匿名性的前提是這些混合平臺處于自身利益考慮(如收取一定的交易費和提高平臺聲譽)不保存任何轉賬記錄,也不要求認證用戶的真實身份信息.當數據外泄或公開時(遭受黑客攻擊或接到監管機構要求),并不會對用戶產生任何影響,因為其中沒有任何轉賬記錄,使用混合服務的用戶的個人身份也無法識別.
除了中心化混合服務平臺,Bonneau 等在文獻[25]中提出MixCoin,一種依賴于第三方的中心化混幣協議.MixCoin 用戶使用標準交易向第三方混合服務方發送一些比特幣,然后從混合服務方接收相應數量的比特幣(扣除相應的交易費),因此它提供了外部匿名性.MixCoin 使用基于聲譽的加密問責技術來防止混合中的用戶比特幣竊取和協議中斷.
然而,第三方混合服務方可能隨時竊取用戶比特幣,或者成為對用戶匿名的威脅,因為第三方混合服務方知道用戶輸入地址和輸出地址之間的關聯.交易費的限制使得Mixcoin 可以抵抗Sybil 攻擊,但是不提供內部不可鏈接性,同時存在用戶資金失竊的風險.
由此可見,中心化混合服務存在諸多問題,例如:
(1)額外的混合費用.隨著比特幣價格的持續上漲,其交易費弊端也日益凸顯.
(2)混合服務平臺知道輸入輸出地址之間的鏈接關系,無法保證內部不可鏈接性,同時也存在服務平臺盜竊用戶比特幣的風險.
(3)存在服務平臺被惡意攻擊者侵入的風險,這會導致比特幣失竊和用戶隱私泄露.
為了在混合過程中實現內部不可鏈接性,Valenta 等提出BlindCoin 協議[26],通過使用盲簽名來創建用戶輸入和盲令牌的加密盲化輸出地址來改進MixCoin 協議.BlindCoin 具體混合步驟如下:
(1)用戶A通過向服務方發送其請求(D,TAC)來選擇混合服務,請求中包括混合參數D以及承諾函數AC加密的盲化令牌T,T由輸出地址kout、隨機數n組成.
(2)服務方向用戶發送{[T]AC,kesc,D}Mpriv,其中包括盲令牌T、托管地址kesc和混合參數D,并用服務方私鑰Mpriv簽名.
(3)服務方簽名盲令牌{[T]AC}Mpriv完成證書.
(4)一旦盲令牌發布到公開日志上,用戶A可以通過承諾函數AC′來恢復簽名的去盲化令牌.用戶A′匿名地去盲化kout,將簽名的令牌發布到公開賬日志上.
然而,為了實現這種內部的無關聯性,BlindCoin 需要兩次額外的交易來發布和贖回盲令牌,而且服務商跑路的威脅依然存在.BlindCoin 解決了內部鏈接性問題,但代價是盲簽名帶來的系統開銷和混合階段額外的時間開銷.于是研究人員提出了各類去中心化混合方案[29–35].
類似BlindCoin,研究人員提出基于RSA 盲簽名的比特幣混幣算法[27],使用混幣代理并設計協議混淆比特幣用戶交易使用地址與實際擁有地址之間的聯系,加大攻擊者從區塊鏈分析攻擊的難度.系統中引入的可信第三方實現了可控匿名.同年提出的基于橢圓曲線盲簽名方案的中心化混幣算法[28],在性能上有了進一步的提升.
針對中心化混合服務存在的諸多問題,研究人員提出了各類去中心化混合方案[29–35].
3.1.2 去中心化混合
去中心化混合實現比特幣匿名的思想是:n個至少有υ比特幣的混合節點將輸入地址I1,···,In混合后輸出地址O1,···,On,使得:
(1)每個輸入節點的輸出地址接收到υ比特幣.
(2)輸入地址和輸出地址是不可鏈接的,即只有輸入節點i知道Ii和Oi.
本質上,這意味著每個輸入節點i發出交易IiOπ(i),其中π是{1,···,n} 上的隨機排列.
2013年,Maxwell 首先提出CoinJoin[29]協議,旨在打破比特幣輸入輸出地址之間的鏈接.每筆CoinJoin 交易是一個標準多簽名(multi-signature)比特幣交易,每個參與者匿名提供自己的輸出地址并檢查其是否被包含在該交易輸出中,如果沒有則拒絕簽名.所有參與者都完成簽名之后,該交易就會作為正常比特幣交易放到區塊鏈上,外部觀察者無法判斷輸入輸出地址之間的對應關系.CoinJoin 提供了很好的外部不可鏈接性,也不存在混合費和資金失竊問題.但是其匿名性取決于混合參與者的數目,容易受到DoS 攻擊和Sybil 攻擊,內部不可鏈接性也無法保證.CoinJoin 在以保護隱私為要旨的加密數字貨幣達式幣(DASH)中得到了應用.
Fair Exchange 協議[30]由Barber 等提出,它是一個雙方比特幣交換協議,雙方使用比特幣腳本和三類比特幣交易(包括保證交易、退款交易和索賠交易)在不需要互相信任的情況下互相交換比特幣.
CoinSwap 協議[31]允許雙方(Alice 和Bob)不通過直接的可追溯的交易進行比特幣轉賬.第三方Carol 從Alice 收到比特幣后,再使用自己的不相關比特幣支付給Bob.通過使用多簽名托管交易,CoinSwap 可在雙方無信任的前提下實現比特幣支付.通過發布在比特幣賬本上的哈希鎖定交易來解決一方不誠實執行協議問題,避免資金損失.CoinSwap 的匿名性取決于同時參加混合的用戶數(金額相同),然而Carol 無利益驅動參與Alice 和Bob 之間的交易,另一方面由于比特幣賬本的多簽名交易可以被識別出來,加上三方之間轉賬金額一致,CoinSwap 匿名性也受到一定程度影響.
XIM 是一個雙方比特幣交換協議[32],不需要第三方參與.XIM 中提到了一種在比特幣區塊鏈中尋找混合節點的方法,其采用Fair Exchange 作為交換協議,通過收取交易費防止Sybil 攻擊和DoS 攻擊.
2014年,Ruffing 等提出的CoinShuffle 協議[33]是一個完全去中心化的比特幣地址混合方案.每個節點i(以預定義的混洗順序表示的節點i)使用節點j>i的加密密鑰來創建它的輸出地址的分層加密.然后,從節點1 開始順序執行混洗:每個節點i依次從節點i?1 接收到i?1 個密文.然后,每個節點從密文中剝離一層加密信息,添加自己的密文再隨機混洗結果集.節點將混合的密文集發送給下一個節點i+1,最后一個節點執行解密產生一個混洗的輸出地址列表并廣播此列表.
CoinShuffle 混洗具體過程:每個節點先選擇一個新的比特幣地址,即新的驗證-簽名密鑰對().接下來節點1 對輸出地址創建分層加密c1并發送到節點2,c1=Enc2(Enc3(···EncN())).C1是只有c1的一元向量.在接收到向量Ci?1后,節點i∈{2,···,N} 對向量中的每個消息進行解密,之后用剩余N?i個節點的公鑰加密輸出地址獲得ci,ci=Enci+1(Enci+2(···EncN())).然后節點i將ci添加到解密消息向量中,并隨機混洗擴展向量,獲得新的向量Ci.
CoinShuffle 去中心化的方式實現了內部不可鏈接性,能夠抵抗DoS 攻擊和防止用戶混合資金失竊,但是匿名性與匿名集合大小有關,匿名程度低,也容易受到交叉攻擊[36]和Sybil 攻擊.
2015年Ziegeldorf 等在CoinShuffle 之上提出了CoinParty 協議[35],基于解密混合網和閾值簽名方案,通過安全多方計算[37]模擬可信第三方在用戶之間實現安全、匿名的比特幣混合.CoinParty 帶來的優點是無需混合費,提高了協議魯棒性和可擴展性,缺點是容易受到DoS 攻擊和需要更多的混合時間.
2017年,Heilman 等提出了一種去中心化、去信任的混幣TumbleBit[34]協議,旨在實現快速實時的匿名線下交易.TumbleBit 通過中間節點Tumber 為交易雙方建立支付通道,但是支付通道信息對Tumber 隱藏,Tumber 也不知道交易雙方的身份.TumbleBit 不需要區塊確認(節約了交易時間),交易資金保密并且同一支付通道下的多個交易也不能被鏈接在一起,同時TumbleBit 無需對比特幣協議作出修改.
我們在表1 給出了各類去中心化混合方案的技術特點及其優缺點對比.

表1 去中心化混合方案對比Table 1 Comparison of decentralized coin-mixing schemes
離鏈支付協議是一類基于限制發布的保護方案,是指不將涉及隱私的歷史交易數據記錄在區塊鏈上,既保護了隱私,又提高了比特幣區塊容量,典型應用包括閃電網絡、支付通道、Bolt 方案等.
2015年,Poon 和Dryja 提出了比特幣閃電網絡概念[38].通過擴展雙向支通道方式[39],創造性地設計出了兩種類型的交易合約:序列到期可撤銷合約RSMC(revocable sequence maturity contract)和哈希時間鎖定合約HTLC(Hashed timelock contract),實現允許任意數量的節點即時交易.閃電交易是一種正常的比特幣交易,只是大部分交易并沒有發布到區塊鏈上.因為大量的交易數據是被存儲在線下,閃電交易顯著降低了比特幣交易成本,使其能夠實現小額快速支付.
用戶之間可以開通一個雙向支付通道,通過中間節點在這個通道中進行交易.只有當交易完成后,通道的最終狀態才會廣播給區塊鏈.廣播公開的交易信息包括他們之間的總交易量,但不會公布他們之間的交易次數,這種模糊性有利于保護隱私.但是中間節點會獲知交易雙方隱私數據,為解決這個問題,目前的閃電網絡包含在一種P2P 網絡上匿名轉播信息的Sphinx 協議[40](類似于Tor)隱藏所有來自中間節點的路由數據.
Green 等提出的Bolt[41]方案通過解除交易在支付通道內的聯系解決在小額支付渠道背景下的隱私保護問題.Bolt 通過使用承諾和盲簽名兩種加密技術,保證同一通道下的多重支付不能被鏈接在一起.但是目前Bolt 只能支持單跳中介網絡,其去中心化問題也有待完善.
本節討論基于密碼學的比特幣隱私保護技術,相比之下,比特幣的密碼學保護機制消除了對可信第三方的需求,但代價是在性能方面有所下降.
隱蔽地址首先由Todd 在文獻[42]中提出,思想是每次發送者要發起一筆交易時,先利用接收者的公鑰信息計算出一次性臨時中間地址,然后將幣發送到這個中間地址,接收方再利用自己的公私鑰信息找到那筆交易,從而進行花費.這樣網絡上其他的用戶包括礦工等就無法確定中間地址到底屬于誰的,但依然可以驗證交易的有效性,而由于這個地址又是一次性的,每次都重新隨機產生,攻擊者也就無法對真實的發送者接收方作任何關聯.
隱蔽地址基于橢圓曲線上的Diffie-Hellman 密鑰交換.當Bob 想要接收比特幣同時保持匿名,Bob首先生成一個ECDSA 密鑰對Q=d·G(G是一個公開的生成器),然后發布公鑰Q作為靜態標識符.Alice 現在生成自己的臨時密鑰對P=e·G并計算共享密鑰c=H(e·G).然后,Alice 使用c導出點Q′=Q+c·G,將Q′轉換為比特幣地址,并向其發送比特幣.在交易中,Alice 還將以前生成的點P包含在OP_RETURN 輸出(比特幣基本交易類型之一)中.對區塊鏈上可能包含P的交易,Bob 計算c=H(d·P)并檢查這是否可以導出有效點Q′=(d+c)·G.然后Bob 可以通過計算匹配的私鑰d′=d+c來花費在Q′上的比特幣.
CryptoNote[43]就使用了隱蔽地址技術來實現接收方匿名.每個CryptoNote 輸出的目的地址(默認情況下)是一個公鑰,從接收方的地址和發送方的隨機數據派生.首先,發送方執行Diffie-Hellman 交換,從接收方數據和接收方的一半地址獲取共享密鑰.然后,接收方使用共享密鑰和地址的第二部分計算一次性目的地址密鑰.接收方還執行Diffie-Hellman 交換以恢復相應的秘密密鑰.以Alice 向Bob 發起一筆支付為例:
1.Alice 首先獲取Bob 的公鑰信息(A,B).
2.Alice 生成一個隨機數r并計算一次性公鑰P=Hs(rA)·G+B.
3.接下來Alice 計算R=rG,然后生成一筆交易將P作為目的地址并將R也放入交易中,也就是說現在交易中包括R和P兩部分信息.
4.Alice 將交易廣播到區塊鏈上.
5.Bob 對所有的交易進行檢查:從交易中獲得R,并通過公鑰對應的私鑰(a,b)計算期望的地址P′=Hs(rA)·G+B,如果P′=P,那么該交易就是發給Bob 的.
6.Bob 找到自己的交易后就可以計算出對應的私鑰x=Hs(aR)+B,然后使用私鑰簽名交易進行花費.
通過變換r的值,即使Alice 發給Bob 很多筆交易,每筆交易的輸出目標地址也是不同的,這樣交易的匿名性就得到了保障(既無法猜到交易的發送方是誰,也無法猜到接收方是誰).由于交易的接收方(即Bob)需要不斷檢查交易是否是給自己的,其需要對每筆交易的每個輸出進行計算,這也消耗不少的計算資源.Bob 可以將其一半的私鑰(a,B)告訴第三方,由其提供服務對交易進行檢查(即計算P′并判斷其是否等于P),而由于B對應的私鑰b沒有公開,所以第三方也無法花費Bob 擁有的資產(即交易輸出).此外,Alice 也可以通過公布r(或者通過r進行簽名并由他人驗證)來證明交易的發送方是其本人.
DarkWallet 和BitShares 也在使用隱蔽地址技術,然而隱蔽地址技術不對發送方匿名,為了解決這個問題,CryptoNote[43]引入了環簽名方案將發送方交易隱藏在匿名集合中.
2001年,Rivest 等[44]在如何匿名揭示秘密的背景下提出了環簽名(ring signatures)技術,環簽名是一種特殊的群簽名,沒有可信中心,也沒有群的建立過程,對于驗證者來說簽名者是完全匿名的.在環簽名方案中,環中一個成員利用他的私鑰和其他成員的公鑰進行簽署交易,而驗證者只知道簽名來自這個環,但不知到誰是真正的簽名者.環簽名解決了對簽名者完全匿名的問題,環簽名允許一個成員代表一組人進行簽名而不泄漏簽名者的信息.基于環簽名的方案為去中心化的賬本體系提供了可行的匿名化思路.
與一般數字簽名方案類似,環簽名方案包含兩個基本的環節:
(1)環簽名(ring-sign):對于消息m,用戶s使用一組公開信息(P1,P2,···,Pr)以及私鑰Ss,生成簽名σ.
(2)環簽名驗證(ring-verify):對于驗證者,當其獲得消息m和簽名σ時,判斷這個簽名是否有效.
CryptoNote[43]協議正是使用環簽名保護用戶隱私,其一次性環簽名的簽名和驗證步驟如下:
(1)密鑰生成(GEN).簽名者首先隨機選擇一個私鑰x,然后計算對應的公鑰P=xG,同時還計算另外一個公鑰I=xHp,這個公鑰I稱之為“密鑰鏡像”(key image),對于每一個簽名來說這個密鑰鏡像是唯一的,所以后面也被用來判斷簽名是否之前出現過.
(2)簽名(SIG).簽名過程是一個非交互零知識證明過程.簽名者取其他(部分)用戶的公鑰Pi形成集合S′={Pi},|{Pi}| =n,和自己的公鑰一起組成集合S=S′∪{Ps}(s∈[0,n]表示交易發送方的公鑰Ps在集合S中的秘密索引).然后簽名者再隨機選擇{qi|i=0,···,n} 和{wi|i=0,···,n,is},計算

接著計算一個非交互式挑戰c=Hs(m,L1,···,Ln,R1,···,Rn),最后簽名者再計算響應:

最終的簽名就是σ=(I,c1,···,cn,r1,···,rn).
(3)簽名驗證(VER).驗證者要驗證簽名的有效性,首先計算

(4)重復檢測(LNK).檢查密鑰鏡像是否已被使用,即雙重支付檢查.驗證者保存已使用過(即曾經已用于簽名的)的密鑰鏡像集合I=Ii,如果簽名σ中的密鑰鏡像在集合中存在,表示該密鑰鏡像已被使用,即說明該交易存在雙重支付的情況.
CryptoNote 實現的可追溯環簽名可以有效防止雙花.在可追溯環簽名算法中,由一個私鑰簽發的兩個簽名是可以被關聯起來的,因此,只要一筆交易雙花,意味著私鑰簽發了兩個不同的簽名,因此可以被檢測出來,從而解決雙花問題.
雖然CryptoNote 加密技術解決了加密貨幣的許多問題,提供了良好的匿名性,但是存在交易規模大和區塊鏈擴展性差的問題.目前在CryptoNote 加密貨幣中實現的環簽名大小上存在限制,因為隨著環的尺寸的增加,交易數據的大小線性增長.該加密技術的主要缺點是,它的交易特別是RingCT[45](環狀機密交易)的交易非常大,占用了幾千字節,這大大增加了存儲區塊鏈所需空間,目前還無法精簡已形成的加密區塊鏈.使用與比特幣完全不同的代碼庫,也意味著很難將其整合到現有的比特幣生態系統中.
除此之外,以太坊平臺[46]也增加了一個類CryptoNote 環簽名,這樣使得以太坊用戶擁有類似于門羅幣(Monero)的匿名能力.一些基于CryptoNote 的密碼貨幣例如Bytecoin 和DarkNetSpace 使用環簽名來隱藏發送方.
零知識證明最先由Goldwasser 等[47]在20 世紀80年代初提出,指的是一方(證明者)能夠在不向另一方(驗證者)提供任何有用的信息(在密碼貨幣和區塊鏈中,這通常是指交易信息數據)的前提下,也能使得另一方能夠相信某個論斷是正確的,一定程度上保護了自身的隱私.零知識證明具有3 條性質:
(1)完備性.如果論述是真實的,誠實的證明者能夠以絕對優勢的概率使誠實的驗證者相信該事實.
(2)可靠性.如果論述是錯誤的,欺騙性的證明者不能,或者只能以可忽略的概率使誠實的驗證者相信它是真實的.
(3)零知識性.證明過程執行完之后,驗證者只獲得了“證明者擁有這個知識” 這條信息,證明過程中不可向驗證者泄漏任何有關被證明知識的內容.
Zerocoin[48]和Zerocash[49]都是通過引入零知識證明而達到匿名目的的加密貨幣.
4.3.1 Zerocoin
Zerocoin 方案[48]把比特幣換成一個Zerocoin 幣,使用承諾隱藏交易細節,再從另一個比特幣地址中換回Zerocoin 幣,割裂輸入地址和輸出地址的關系.Zerocoin 通過創建兩種新的交易類型來擴展比特幣:鑄幣交易(mint)和花費交易(spend).鑄幣交易允許用戶交換一定數量的比特幣以制造新的Zerocoin 幣.每個Zerocoin 幣是使用隨機數r對序列號sn 的幣承諾cm,cm:=COMMr(sn)=gsnhr.
隨后,用戶可以發出包括接收地址、序列號sn 和NP 語句的非交互式零知識證明的spend 交易“我知道秘密cm 和隨機數r使得:
(1)cm 過去被鑄幣(Zerocoin 幣存在于區塊鏈上);
(2)通過承諾隨機數r打開cm(揭露承諾cm 背后的序列號sn).”
Zerocoin 構建相應的零知識證明通過累加器累積所有鑄幣承諾的集合,然后證明該集合中相應的承諾隨機數和集合中元素.在Zerocoin 中,計算累加器的見證(witness)需要訪問目前為止的所有承諾.零知識證明并不將花費交易與任何特定的鑄幣交易(迄今為止所有鑄幣交易之間)相聯系.如果驗證正確,并且序列號以前沒有被花費,則將相應量的比特幣發送到目的地址.同樣地,Zerocoin 也存在許多問題:
(1)功能局限性.Zerocoin 不能用來支付,不能拆分金額.
(2)匿名效果.Zerocoin 不能隱藏交易金額和接收方地址.
(3)性能問題.Zerocoin 的零知識證明,至少占45 KB 空間和450 ms 的驗證時間(128 位密鑰長度),必須全網廣播和存儲,并且由每個節點驗證,將帶來巨大的區塊鏈容量和驗證時間.
4.3.2 Zerocash
針對Zerocoin 方案的諸多缺陷,研究人員提出Zerocash[49]方案加以改進,使用zk-SNARKs(zeroknowledge succinct non-interactive argument of knowledge,零知識的簡潔非交互式知識論證)保證交易之間的不可鏈接性,同時也對交易金額和輸入地址保密,達到了更好的隱私保護效果.
Zerocash 是一個去中心化密碼貨幣協議,與比特幣一樣,用戶通過廣播和驗證支付交易來協作維護電子貨幣.然而,在合并支付交易和驗證方式上Zerocash 與比特幣是不同的.Zerocash 擴展了比特幣協議,添加了新的交易類型,提供了獨立的隱私保護貨幣,交易不會泄露支付賬戶、接收賬戶以及支付金額等信息.Zerocash 創建了一種獨立的匿名幣,此外還有一種基礎幣Basecoin(非匿名).每一個用戶都可以將Basecoins 轉換為Zerocash 幣(匿名),我們將后者稱之為Zerocoins.之后用戶可以將Zerocoins 發送給其它用戶、拆分或合并Zerocoins.
Zerocash 結構如圖3 所示,下面從可變金額、匿名傳輸、驗證效率介紹Zerocash 的改進.
(1)可變金額.為完成支付功能,zerocash 使用地址密鑰對(apk,ask),對應地址公鑰和地址私鑰.要鑄造一個望值υ的幣,用戶首先隨機選擇ρ,即將幣的序列號確定為sn:=PRF((ρ)))的秘密值.那么,用戶分兩個階段對元組(apk,υ,r)作出承諾:
(a)對隨機數r計算k:=COMMr(apkρ);
(b)對隨機數s計算cm:=COMMs(υk).
鑄幣結果是幣承諾c:=(apk,υ,ρ,r,s,cm)和鑄幣交易txmint:=(υ,k,s,cm).由于嵌套的承諾,任何人都可以驗證txmint中的cm 是價值υ的幣承諾(通過檢查COMMs(υk)等于cm),但不能識別所有者(通過地址apk)或序列號sn(派生自ρ),因為它們都隱藏在k中.如前所述,只有在存入正確金額υ的情況下,txmint才被分類帳本接受.

圖3 Zerocash 結構圖Figure 3 Structure of Zerocash
(2)匿名傳輸.Zerocash 修改地址密鑰對的結構,如圖4 所示,其中箭頭指示密鑰推導過程.Zerocash地址密鑰對包括兩個公鑰:與接收地址的幣承諾匹配的接收密鑰apk和用于key-private 非對稱加密方案的傳輸密鑰pkenc.“key-private” 意味著除了相應的私鑰(查看密鑰skenc)的持有者,密文不會泄露關于它們被加密的密鑰的信息.地址密鑰對用于將區塊鏈上的加密幣承諾傳送給目的接收方,接收方可以使用查看密鑰skenc掃描區塊鏈中的幣承諾,然后解密.

圖4 Zerocash 地址密鑰對結構Figure 4 Structure of address key-pair of Zerocash
(3)驗證效率.Zerocash 通過對(增長的)列表CMList 維護一個高效可更新的基于抗碰撞函數CRH的Merkle-tree:Tree,并使rt 表示Tree 的根.插入新的葉節點時,rt 被更新的時間和空間復雜度與樹的深度成比例.因此,運算成本從CMList 的線性級降至對數級,也增加了列表空間(深度為64 的樹可以支持存儲264個幣).
Zerocash 將NP 語句修改為:“我知道r,使得COMMr(sn)作為葉節點出現在基于CRH 的Merkletree 中.” 與初始數據結構相比,該修改指數增加了給定的zk-SNARKs 實現可以支持的CMList 的大小.
同態加密最初在1978年由Rivest 等[50]提出:“是否可以無需密鑰就能夠對密文進行計算”? 同態加密也稱為隱私同態,實現無需解密信息數據即可對加密數據進行運算.這種技術允許在保留對數據和交易隱私的同時還能對其進行運算,只有使用解密秘鑰才能訪問這些數據和交易的詳細信息.區塊鏈上的數據將會被加密,保護了公有區塊鏈的隱私.使用同態加密技術在區塊鏈上加密存儲數據,不會對其公有鏈屬性造成改變.同態加密技術使公有區塊鏈具有私有區塊鏈的隱私效果.
為了保護交易數據的私密性,通常需要將交易數據進行加密,但同時還需要保障交易的合法性和可驗證性.在很多場景下,交易合法性表現為交易的輸入總和等于輸出總和,交易中的每一個金額都大于0,小于一個上界.
2014年,Fran?a[51]改進了微型區塊鏈[52],使之更加私密,更具可擴展性.Fran?a 通過使用同態加密對交易金額和賬戶余額進行加密來實現這一目的,允許用戶對加密值執行加法和減法而不會泄露明文.隨后在2015年,Fran?a 設計了一個新的基于微型區塊鏈[52]和同態承諾的加密貨幣[53]以實現更好的隱私保護,分析表明能有效防御區塊鏈分析攻擊.
機密交易(confidential transactions)最初由Adam 在2013年比特幣論壇中提出,并由比特幣核心開發人員Maxwell 開發[54].機密交易希望通過隱藏交易的金額提高比特幣區塊鏈的隱私,基本思想是加密明文交易腳本,使用Pedersen 承諾[55]作為同態工具來操作密文,保證轉賬交易數量只對參與者可見.但是,機密交易容量相對較大,標準交易需要大概200 字節的空間,機密交易所需空間是普通交易的60倍.即使通過軟分叉部署在比特幣區塊鏈上,也會對現有區塊鏈容量造成極大負擔.機密交易目前部署在了Blockstream 的Element 側鏈上.
2017年,研究人員提出基于加法同態加密技術隱藏區塊鏈上的交易金額和用戶余額[56],解決了傳統區塊鏈交易中暴露了真實的轉賬金額的問題,實現了區塊鏈上的隱私保護功能.但是需要利用到可信任第三方信息機構.同年,Wang 等[57]通過使用同態Paillier 加密系統[58]來實現交易金額的隱藏,以及用承諾證明方案來實現密文交易金額的驗證過程,保證:(1)賬號余額非負;(2)輸入總和與輸出總和相等.分析顯示,該系統不僅提高了匿名性,也能有效抵抗主動攻擊和被動攻擊.
同態加密對于區塊鏈的意義非常重大.目前,從安全的角度講,用戶并不愿意將敏感信息直接放到區塊鏈上進行運算,如果有足夠實用的同態加密技術,用戶就可以放心地使用區塊鏈服務而不用擔心信息泄露.盡管當前的同態加密尤其全同態加密技術需要消耗大量的計算時間,還遠達不到大規模應用的水平,但對于數據規模較小且需求較迫切的業務場景,如智能合約層面的實現依然具有極強的現實意義.
表2 分別從技術特點、匿名性、優缺點等方面,總結了混幣技術、離鏈支付協議、隱蔽地址、環簽名、零知識證明、同態加密幾類最新區塊鏈隱私保護技術.

表2 區塊鏈隱私保護技術對比Table 2 Comparison of Blockchain privacy protection technology
隨著以比特幣為代表的區塊鏈技術的快速發展以及其在金融、物聯網、通信、大數據等各個領域的廣泛應用,其隱私保護與性能問題也越來越突出.現有的匿名技術方案還不夠完善,需要設計更加安全、高效的隱私保護方案.其中最具有代表性的方案是結合區塊鏈和可信計算技術(如Intel SGX)提供信任機制和隱私保護,也已經成為該研究領域的新方向.