劉 文,秦 靜,2
區(qū)塊鏈技術由比特幣等數(shù)字貨幣的興起而被大家熟知。區(qū)塊鏈這一概念由中本聰在論文《Bitcoin:A Peer-to-Peer Electronic Cash System》中首次提出[1]。狹義上講,區(qū)塊鏈是一個公開、透明、可追溯、不可篡改的分布式總賬系統(tǒng),是下一代云計算的雛形。廣義的區(qū)塊鏈技術則被認為是大型計算機、個人計算機、互聯(lián)網、移動/社交網絡之后計算范式的第五次顛覆式創(chuàng)新,是人類信用進化史上繼血親信用、貴金屬信用、央行紙幣信用之后的第四個里程碑[2]。
區(qū)塊鏈技術的實質是不同的節(jié)點共同參與的分布式數(shù)據庫,是一個開放式的公共賬簿。具體地,從數(shù)據包形成區(qū)塊,中間有一個加密的哈希值計算,把不同時間段的交易信息鏈接起來,形成區(qū)塊鏈。區(qū)塊鏈是一個公開、透明、可追溯、不可篡改的分布式總賬系統(tǒng)[2]。區(qū)塊鏈技術是一串技術組合。第一,它是分布式賬本,全部機構一本總賬,各種事務一本總賬;第二,它是一個去中心化的新型數(shù)據庫,沒有中心機房,沒有運維人員,第三方按共識算法錄入數(shù)據,非對稱加密算法保證數(shù)據安全,數(shù)據客觀可信,不可篡改;第三,它是智能合約,是一段能夠自動執(zhí)行約定的計算機程序;第四,它是TCP/IP模型(互聯(lián)網模型)中的點對點價值傳輸協(xié)議[3]。區(qū)塊鏈技術是具有普遍適應性的底層技術框架,除了應用于金融、經濟等領域,其潛在的應用領域包括醫(yī)療、選舉、版權、公證汽車租賃以及網絡安全等[4]。
比特幣等數(shù)字加密貨幣是區(qū)塊鏈技術應用最成功的場景之一。截至目前,全球數(shù)字加密貨幣市值將突破2 000億美元,比特幣更是被人們稱為數(shù)字黃金。1比特幣現(xiàn)行價格達到7 000美元,市值占到了數(shù)字加密貨幣總市值的一半以上。數(shù)字加密貨幣相對于傳統(tǒng)貨幣不存在中央銀行的背書,貨幣價值與市場緊密相關,不受貨幣當局的管控,使得數(shù)字加密貨幣具有高度流通性。同時,作為底層技術,區(qū)塊鏈在保證安全性的同時,也兼顧了市場匿名性的需求,使得數(shù)字加密貨幣在跨國資金流動中的占比逐漸上升,給中央銀行帶來了資金監(jiān)管的困擾,沖擊著傳統(tǒng)銀行業(yè)。2017年9月,中國央行開始對數(shù)字加密貨幣實施監(jiān)管。中國國內三大比特幣交易平臺——比特幣中國、火幣網、幣行網于2017年10月底全面停止所有數(shù)字資產兌換人民幣業(yè)務,各交易平臺也逐漸將業(yè)務重心轉移到區(qū)塊鏈技術應用和研發(fā)上,區(qū)塊鏈開始在真正意義上由1.0時代逐步走向更為高級、智能的2.0時代。
近幾年,由于數(shù)字加密貨幣(比特幣、萊特比、以太坊幣等等)的興起,區(qū)塊鏈技術開始逐漸進入大眾視野。下面通過對數(shù)字加密貨幣——比特幣的運行機制來介紹區(qū)塊鏈技術的基本原理。
區(qū)塊鏈技術的理論基礎由來已久。Haber和Stornetta在1991年開始提出安全地對數(shù)字文件進行時間戳記錄。用戶發(fā)送文件時,Haber和Stornetta設計的系統(tǒng)能夠向用戶提供時間戳服務。服務器收到文件后,會用當前時間和指向之前文件的指針作為簽名,來簽名該文件并產生包含簽名信息的認證。如果某份文件中的數(shù)據被篡改,那么指向該文件的指針將自動失效,從而確保了整個文件系統(tǒng)不會被更改。之后他們又提出了一種效率更高的方案,即將文件通過樹狀結構連接形成“塊”,再將各個塊之間鏈接起來形成一條鏈,以大大減少查找特定文件所需的時間[5]。這便是區(qū)塊鏈數(shù)據結構的雛形。
將由哈希指針構建的鏈表的數(shù)據結構稱作區(qū)塊鏈(Blockchain),如圖1所示。哈希指針(Hash Pointer)是一個指向數(shù)據存儲位置和某時間戳下該數(shù)據的哈希值的指針。哈希函數(shù)具有碰撞阻力,被修改過的數(shù)據哈希值與之前的哈希值將不會匹配,所以哈希指針不僅可以指向該數(shù)據的存儲位置,而且可以用于驗證數(shù)據是否被篡改過[6]。
圖1 區(qū)塊鏈
區(qū)塊鏈中數(shù)據的存儲使用了梅克爾樹(Merkle Trees)的數(shù)據結構。梅克爾樹最常見和最簡單的形式是二進制梅克爾樹(Binary Merkle Trees)。在這種梅克爾樹的數(shù)據結構中,所有的數(shù)據區(qū)塊被兩兩分組,而這些數(shù)據區(qū)塊就是樹的節(jié)點。每個數(shù)據區(qū)塊對應的哈希指針被存儲在上一層的父節(jié)點(Parent Node)中,這些指向節(jié)點的哈希指針再次被兩兩分組。重復這個過程直至得到一個單一區(qū)塊,即樹根節(jié)點(Merkle Root)。最終,通過Merkle Tree算法生成梅克爾數(shù)根哈希(Merkle Root Hash),并以此作為交易列表的摘要存到區(qū)塊頭部(Block Header)中。二進制梅克爾樹結構如圖2所示。
圖2 二進制梅克爾樹
如果篡改了樹節(jié)點的數(shù)據區(qū)塊,將會導致父節(jié)點的哈希值與其不匹配。層層向上傳遞,最終改動數(shù)據的行為會傳遞到梅克爾樹的頂端。因此,只要保存根節(jié)點的哈希值,就能檢測任何企圖修改節(jié)點中數(shù)據塊的行為。
比特幣貨幣系統(tǒng)中的二進制梅克爾樹使得數(shù)據區(qū)塊的隸屬證明變得簡單,支持中本聰所描述的“簡化支付驗證”(Simplified Payment Verification)。簡化支付驗證是指,在驗證某筆交易時,一個“輕客戶端”(Light Client)只需要下載區(qū)塊鏈的區(qū)塊頭部數(shù)據即可,而無須下載每一筆交易和每一個區(qū)塊。區(qū)塊頭部數(shù)據大小為80字節(jié),由4字節(jié)的版本號(Version)、32字節(jié)的上一個區(qū)塊的哈希值(Prev Hash)、32字節(jié)的梅克爾樹根哈希(Merkle Root Hash)、4字節(jié)的時間綴(Time Stamp)、4字節(jié)的當前難度值(Bits)和4字節(jié)的隨機數(shù)(Nonce)組成[7]。比特幣貨幣系統(tǒng)中的交易驗證只需包含一個數(shù)據塊和梅克爾樹的根哈希,以及所有沿數(shù)據塊到根節(jié)點路徑的哈希分支。簡化支付驗證的過程如圖3所示。
圖3 簡化支付驗證
為了驗證數(shù)據4,只需要知道數(shù)據4的信息以及該數(shù)據塊到根節(jié)點路徑上所有分支的哈希值,然后與根哈希進行比對,即可知道數(shù)據4是否屬于該梅克爾樹。
區(qū)塊鏈技術成功解決了比特幣等數(shù)字加密貨幣領域長期必需面對的兩個問題:分布式共識(Distributed Consensus)問題和雙重支付(Double Spending)問題[8]。
建立一個去中心化的數(shù)字貨幣系統(tǒng)的關鍵問題,在于達成分布式共識。分布式共識協(xié)議是指在一個有n個節(jié)點的系統(tǒng)中,存在延遲、故障等問題,甚至有的節(jié)點是惡意的,一個分布式共識協(xié)議必須使得當多個主機通過異步通訊方式組成網絡集群時,這個網絡默認是不可靠的,那么在這些不可靠主機之間復制狀態(tài)需要采取一種協(xié)議,以保證每個主機的狀態(tài)最終達成一致性狀態(tài),取得共識。而關于分布式共識是否能夠達成,學界普遍持悲觀態(tài)度。經典案例拜占庭將軍問題(The Byzantine Generals Problem)指出,在缺少信任的中央節(jié)點的情況下,當惡意節(jié)點(叛徒)數(shù)超過1/3時,問題將無解[9]。更有Fischer-Lynch-Paterson不可能結果表明,在一個多進程異步系統(tǒng)中,只要有一個進程不可靠,那么就不存在一個協(xié)議能夠保證在有限時間內使所有的進程達成一致。
雙重支付是指同一個數(shù)字貨幣被兩次或者多次使用,在沒有可信第三方的情況下,若一個數(shù)字加密貨幣系統(tǒng)無法有效抵抗雙重支付攻擊,那么將無法完成貨幣職能。傳統(tǒng)金融體系下,貨幣實體(現(xiàn)金)的流通過程中不存在一幣多花的情況,數(shù)字貨幣由可信第三方(銀行、大型企業(yè))背書,從而有效避免雙重支付攻擊[10]。
在比特幣貨幣系統(tǒng)中引入獎勵機制和工作量證明,巧妙地解決了上述問題。
獎勵機制包含兩部分:區(qū)塊獎勵和交易費。區(qū)塊獎勵:當節(jié)點打包的區(qū)塊被納入長期共識鏈中就會獲得區(qū)塊獎勵,最初4年是50個比特幣,每生成210 000個區(qū)塊金額減半,按照區(qū)塊生成速度,大概每四年減半一次。交易費:交易者發(fā)起交易時,將一部分比特幣作為交易費。
工作量證明(Proof of Work)。比特幣網絡中任何一個節(jié)點如果想生成一個新的區(qū)塊并將其納入長期共識鏈以獲得區(qū)塊獎勵,則必須解出相應的工作量證明的謎題,這一過程被形象地比喻為“挖礦”,參與解謎的節(jié)點被稱作“礦工”[11]。比特幣貨幣系統(tǒng)利用哈希函數(shù)(SHA256)解謎來證明工作量。80字節(jié)長度的區(qū)塊頭部數(shù)據作為哈希函數(shù)解謎的輸入字符串,解謎成功與否的依據是哈希函數(shù)的輸出值小于當前難度值。難度值(Difficulty)是礦工們在挖礦時的重要參考指標,決定了礦工大約需要經過多少次哈希運算才能產生一個合法的區(qū)塊。比特幣的區(qū)塊產生速度約是每10 min生成一個,網絡會根據全網算力的變化自動調整難度值,使得區(qū)塊間隔時間長期均值維持在10 min。
獎勵只有當區(qū)塊被納入長期共識鏈才會實現(xiàn)。因此,網絡中的理性節(jié)點會為了得到區(qū)塊獎勵而遵循既定規(guī)則去延展長期共識鏈。工作量證明有效降低了惡意節(jié)點被選中的概率,除非攻擊者掌握了全網51%的哈希算力(Hash Power),才能對網絡發(fā)起有效攻擊,而這種攻擊成本十分巨大,基本不用考慮。
假設網絡中存在惡意攻擊者想掠奪或者創(chuàng)造不屬于自己的數(shù)字加密貨幣,就必須使得自己產生的區(qū)塊被納入長期區(qū)塊鏈中。但是,網絡中其他誠實的節(jié)點不會接受惡意節(jié)點所創(chuàng)造的區(qū)塊。攻擊者只能以比誠實節(jié)點更快的速度產生區(qū)塊,才能使自己的區(qū)塊保留在長期區(qū)塊鏈中,否則攻擊者的區(qū)塊只能被遺棄,使得自己的算力被浪費。如圖4所示,攻擊者利用自己算力對長期區(qū)塊鏈進行攻擊所出現(xiàn)的兩種情況。
圖4 惡意攻擊
可以看出,當惡意攻擊者掌握一定算力時,就會出現(xiàn)圖中第一種情況。惡意攻擊者產生區(qū)塊的速度大于誠實節(jié)點產生區(qū)塊的速度,區(qū)塊鏈出現(xiàn)分叉。隨著時間的推移,惡意攻擊者所產生的區(qū)塊被納入長期區(qū)塊鏈,而誠實節(jié)點所產生較短的分支則被遺棄。反之,則出現(xiàn)第二種情況,即誠實節(jié)點產生的區(qū)塊被納入長期區(qū)塊鏈,區(qū)塊鏈安全性得到保證。
1.3 節(jié)利用工作量證明形式化,說明了區(qū)塊鏈的安全性。下面將利用Python3.6.1編碼說明其安全性。
圖5分別為q取不同值時z和p的變化情況。
圖5 不同算力下的區(qū)塊攻擊
可以看出,當攻擊者掌握算力較小時,那么攻擊者創(chuàng)造下一個區(qū)塊的概率相應較?。磓值較小),追上誠實節(jié)點所創(chuàng)造的區(qū)塊概率呈指數(shù)級下降。但是可以看出,當攻擊者掌握算力達到50%時,攻擊者可以輕易將自己創(chuàng)造的區(qū)塊納入長期區(qū)塊鏈中,區(qū)塊鏈安全性受到極大挑戰(zhàn)。不過,實際中這種情況很難出現(xiàn)。
實際應用中,區(qū)塊鏈技術大致可分為三種。
公有區(qū)塊鏈(Public Block Chains)。對于節(jié)點的加入和退出沒有任何限制,任何節(jié)點都可以讀取、發(fā)送交易信息,參與區(qū)塊鏈的共識過程,不依賴于特定的組織或中心機構,是完全意義上的“去中心化”。例如,比特幣貨幣系統(tǒng)就是一個完全去中心化的公有區(qū)塊鏈。
私有區(qū)塊鏈(Private Block Chains)。私有區(qū)塊鏈是指寫入權限僅在一個組織手里的區(qū)塊鏈。讀取權限或者對外開放,或者被任意程度地進行了限制,主要應用于公司、政府內部的審計和測試等方面。
聯(lián)盟區(qū)塊鏈(Consortium Block Chains)。聯(lián)盟區(qū)塊鏈是指共識過程受到預選節(jié)點控制,訪問控制權限掌握在幾個組織或個人手中的區(qū)塊鏈。這種區(qū)塊鏈可視為“部分去中心化”,主要應用于行業(yè)內各企業(yè)之間的清算、結算等方面。
以比特幣為例,在比特幣貨幣系統(tǒng)中,雖然個人可以生成多個地址以保證自己的身份不被輕易發(fā)現(xiàn),但是由于每筆交易在區(qū)塊鏈網絡中被永久記錄,所以當攻擊者追溯某個人的歷史交易數(shù)據時,可以根據交易特點建立地址簇,再將每個地址簇與現(xiàn)實中某個特定的人或者機構對應起來。例如:Alice計劃購買一套稀有的紀念郵票,價格是100個比特幣。假設她的比特幣分散在三個不同的比特幣地址中,分別是20、30和40個比特幣。因為沒有一個比特幣地址有100個幣,且總的比特幣數(shù)(90個)也不足100,所以在購買支付時,她可能創(chuàng)建一個新的地址通過交易再得到10個比特幣,然后將三個已有的比特幣地址和新創(chuàng)建的比特幣地址輸入合并,以支付100個比特幣,如圖6所示。
圖6 構建地址簇
攻擊者可以由此推斷,三個已有地址可能是由同一個用戶所控制,且新創(chuàng)建的地址與已有三個地址合并輸出,那么攻擊者就會認為這四個地址屬于同一個人,因此可以建立一個地址簇(Clustering of Addresses)。如果一個新地址的輸出與該地址簇中任意一個已知地址被一起花費,那么新的地址也會被加入到地址簇中。
文獻[12]中,美國研究人員通過大量數(shù)據進行分析,在一組沒有姓名的用戶中,研究者將聯(lián)合支付的地址和全新的零錢地址(Change Address)歸類到一個比特幣的地址簇。但是,這種地址簇沒有標簽(Tag),即簇沒有與真實身份關聯(lián)。研究者為了辨識并標識這些簇在真實世界中的身份,進行了344項各類交易。通過對這些實際交易的地址跟蹤,可以為各個地址簇打上身份標識標簽。所以,在區(qū)塊鏈網絡上關聯(lián)一些小的地址簇,再通過交易圖譜分析(Transaction Graph Analysis),個人身份被暴露的可能性極大。
隨著大數(shù)據時代的到來,人們對數(shù)據的存儲和保護提出了更高要求。區(qū)塊鏈技術的去中心化、不可篡改和可編程等特點,使其在各個數(shù)字化領域有著巨大的應用前景。目前,區(qū)塊鏈技術剛剛興起,在金融領域受到了極大關注,但其他實際場景應用還未能有所突破,區(qū)塊鏈基礎理論研究和相關科研項目還需要得到更多的技術與資金支持。本文對區(qū)塊鏈技術的原理、特點、運行機制做出了詳細闡釋,希望能為未來區(qū)塊鏈技術的研究提供參考。
[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] 張寧,王毅,康重慶等.能源互聯(lián)網中的區(qū)塊鏈技術:研究框架與典型應用初探[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] 袁勇,王飛躍.區(qū)塊鏈技術發(fā)展現(xiàn)狀與展望[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.