劉 文,秦 靜,2
區塊鏈技術由比特幣等數字貨幣的興起而被大家熟知。區塊鏈這一概念由中本聰在論文《Bitcoin:A Peer-to-Peer Electronic Cash System》中首次提出[1]。狹義上講,區塊鏈是一個公開、透明、可追溯、不可篡改的分布式總賬系統,是下一代云計算的雛形。廣義的區塊鏈技術則被認為是大型計算機、個人計算機、互聯網、移動/社交網絡之后計算范式的第五次顛覆式創新,是人類信用進化史上繼血親信用、貴金屬信用、央行紙幣信用之后的第四個里程碑[2]。
區塊鏈技術的實質是不同的節點共同參與的分布式數據庫,是一個開放式的公共賬簿。具體地,從數據包形成區塊,中間有一個加密的哈希值計算,把不同時間段的交易信息鏈接起來,形成區塊鏈。區塊鏈是一個公開、透明、可追溯、不可篡改的分布式總賬系統[2]。區塊鏈技術是一串技術組合。第一,它是分布式賬本,全部機構一本總賬,各種事務一本總賬;第二,它是一個去中心化的新型數據庫,沒有中心機房,沒有運維人員,第三方按共識算法錄入數據,非對稱加密算法保證數據安全,數據客觀可信,不可篡改;第三,它是智能合約,是一段能夠自動執行約定的計算機程序;第四,它是TCP/IP模型(互聯網模型)中的點對點價值傳輸協議[3]。區塊鏈技術是具有普遍適應性的底層技術框架,除了應用于金融、經濟等領域,其潛在的應用領域包括醫療、選舉、版權、公證汽車租賃以及網絡安全等[4]。
比特幣等數字加密貨幣是區塊鏈技術應用最成功的場景之一。截至目前,全球數字加密貨幣市值將突破2 000億美元,比特幣更是被人們稱為數字黃金。1比特幣現行價格達到7 000美元,市值占到了數字加密貨幣總市值的一半以上。數字加密貨幣相對于傳統貨幣不存在中央銀行的背書,貨幣價值與市場緊密相關,不受貨幣當局的管控,使得數字加密貨幣具有高度流通性。同時,作為底層技術,區塊鏈在保證安全性的同時,也兼顧了市場匿名性的需求,使得數字加密貨幣在跨國資金流動中的占比逐漸上升,給中央銀行帶來了資金監管的困擾,沖擊著傳統銀行業。2017年9月,中國央行開始對數字加密貨幣實施監管。中國國內三大比特幣交易平臺——比特幣中國、火幣網、幣行網于2017年10月底全面停止所有數字資產兌換人民幣業務,各交易平臺也逐漸將業務重心轉移到區塊鏈技術應用和研發上,區塊鏈開始在真正意義上由1.0時代逐步走向更為高級、智能的2.0時代。
近幾年,由于數字加密貨幣(比特幣、萊特比、以太坊幣等等)的興起,區塊鏈技術開始逐漸進入大眾視野。下面通過對數字加密貨幣——比特幣的運行機制來介紹區塊鏈技術的基本原理。
區塊鏈技術的理論基礎由來已久。Haber和Stornetta在1991年開始提出安全地對數字文件進行時間戳記錄。用戶發送文件時,Haber和Stornetta設計的系統能夠向用戶提供時間戳服務。服務器收到文件后,會用當前時間和指向之前文件的指針作為簽名,來簽名該文件并產生包含簽名信息的認證。如果某份文件中的數據被篡改,那么指向該文件的指針將自動失效,從而確保了整個文件系統不會被更改。之后他們又提出了一種效率更高的方案,即將文件通過樹狀結構連接形成“塊”,再將各個塊之間鏈接起來形成一條鏈,以大大減少查找特定文件所需的時間[5]。這便是區塊鏈數據結構的雛形。
將由哈希指針構建的鏈表的數據結構稱作區塊鏈(Blockchain),如圖1所示。哈希指針(Hash Pointer)是一個指向數據存儲位置和某時間戳下該數據的哈希值的指針。哈希函數具有碰撞阻力,被修改過的數據哈希值與之前的哈希值將不會匹配,所以哈希指針不僅可以指向該數據的存儲位置,而且可以用于驗證數據是否被篡改過[6]。

