王皓 宋祥福 柯俊明 徐秋亮
2008年,一位化名“中本聰”的學者在網絡上發表了一篇題為《比特幣:一種點對點的電子現金系統》的文章,這篇看似普通的文章目前看來完全可以說具有劃時代意義——無論是對金融或是對密碼技術,真正的電子貨幣(或稱數字貨幣、密碼貨幣)從此誕生。歷經近10年的發展,各種密碼貨幣紛紛出現,但這篇文章中所創造的數字貨幣——比特幣,一直保持著交易量全球第1 的地位,比特幣全球總市值已突破400 億美元。與此同時,支撐比特幣運行的核心技術——區塊鏈,由于具備去中心化、可驗證、防篡改等特性,迅速成為各國政府、國際組織、大型財團、科研機構關注的熱點,各種區塊鏈項目如雨后春筍般爆發式增長。有觀點認為,區塊鏈技術對未來世界的改變,可能絲毫不亞于云計算、大數據等IT革新技術。
在我國,區塊鏈技術受到政府等相關部門的高度重視。2016年12月,區塊鏈技術首次被列入國務院印發的《“十三五”國家信息化規劃》。與此同時,區塊鏈行業規范也相繼發布。2016年10月,在工業和信息化部信息化和軟件服務業司的指導下,中國區塊鏈技術和產業發展論壇發布了《中國區塊鏈技術和應用發展白皮書(2016)》;2017年5月16日,中國區塊鏈技術和產業發展論壇發布了國內首個區塊鏈標準《區塊鏈參考架構》。這些標準化工作有助于統一對區塊鏈的認識,規范和指導區塊鏈在各行業的應用,促進解決區塊鏈的關鍵技術問題,對于區塊鏈產業生態發展具有積極的推動作用。
為了準確理解區塊鏈,首先對區塊鏈技術最典型、最成功的應用——比特幣——進行剖析。
比特幣作為無中心化的數字貨幣,其工作原理包含數據存儲和共識機制兩個方面。
1)比特幣的數據存儲在比特幣系統中,采用了一種鏈式結構存儲用戶轉賬記錄。與傳統的鏈式數據結構略有不同,比特幣系統中用哈希指針(Hash Pointer)實現數據塊之間的邏輯鏈接,即當前數據塊的頭部記錄著上一數據塊的哈希值。
這種結構在很大程度上加大了篡改數據的難度,因為某一數據塊中數據發生變化,將造成其直接后繼數據塊頭部的哈希值變化,從而引起所有后續數據塊的連鎖反應。此外,由于后續數據塊中隱含了前面數據塊的信息,從而保證了數據塊之間的時序關系。
2)比特幣的共識機制無中心的貨幣系統必定需要共識機制。比特幣系統采用了一種被稱為“挖礦”的方法來保證共識。這里的“挖礦”與現實中的挖金礦具有本質類似性。黃金雖然有自身的自然價值,但作為貨幣時事實上卻可以忽略它的自然價值。它是稀缺的,且通過一定的勞動量才能(概率地)獲得。在比特幣系統中,“礦工”付出工作量“挖出”的是符合某種條件的隨機數,它與黃金一樣是稀缺的、概率產生的。
比特幣系統具體共識過程如下。
(1)礦工根據當前區塊鏈末端的數據塊計算新數據塊的頭部prev_hash。
(2)礦工生成隨機數nonce,并將新數據塊的頭部prev_hash、收集到的若干轉賬記錄 Data、隨機數nonce 作為挑戰哈希函數H()的輸入(在比特幣系統中,H()為連續兩次SHA 256),計算H(prev_hash ||Data||nonce)。若H()的函數值小于某一個預設的閾值,則nonce 合法;否則,重新生成nonce,繼續計算。
(3)礦工找到合法的nonce 后迅速進行P2P 廣播,其他礦工在收到該消息后停止挖礦并進行驗證,驗證通過后,認為新的區塊已產生(達成共識)。
(4)新區塊產生的同時,找到nonce 的礦工從系統得到一定數量的比特幣作為獎勵。
(5)礦工基于新產生的區塊繼續挖礦。
比特幣系統中使用的這種共 識機制稱為工作量證明(proof-of- work,PoW)。挖到礦的礦工獲得一定獎金,可視為其挖到的“黃金”,代表了一定抽象的工作量。此外,在比特幣系統中,工作量證明既是共識機制,也是發行機制。在對礦工獎勵的同時,整個系統中的貨幣也在增加。
比特幣可以看作是一種基于區塊鏈技術的特殊貨幣。在比特幣系統中,每個節點擁有區塊鏈的一個副本,當有交易發生時,節點通過執行共識協議,對區塊鏈進行更新,并在所有節點間進行同步,從而杜絕了“雙花”行為的發生。
區塊鏈作為支撐比特幣運行的核心技術,是一種利用鏈式數據結構來驗證和存儲數據、利用分布式節點共識機制來生成和更新數據的去中心化基礎架構。去中心化、可驗證、防篡改是其基本性質。
鏈式數據結構僅僅是區塊鏈的存儲結構。如何形成這樣的存儲結構、如何保證其可信、如何保證其安全性、如何保證分布式存儲的一致性,都依賴于共識機制。因此,共識機制是區塊鏈的靈魂,區塊鏈的工作原理和應用場景都取決于其共識機制。
區塊鏈系統根據應用場景和設計體系的不同,一般分為公有鏈、聯盟鏈和專有鏈。
1)公有鏈的各個節點可以自由加入和退出網絡,并參加鏈上數據的讀寫;運行時以扁平的拓撲結構互聯互通,網絡中不存在任何中心化的服務端節點。目前,基于區塊鏈的數字貨幣或智能合約平臺均屬于公有鏈的范疇,如比特幣、以太坊等。
2)聯盟鏈的各個節點通常有與之對應的實體機構組織,通過授權后節點才能加入與退出網絡。各機構組織組成利益相關的聯盟,共同維護區塊鏈的健康運轉。目前,企業界更多關注聯盟鏈的搭建和使用。
3)專有鏈的各個節點的寫入權限歸內部控制,讀取權限可視需求有選擇性地對外開放。專有鏈仍然具備區塊鏈多節點運行的通用結構,適用于特定機構的內部數據管理與審計。
當前區塊鏈技術所使用的共 識機制主要分為以下4 類:拜占庭容錯算法(practical byzantine fault tolerance,PBFT),工作量證明(proof-of-work,PoW),權益證 明(proof-of-stake,PoS)和授權 權益證明(delegated proof-of-stake,DPoS)。
1)PBFT
PBFT 機制源于拜占庭將軍問題,即拜占庭帝國軍隊的將軍們需要一致決定是否攻擊某一支敵軍。由于拜占庭協議是基于實體之間的消息傳遞達成共識的,因而容易導致名為“女巫攻擊”的攻擊方法,即一個敵手控制或建立了許多惡意節點,如果敵手擁有足夠多的惡意節點,就可以控制最終結果。一般認為,當網絡中存在f個惡意節點時,整個網絡有不少于2f+1 個誠 實節點,才可以正常達成共識。在比特幣系統中,參與方可以類比為將軍,交易就是達成共識的過程。只有大部分參與方都承認交易的合法性,該交易才是有效的。
利用這類共識機制可以快速生成新的區塊,達成不分叉的快速共識。但這類機制要求在一個封閉的節點集合中兩兩節點進行通信,因此比較適合于節點數量不多的聯盟鏈和私有鏈。聯盟鏈多采用技術成熟的 PBFT 機制及其相應的變種RAFT 和HBFT 等來達成共識,如2016年Linux 基金會發起的開源超級賬本(HyperLedger)、IBM 推出的Fabric 基礎設施項目等。
2)PoW
PoW 機制的核心思想是通過計算能力競爭的方式來保證數據一致性從而達成共識。在比特幣系統中,各節點(即礦工)基于各自的計算機算力的相互競爭來解決一個求解困難但驗證容易的SHA 256 挑戰,最快解決該難題的節點獲得區塊記賬權,即該參與方創建了一個區塊,所有其他參與方更新本地區塊鏈。就女巫攻擊而言,敵手需要控制大部分的計算能力,這比控制大部分節點更難,因此該機制從某種程度上保證了系統的安全性。PoW 機制的缺陷是存在資源浪費和女巫攻擊等安全性問題。
在比特幣之前,B-Money、Karma、RPOW、BitGold 或多或少地應用了PoW 機制。當前,除比特幣外,Litecoin、Dogecoin、MAVE- PAY、FawkesCoin 等貨幣系統使用了改進的PoW 機制。
3)PoS
PoS 機制要求貨幣持有者對某些數量的貨幣展示所有權。這種機制是基于“幣齡”實現的,幣齡 被定義為交易輸入大小和它存在時間的乘積。顯然,長期持有貨幣的人擁有更多的幣齡,從而也就擁有更大的權益,因此也更容易挖礦成功。由此可見,PoS 機制在一定程度上解決了PoW 機制資源浪費的弊端,縮短了達成共識的時間。PoS機制一方面解決了壟斷問題,讓“富者更富”轉化成“窮者更容易富”;另一方面一定程度上緩解了51%攻擊的威脅,如果敵手想要實行51%攻擊,則需要摧毀大量的幣齡,這顯然是不劃算的。PoS 機制的缺陷在于最高權益節點擁有最終決定權。
當前,PPCoin、Nextcoin 等貨幣系統使用PoS 機制。此外,也有不少貨幣系統對PoS 機制進行了改進,其中最重要的一種改進就是DPoS機制。
4)DPoS
DPoS機制主要基于“董事會決策”的思想,即每一個“股東”節點將其持有的股份權益授予某個“代表”節點,擁有股份最多的前101 個“代表”節點組成“董事會”,輪流執行產生新區塊的任務。這些“代表”節點可以獲得相應的獎勵,但是也必須繳納保證金以保證其盡職盡責。一旦出現不稱職的行為,股東們可以行使權力將其廢除,并選取其他節點代行職責。通過此選舉方式,系統中的每個節點均有選擇其信任的授權節點的自主權,且輪流工作模式使得參與驗證和記賬的節點數量大大減少,從而達到快速共識的目的。
當前主要有Bitshares基于DPoS機制。
除以上4 種經典的共識機制外,還存在一些變種機制。
1)股權速率證明(PoSV)。該機制解決了PoS 機制中通過收藏貨幣來累加幣齡的行為。PoSV 機制的原理為:如果貨幣進行了交易導致貨幣的幣齡清零,則交易的貨幣的幣齡上升速率將會高于不交易的貨幣的幣齡上升速率,這在一定程度上鼓勵了線上交易,減少了線下囤積的不利現象。
當前主要有 Reddcoin 運用PoSV 機制對貨幣升值速率進行 調整。
2)活躍度證明(PoA)。該機制對線上的活躍節點進行獎勵。目前大部分的電子貨幣在“發行”之后就轉為線下,從而減少了線上交易。PoA 機制中的礦工挖礦過程類似于PoW 機制,當礦工找到新的區塊時,會隨機選擇線上的N個活躍節點發送新發現的區塊。前N-1 個活躍節點驗證新發現的區塊并簽名,第N個活躍節點除了驗證區塊和簽名外,還要對區塊進行包裝,并廣播該區塊。礦工和N個活躍節點都將因此收到獎勵費用。如果N個活躍節點中有一個不活躍節點,那么它將不能對區塊進行簽名,從而不能收到相應的獎勵費用。因此,PoA機制可以有效地解決囤積貨幣的行為,在點對點的網絡中有著很重要的應用。
PoA 機制的應用場景有Bit- Torrent。
3)摧毀證明(PoB)。該機制解決了如何創建新貨幣的問題。與比特幣由創世塊(Genesis Block)聲明該貨幣的產生不同,PoB 機制是通過一種可驗證的方式來摧毀一種貨幣,建立和分配另一種貨幣。這種方式雖然很殘酷,但卻利用了PoW的思想,采用昂貴的資源防止了女巫攻擊。隨著貨幣的發展,舊的貨幣系統必然要升級到新的貨幣系統。升級的方式有兩種:軟分叉和硬分叉。軟分叉是指新的貨幣系統在舊的貨幣系統中依然適用。硬分叉是指新的貨幣系統在舊的貨幣系統中不再適用,所有的客戶端都需要升級;否則,兩條不同的區塊鏈將會出現。對于PoB 機制而言,升級問題將輕而易舉地得到解決,它可以通過摧毀貨幣對貨幣進行升級。
PoB 機制的應用場景有Counter- party、Mastercoin 和Permacoin 等。
4)中心化指定權限。在商業領域中,比特幣的去中心化一直被作為“賣點”來宣傳,但是如果我們可以相信一小部分擁有指定權限的人群,那么所有的共識問題都將變得簡單,并且可以不用再考慮穩定性和計算能力浪費的問題。需要 注意的是,擁有指定權限的人群需要執行誠實的行為,不誠實的行為不會為他們帶來任何收益。擁有指定權限的人群需要利用網絡進行選舉或者由礦工指定,具體的安全性有待討論。MICALI 在2016年提出了名為ALGORAND 的公共賬本,其共識機制使用密碼抽簽(cryptographic sortition)的方式來決定出一部分人參與創建和驗證區塊。其中創建者稱為leader,由系統隨機選擇。leader 創建一個新區塊,隨機選擇一個verifier 集合,用以驗證區塊。
作為區塊鏈技術最典型和最成功的應用,比特幣在設計之初,創始人“中本聰”期望通過使用無限量的可以自由生成的交易地址來實現用戶的匿名和交易的不可追蹤,從而實現較強的隱私保護。然而,近幾年的研究發現,由于區塊鏈數據的公開性,因此通過分析大量的交易和網絡數據,可以設計各類去匿名方案。區塊鏈上的匿名與隱私保護面臨巨大挑戰。
我們以比特幣為例,首先闡述目前基于區塊鏈的數字貨幣中匿名和隱私保護面臨的挑戰;然后針對這些挑戰,介紹目前的解決方案和研究進展情況;最后闡述新形勢下的匿名和隱私保護問題。
1)推斷交易地址歸屬在比特 幣交易中,如果兩筆交易的接收方地址一致,那么可以肯定這兩筆交易的接收方是同一人。為了防止這樣的信息泄露,接收方可以每次使用一個全新的地址來接收比特幣。然而,發送方的比特幣金額很大程度上是分散在不同的交易輸出中。因此,當單個交易輸出金額不足以支付時,發送方不得不把多個交 易輸出金額合并作為輸入金額。對于這種多輸入交易,人們可以以 高概率推斷出多個輸入屬于同一人所有。
可以將整個交易歷史看作一個巨大的有向圖,圖中節點代表不同的交易地址,有向邊的始點為交易的發送方,終點為交易的接收方。由于比特幣中交易數據的公開性,任何人都可以查看歷史上的所有交易,針對交易圖進行分析,獲得交易地址間的關聯信息,從而嚴重威脅用戶隱私。
2)交易金額可見
在比特幣交易中,交易金額是公開的,這是因為在礦工驗證交易是否合法的過程中,需要根據交易金額進行交易合法性判定。然而,交易雙方并不希望讓其他人知道交易的具體金額。因此,如何在隱藏交易金額的同時,保證礦工能夠對交易合法性進行判定,成為了客觀需求。
在保證交易金額的隱私性方面,比特幣核心開發者Greg Maxwell首先正式提出了“機密交易”( confidential transactions) 的 概 念,能夠完全隱藏交易金額。該方案基于彼德森承諾和范圍證明。在交易中發送方將盲化的交易數據(機密資金)發送給接收方,接收方可以驗證交易金額。同樣,接收方可以將接收到的機密資金用于一筆新的機密交易中。彼得森承諾可以隱藏交易中資金的具體數額,同時發送方需要向礦工提供零知識證明,證明交易輸出的合法性。零知識證明可以保證礦工在不知道交易具體金額的前提下,對交易的合法性進行驗證。
最初,Grey Maxwell 提出了混幣方案CoinJoin。該方案的具體思想如下:每個混幣交易對應一個標準的多輸入多輸出比特幣交易,其中每個輸入金額相等。交易的輸出對應參與者的接收地址,每個接收地址都可能接收任意一個交易輸入。如果參與者發現自己的接收地址被包含進了該交易中,就選擇對該交易進行簽名。一旦所有參與者完成簽名并寫入比特幣區塊鏈中,混幣完成。在外人看來,該方案不能通過交易的輸入輸出來斷定輸入輸出的關聯性,因而提供了外部不可關聯性。但是對于參與者來說,該方案并沒有提供不可關聯性。
隨后,為了避免單個mix 節點偷竊和記錄輸入輸出對應關系,BONNEAU 等人設計了混幣(Mix- coin)協議,提出了“混幣鏈”的概念。具體說來就是將多個mix 節點串聯起來,使得前一個mix 節點的輸出作為后一個mix 節點的輸入。只要有一個mix 節點誠實,混幣隱私就能得到保障。同時,該方案通過交易費激勵機制,保障理性的mix節點誠實執行混幣協議。
目前,數字貨幣達世幣(Dash- Coin)就是基于CoinJoin 和Mixcoin的思想。達世幣中混幣過程需要由主節點來完成。為了防止主節點作弊或被攻擊,達世幣引入鏈式混合和盲化的思想。鏈式混合指用戶交易時隨機選擇多個主節點進行混合,最后輸出結果。盲化技術是指用戶不需要將輸入和輸出發送到交易池,而是指定主節點將輸入和輸出傳遞到另一個主節點。這樣,每一個主節點只看到所有執行過程中屬于自己的部分,從而很難發現用戶身份。
Ruffing 等人通過改進可追蹤匿名群組通信協議Dissent,設計出和比特幣完全兼容的去中心化混幣方案CoinShuffle。該方案不依賴中心化節點,計算、通信開銷小且無需手續費。
為了避免交易可鏈接,早期的解決方案多基于比特幣原有結構,隨后的一些增強方案提供了更為豐富的功能和特性,但這些方案要求對比特幣系統進行升級,至少需要比特幣系統進行軟分叉。此后,很多人將目光投向設計匿名性和隱私程度更高的數字貨幣,通過將密碼學工具,如承諾、環簽名和零知識證明等引入數字貨幣,構造能夠直接實現匿名和隱私保護的數字貨幣方案。目前來看,該類方案逐漸成為研究熱點,比較典型的有Crypto- Note、Zerocoin 和Zerocash。
CryptoNote 引入Stealth Add- resses 來實現接收方的外部不可見性。具體說來就是發送方通過接收方的公開信息生成一個隨機地址,該地址允許接收方通過自己的秘密信息恢復相應的私鑰。然而,發送方仍然可以獲知接收方對貨幣的使用情況。為了解決這個問題,Crypto- Note 引入環簽名所提供的匿名集合來實現隱私保護。CryptoNote 協議通過一次環簽名的方式,允許交易發送方將交易隱藏進一個容量為k的匿名集合中。同時,一次環簽名能夠提供一種鏈接機制,使得任何雙花都能被檢測。目前市值位列第5的門羅幣采用的就是CryptoNote 協議。除此之外,門羅幣還提供了環狀機密交易RingCT 來隱藏交易金額和交易地址。
所有基于匿名集合的混幣方案,無論是兼容比特幣的方案,還是基于環簽名的方案,本質上都是將真實的交易行為隱藏在匿名集 合中。實際操作中,用戶對匿名集合選取不當也會帶來匿名和隱私保護問題。MILER 等人針對Monero 交易的分析表明,80%的Monore 交易是可鏈接的。
為了提供更高的匿名性,MIERS 等人提出了Zerocoin 方案,該方案能夠提供內置的不可鏈接性。該方案的匿名集合是系統中現存的所有Zerocoin,允許用戶將一個比特幣通過“鑄幣”手段轉化成一個Zerocoin。當需要花費Zerocoin時,用戶使用零知識證明的方法向礦工證明自己的Zerocoin 存在于系統中且未花費過。
然而,Zerocoin 不能在原有的比特幣系統中實現,需要比特幣系統進行軟分叉;Zerocoin 的幣值金額 是固定的,不能實現金額的任意切分;Zerocoin 不支持非交互交易且零知識證明過程過長。為了改善這種狀況,SASSON 等人提出了Zerocash方案。
Zerocash 方案將密碼學中非交互零知識證明技術zk-SNARK 引入到數字貨幣中。Zerocash 方案保障 了交易的不可鏈接和金額保密,且支持金額的任意切分。Zerocash 方 案和比特幣系統完全獨立,支持Zerocash 貨幣的直接交易,實現了當前最高程度的隱私保護和匿名性。然而,Zerocash 方案基于的零知識密碼方案需要初始化秘密數據,任何知道該秘密數據的一方都可以憑空產生貨幣?;赯erocash 方案的新興數字密碼貨幣Zcash 的秘密參數雖然是不同地點的6 個人共同協作生成,但是到目前為止,這種生成方式仍然備受懷疑。
3.3.1 離鏈支付協議中的隱私保護問題為了解決公有鏈的可拓展性問題,很多研究著重于構造離鏈支付協議,如雙向微支付通道、閃電網絡和Spirtes。這些方案中,雙方交易達成需要借助中繼節點的參與。然而,目前離鏈支付方案中,交易雙方實體和交易金額是對中繼公開的,中繼知道了很多交易雙方不想公開的內容。
針對離鏈支付協議的隱私保護問題,目前已經有一些研究在進行,如HEILMAN 等人提出的TumbleBit方案。該方案能夠將支付通道信息對中繼隱藏。此外,TumbleBit 方案和比特幣系統完全兼容。
GREEN 等人 提 出Bolt 方案。Bolt 方案保障同一通道下的多重支付不能被鏈接在一起,即使密謀的個體之間也不能做到。且支付發生在毫秒級,不需要區塊確認,接收方僅需要知道有人在他所提供的 支付通道中進行了付款操作。支付也可以被安排由第三方實現,避免了交易雙方開關支付渠道的復雜性。Bolt 方案使得第三方不能從中作惡(即使第三方串通在一起也 不能實現),同時交易的資金也是保密的。
對于支付協議的安全性,目前還存在許多亟待解決的問題。例如,在爭端出現時,如何在不泄露爭議雙方最終金額信息的情況下進行調停;如何設計高效的隱私保護支付路由。目前關于保密支付協議的研究還在火熱進展中。
3.3.2 現存區塊鏈實現方案匿名和隱私保護的評估很多密碼協議在實現后,由于具體的實現細節,往往存在理論和實際不匹配的情況。例如,CryptoNote 協議通常假設將真實的交易隱藏到一個很大的匿名集合中,在基于該協議實現的Monore 數字貨幣中,用戶在選取 匿名集合時,匿名集合往往很小,或者Monore 交易通過非匿名方式執行。這些用戶行為給去隱私和匿 名分析帶來可能。另外,以太坊The DAO 被攻擊事件之后,如何對智能合約代碼進行自動審查和形式化驗證也提上日程。因此,對現存區塊鏈方案的安全性、隱私保護和匿名性的測量、分析和評估也是目前研究的熱點。
3.3.3 其他公開問題如何用安全多方計算生成Zcash 的初始秘密參數,如何設計基于區塊鏈的匿名方案,如匿名證書、匿名消息系統,都是下一步區塊鏈匿名、隱私保護的研究熱點。此外,目前公有鏈上隱私保護的研究已經全面展開,聯盟鏈上的隱私保護仍有大量問題值得研究。例如,在聯盟鏈中,業務信息是否可以加密,加密后如何保證運算、如何保證檢索、如何進行權限控制等。
區塊鏈作為支撐比特幣運行的核心技術,由于其去中心化、可驗證、防篡改等特性,已迅速成為各界關注的熱點,相關研究呈現蓬勃發展之勢。然而,基于區塊鏈的數字貨幣在共識效率及隱私保護等方面仍然存在較多問題。本文探討了數字貨幣中區塊鏈的工作原理,介紹了區塊鏈技術所使用的各類主流共識機制及其變形,并對基于區塊鏈的數字貨幣中匿名和隱私保護問題進行了深入分析?!?/p>