圖1 區塊鏈
區塊鏈中數據的存儲使用了梅克爾樹(Merkle Trees)的數據結構。梅克爾樹最常見和最簡單的形式是二進制梅克爾樹(Binary Merkle Trees)。在這種梅克爾樹的數據結構中,所有的數據區塊被兩兩分組,而這些數據區塊就是樹的節點。每個數據區塊對應的哈希指針被存儲在上一層的父節點(Parent Node)中,這些指向節點的哈希指針再次被兩兩分組。重復這個過程直至得到一個單一區塊,即樹根節點(Merkle Root)。最終,通過Merkle Tree算法生成梅克爾數根哈希(Merkle Root Hash),并以此作為交易列表的摘要存到區塊頭部(Block Header)中。二進制梅克爾樹結構如圖2所示。

圖2 二進制梅克爾樹
如果篡改了樹節點的數據區塊,將會導致父節點的哈希值與其不匹配。層層向上傳遞,最終改動數據的行為會傳遞到梅克爾樹的頂端。因此,只要保存根節點的哈希值,就能檢測任何企圖修改節點中數據塊的行為。
比特幣貨幣系統中的二進制梅克爾樹使得數據區塊的隸屬證明變得簡單,支持中本聰所描述的“簡化支付驗證”(Simplified Payment Verification)。簡化支付驗證是指,在驗證某筆交易時,一個“輕客戶端”(Light Client)只需要下載區塊鏈的區塊頭部數據即可,而無須下載每一筆交易和每一個區塊。區塊頭部數據大小為80字節,由4字節的版本號(Version)、32字節的上一個區塊的哈希值(Prev Hash)、32字節的梅克爾樹根哈希(Merkle Root Hash)、4字節的時間綴(Time Stamp)、4字節的當前難度值(Bits)和4字節的隨機數(Nonce)組成[7]。比特幣貨幣系統中的交易驗證只需包含一個數據塊和梅克爾樹的根哈希,以及所有沿數據塊到根節點路徑的哈希分支。簡化支付驗證的過程如圖3所示。

圖3 簡化支付驗證
為了驗證數據4,只需要知道數據4的信息以及該數據塊到根節點路徑上所有分支的哈希值,然后與根哈希進行比對,即可知道數據4是否屬于該梅克爾樹。
區塊鏈技術成功解決了比特幣等數字加密貨幣領域長期必需面對的兩個問題:分布式共識(Distributed Consensus)問題和雙重支付(Double Spending)問題[8]。
建立一個去中心化的數字貨幣系統的關鍵問題,在于達成分布式共識。分布式共識協議是指在一個有n個節點的系統中,存在延遲、故障等問題,甚至有的節點是惡意的,一個分布式共識協議必須使得當多個主機通過異步通訊方式組成網絡集群時,這個網絡默認是不可靠的,那么在這些不可靠主機之間復制狀態需要采取一種協議,以保證每個主機的狀態最終達成一致性狀態,取得共識。而關于分布式共識是否能夠達成,學界普遍持悲觀態度。經典案例拜占庭將軍問題(The Byzantine Generals Problem)指出,在缺少信任的中央節點的情況下,當惡意節點(叛徒)數超過1/3時,問題將無解[9]。更有Fischer-Lynch-Paterson不可能結果表明,在一個多進程異步系統中,只要有一個進程不可靠,那么就不存在一個協議能夠保證在有限時間內使所有的進程達成一致。
雙重支付是指同一個數字貨幣被兩次或者多次使用,在沒有可信第三方的情況下,若一個數字加密貨幣系統無法有效抵抗雙重支付攻擊,那么將無法完成貨幣職能。傳統金融體系下,貨幣實體(現金)的流通過程中不存在一幣多花的情況,數字貨幣由可信第三方(銀行、大型企業)背書,從而有效避免雙重支付攻擊[10]。
在比特幣貨幣系統中引入獎勵機制和工作量證明,巧妙地解決了上述問題。
獎勵機制包含兩部分:區塊獎勵和交易費。區塊獎勵:當節點打包的區塊被納入長期共識鏈中就會獲得區塊獎勵,最初4年是50個比特幣,每生成210 000個區塊金額減半,按照區塊生成速度,大概每四年減半一次。交易費:交易者發起交易時,將一部分比特幣作為交易費。
工作量證明(Proof of Work)。比特幣網絡中任何一個節點如果想生成一個新的區塊并將其納入長期共識鏈以獲得區塊獎勵,則必須解出相應的工作量證明的謎題,這一過程被形象地比喻為“挖礦”,參與解謎的節點被稱作“礦工”[11]。比特幣貨幣系統利用哈希函數(SHA256)解謎來證明工作量。80字節長度的區塊頭部數據作為哈希函數解謎的輸入字符串,解謎成功與否的依據是哈希函數的輸出值小于當前難度值。難度值(Difficulty)是礦工們在挖礦時的重要參考指標,決定了礦工大約需要經過多少次哈希運算才能產生一個合法的區塊。比特幣的區塊產生速度約是每10 min生成一個,網絡會根據全網算力的變化自動調整難度值,使得區塊間隔時間長期均值維持在10 min。
獎勵只有當區塊被納入長期共識鏈才會實現。因此,網絡中的理性節點會為了得到區塊獎勵而遵循既定規則去延展長期共識鏈。工作量證明有效降低了惡意節點被選中的概率,除非攻擊者掌握了全網51%的哈希算力(Hash Power),才能對網絡發起有效攻擊,而這種攻擊成本十分巨大,基本不用考慮。
假設網絡中存在惡意攻擊者想掠奪或者創造不屬于自己的數字加密貨幣,就必須使得自己產生的區塊被納入長期區塊鏈中。但是,網絡中其他誠實的節點不會接受惡意節點所創造的區塊。攻擊者只能以比誠實節點更快的速度產生區塊,才能使自己的區塊保留在長期區塊鏈中,否則攻擊者的區塊只能被遺棄,使得自己的算力被浪費。如圖4所示,攻擊者利用自己算力對長期區塊鏈進行攻擊所出現的兩種情況。

圖4 惡意攻擊
可以看出,當惡意攻擊者掌握一定算力時,就會出現圖中第一種情況。惡意攻擊者產生區塊的速度大于誠實節點產生區塊的速度,區塊鏈出現分叉。隨著時間的推移,惡意攻擊者所產生的區塊被納入長期區塊鏈,而誠實節點所產生較短的分支則被遺棄。反之,則出現第二種情況,即誠實節點產生的區塊被納入長期區塊鏈,區塊鏈安全性得到保證。
1.3 節利用工作量證明形式化,說明了區塊鏈的安全性。下面將利用Python3.6.1編碼說明其安全性。


圖5分別為q取不同值時z和p的變化情況。

圖5 不同算力下的區塊攻擊
可以看出,當攻擊者掌握算力較小時,那么攻擊者創造下一個區塊的概率相應較小(即q值較?。?,追上誠實節點所創造的區塊概率呈指數級下降。但是可以看出,當攻擊者掌握算力達到50%時,攻擊者可以輕易將自己創造的區塊納入長期區塊鏈中,區塊鏈安全性受到極大挑戰。不過,實際中這種情況很難出現。
實際應用中,區塊鏈技術大致可分為三種。
公有區塊鏈(Public Block Chains)。對于節點的加入和退出沒有任何限制,任何節點都可以讀取、發送交易信息,參與區塊鏈的共識過程,不依賴于特定的組織或中心機構,是完全意義上的“去中心化”。例如,比特幣貨幣系統就是一個完全去中心化的公有區塊鏈。
私有區塊鏈(Private Block Chains)。私有區塊鏈是指寫入權限僅在一個組織手里的區塊鏈。讀取權限或者對外開放,或者被任意程度地進行了限制,主要應用于公司、政府內部的審計和測試等方面。
聯盟區塊鏈(Consortium Block Chains)。聯盟區塊鏈是指共識過程受到預選節點控制,訪問控制權限掌握在幾個組織或個人手中的區塊鏈。這種區塊鏈可視為“部分去中心化”,主要應用于行業內各企業之間的清算、結算等方面。
以比特幣為例,在比特幣貨幣系統中,雖然個人可以生成多個地址以保證自己的身份不被輕易發現,但是由于每筆交易在區塊鏈網絡中被永久記錄,所以當攻擊者追溯某個人的歷史交易數據時,可以根據交易特點建立地址簇,再將每個地址簇與現實中某個特定的人或者機構對應起來。例如:Alice計劃購買一套稀有的紀念郵票,價格是100個比特幣。假設她的比特幣分散在三個不同的比特幣地址中,分別是20、30和40個比特幣。因為沒有一個比特幣地址有100個幣,且總的比特幣數(90個)也不足100,所以在購買支付時,她可能創建一個新的地址通過交易再得到10個比特幣,然后將三個已有的比特幣地址和新創建的比特幣地址輸入合并,以支付100個比特幣,如圖6所示。

圖6 構建地址簇
攻擊者可以由此推斷,三個已有地址可能是由同一個用戶所控制,且新創建的地址與已有三個地址合并輸出,那么攻擊者就會認為這四個地址屬于同一個人,因此可以建立一個地址簇(Clustering of Addresses)。如果一個新地址的輸出與該地址簇中任意一個已知地址被一起花費,那么新的地址也會被加入到地址簇中。
文獻[12]中,美國研究人員通過大量數據進行分析,在一組沒有姓名的用戶中,研究者將聯合支付的地址和全新的零錢地址(Change Address)歸類到一個比特幣的地址簇。但是,這種地址簇沒有標簽(Tag),即簇沒有與真實身份關聯。研究者為了辨識并標識這些簇在真實世界中的身份,進行了344項各類交易。通過對這些實際交易的地址跟蹤,可以為各個地址簇打上身份標識標簽。所以,在區塊鏈網絡上關聯一些小的地址簇,再通過交易圖譜分析(Transaction Graph Analysis),個人身份被暴露的可能性極大。
隨著大數據時代的到來,人們對數據的存儲和保護提出了更高要求。區塊鏈技術的去中心化、不可篡改和可編程等特點,使其在各個數字化領域有著巨大的應用前景。目前,區塊鏈技術剛剛興起,在金融領域受到了極大關注,但其他實際場景應用還未能有所突破,區塊鏈基礎理論研究和相關科研項目還需要得到更多的技術與資金支持。本文對區塊鏈技術的原理、特點、運行機制做出了詳細闡釋,希望能為未來區塊鏈技術的研究提供參考。
[1] Nakamoto S.Bitcoin:A Peer-to-peer Electronic Cash System [EB/OL].[2017-10-28].https://bitcoin.org/bitcoin.pdf.
[2] Swan M.Blockchain:Blueprint for a New Economy[M].O’Reilly Media, Inc.,2015.
[3] Bonneau J,Miller A,Clark J,et al.SoK:Research Perspectives and Challenges for Bitcoin and Cryptocurrencies[C].Security and Privacy IEEE,2015:104-121.
[4] 張寧,王毅,康重慶等.能源互聯網中的區塊鏈技術:研究框架與典型應用初探[J].中國電機工程學報,2016,36(15):4011-4022.ZHANG Ning,WANG Yi,KANG Chong-qing,et al.Blockchain Technology in Energy Internet:Research Framework and Typical Application[J].Proceedings of the CSEE,2016,36(15):4011-4022.
[5] Haber S,Stornetta W S.Secure Names for Bit-strings[C].ACM Conference on Computer and Communications Security ACM,1997:28-35.
[6] Wright A,De Filippi P.Decentralized Block Chain Technology and the Riseof Lex Cryptographia[EB/OL].[2017-08-27].https://ssrn.com/abstract=2580664.
[7] Antonopoulos A M.Mastering Bitcoin:Unlocking Digital Crypto-Currencies[M].O’Reilly Media Inc.,2014.
[8] Burton R.Handbook of Financial Cryptography and Security[M].England:Taylor and Francis,2010.
[9] Lamport L,Shostak R,Pease M.The Byzantine Generals Problem[J].ACM Transactions on Programming Languages & Systems,2016,4(03):382-401.
[10] 袁勇,王飛躍.區塊鏈技術發展現狀與展望[J].自動化學報,2016,42(04):481-494.YUAN Yong,WANG Fei-yue.Blockchain:The State of the Art and Future Trends[J].ACTA Automatica Sinica,2016,42(04):481-494.
[11] Gervais A,Karame G O,Glykantzis V,et al.On the Security and Performance of Proof of Work Blockchains[C].ACM Sigsac Conference on Computer and Communications Security ACM,2016:3-16.
[12] Meiklejohn S,Pomarole M,Jordan G,et al.A Fistful of Bitcoins:Characterizing Payments Among Men with No Names[C].Conference on Internet Measurement Conference ACM,2013:127-140.