作者:王翔
前言
說起當今最具代表性的數據通信技術,區塊鏈無疑在列。作為當下最受關注的次世代分布式系統,區塊鏈可謂眾說紛紜,莫衷一是。有人視之為引爆下一次互聯網技術革命的突破口,也有人稱其為投機工具,驚世騙局。本文旨在于盡可能懸置那些游離于技術層面之外的價值判斷,將視角重新移回到區塊鏈技術本身,完整回溯區塊鏈1.0到3.0的技術原理和設計理念之沿革,為讀者揭開籠罩在區塊鏈之上那層神秘的面紗。
第一章區塊鏈網絡與數字貨幣系統
一、區塊鏈的技術背景
1.區塊鏈的起源
2008年,美國次貸危機爆發,金融海嘯席卷全球,經濟蕭條延宕數年之久。對2008危機的溯源性研究指向了多個可能的誘發性因素。除了次級貸款市場的過度放貸和杠桿率居高不下,主權貨幣的濫發也成為了金融危機的一個重要誘因。
同年11月1日,某化名為“中本聰(SatoshiNakamoto)”的網絡極客發表了一篇名為《比特幣:一種點對點的電子現金系統》的技術論文,也即后來人們所稱的《白皮書》。《白皮書》在基于主權信用背書的貨幣系統基礎上進一步提出了一種能夠規避主權貨幣濫發,而且完美解決了貨幣信用問題的電子支付系統——比特幣。該書完整闡述了筑基于點對點傳輸技術,密碼學算法,區塊鏈技術之上的比特幣分布式網絡的架構理念。
2009年,序號為0的區塊——創世區塊誕生。時隔不久,序號為1的第二個區塊誕生,并與創世區塊相連,世界首條區塊鏈面世。
需要澄清的一點是,與其說區塊鏈是一種技術工具,毋寧謂其為一種理念。無論是構成區塊鏈技術核心的共識算法,容錯算法,加密技術,傳輸技術,存儲技術,其都是構筑于完備的數學和密碼學基礎,而非工程學技術。正是因此,區塊鏈技術并不強依賴于物理基礎設施,在最極端的情況下,理論上我們甚至可以只借助于二戰時期的無線電技術來搭建一個簡易的區塊鏈網絡。就廣義范疇而言,比特幣只是區塊鏈技術的一種具體實現形式,只要具備去中心化,全網共識,防篡改,可回溯這幾個核心要素,都可視為區塊鏈技術理念的橫向延伸。
一言以蔽之,區塊鏈的本質是一種基于密碼學算法的“電子契約”。
2.區塊鏈的技術優勢
十數年間區塊鏈技術歷經了數次迭代發展。從以比特幣為代表的區塊鏈1.0到以以太坊為代表的區塊鏈2.0再到以Hyperledger,EOS為代表的區塊鏈3.0,區塊鏈技術所能承載的業務場景和應用范圍愈加廣泛。其功能已不僅僅局限于電子貨幣系統,而是進一步推廣到了企業,機構間數據共享,高敏感性數據存儲等諸多場景。
目前區塊鏈的技術優勢在于:
去中心化(或多中心化),每個節點都保存了完整的區塊鏈信息,解決了敏感數據的備份問題和傳統分布式系統的信息不對稱問題。去信任化,通過密碼學基礎和區塊鏈網絡解決了中心化系統的信任機制問題,由整個區塊鏈網絡而非某個中心服務器提供信用擔保。不可篡改,所有持久化的區塊永久保存,交易記錄可隨時回溯,一筆交易只能通過另一筆交易進行追償,無法單方面取消。規避了傳統數據庫的數據丟失和惡意篡改風險,更加適用于高敏感性數據(如金融數據,企業核心業務數據等)。二、比特幣的基礎數據結構與交易集驗證機制
1.區塊與區塊鏈
作為一種數據存儲系統,區塊鏈的本質仍然是一個數據庫,只不過是由整個網絡共同維護的分布式數據庫。不同于傳統的結構化關系型數據庫,區塊鏈為了實現時間維度的永久可回溯性,在底層數據結構中并不存儲數據的狀態,而只存儲對數據的變更。
動態 | 福布斯公布全球區塊鏈50強,螞蟻金服、富士康入選:據福布斯中國消息,為記錄首個所謂“企業“區塊鏈興起的過程,《福布斯》編制了首份區塊鏈50強榜單(Blockchain 50),包括安聯保險、亞馬遜、百威英博、螞蟻金服、BBVA、BITFURY等公司。據悉,登上本刊新榜單的50家大型企業正在將分布式賬簿技術用于滿足運營需在這個領域發揮引領作用。上榜企業最低收入限額或估值達到10億美元,在美國有業務。[2019/4/16]
以比特幣為例,作為一般等價物的貨幣本身只是一個價值符號,其意義在于對交易的額度標記。因此比特幣網絡就是一個大型的電子記賬系統。而區塊鏈中存儲的便是網絡中用戶之間的交易記錄。
圖一:區塊鏈結構一個區塊主要由區塊頭和區塊體兩部分構成,大小約為1M左右。區塊頭主要用于存儲版本號(用于標識當前的軟件協議版本),父區塊哈希編碼,默克爾根,時間戳,難度目標,Nonce隨機數等數據。其中父區塊哈希編碼用于和上一個區塊產生唯一性鏈接。默克爾根用于為比特幣用戶提供簡單支付驗證(SPV),這一部分內容將在后文中詳細介紹。
而區塊體中則包含了一組具體的交易記錄集合,交易分為兩種類型,Coinbase交易和普通交易,每個區塊中第一筆交易屬于Coinbase交易,是區塊鏈網絡給予記賬者的獎勵。而其它則是用戶之間進行轉賬的普通交易。每個區塊中大概包含了4000條左右的交易記錄。獲得記賬權限的節點會將區塊頭和區塊體打包成一個完整的塊并廣播給整個區塊鏈網絡,其它節點驗證通過后便會將其作為一個新區塊加入區塊鏈。
2.默克爾樹(MerkleTree)與交易集合
在區塊鏈結構中默克爾樹扮演了極為重要的角色。其一方面用于產生每個區塊的唯一數字摘要,另一方面也可以用于在部分節點存儲空間有限的情況下進行簡單支付驗證(SPV)操作。
圖二:默克爾樹
所謂默克爾樹,是一種典型的二叉樹數據結構。在每個區塊的區塊體中都保存了若干條交易記錄,這些交易記錄被均勻掛載在一個默克爾樹結構中。樹的每個葉子節點都保存了對應掛載的交易記錄哈希值。而每個葉子節點又會兩兩配對合并為一個新的字符串,進而用新字符串的哈希值構成上一級節點,一直迭代到最終產生一個唯一的根節點HROOT(在交易記錄為奇數條的情況下可能會存在余根的情況,因此會將奇數條記錄全部拷貝一份,構成平衡樹)。這樣在根哈希HROOT中就包含了每一條交易的數字摘要,任何一條記錄的增刪和變更都會由末端傳導至根哈希上。
因為默克爾樹下掛載的每一筆非相鄰交易記錄之間都是通過不同的上溯分支連接到根節點,因此默克爾樹相比哈希列表可以單獨對某個分區內的信息正確性和完整性進行驗證而無需重構所有葉子節點下的數據。這一數據結構被廣泛應用于分布式網絡中的數據校驗服務。
圖三:異質分區定位算法
除了通過上溯分支驗證數據正確性外,默克爾樹還可以用于快速定位兩個樹結構下異質分區的位置。如上圖所示。當HROOT-A≠HROOT-B時,只需向其下級節點回溯找到“gsc3”和“gts1”兩個異質節點,之后重復這一過程直至追溯到葉子節點,即可定位到兩個樹結構中的異質分區。
現場 | 達鴻飛:2019年不會迎來區塊鏈技術的重大突破:金色財經現場報道,1月8日,“創新再出發|海南GFIS全球金融科技創新峰會”在海口召開。分布科技創始人兼CEO達鴻飛表示,創新一般分為三個方面,第一是基礎理念的創新,第二是工程技術的創新,二者結合才會迎來商業模式的創新。中國在技術和商業創新擁有非常好的環境,不管是短期還是中期來看,依然有非常好的機會。但他也提到,2019年不會迎來區塊鏈技術的重大突破,因為這些底層公路都非常不完善,商業應用跑不起來。他認為,至少要三年后,區塊鏈技術才能迎來春天。[2019/1/8]
3.簡單支付驗證(SimplifiedPaymentVerification)
在比特幣網絡中,每一筆交易都要驗證,不僅涉及對帳戶余額的驗證,還需要對交易的執行結果進行驗證。這一過程有時可能需要回溯整個區塊鏈重構賬戶狀態,所需要的算力往往超出一般節點的算力載荷,因此通常情況下是由一些挖礦節點來進行交易驗證。
此外還存在另一種場景,那就是支付驗證。也就是驗證某一筆交易信息是否已經被區塊鏈網絡所確認。對此,中本聰提出了一種更為經濟的驗證方式,那就是簡單支付驗證(SPV)。SPV是一種基于默克爾樹結構的數據存在性校驗算法。因為支付驗證只需要校驗某筆交易是否在區塊鏈中存在,因此并不需要保存整個區塊鏈的信息。
圖四:SPV算法如圖所示,在區塊體中,每筆交易都掛載在默克爾樹的一個葉子節點上。如果我要驗證交易6是否在某個區塊中存在,那么我只需要得到H5,H78,H1234三個節點的信息,然后循著上溯分支計算出默克爾根,驗證其與HROOT是否相同即可。因此用戶只需要保存每個區塊的區塊頭信息即可完成對某筆交易的支付驗證(其本質為驗證某筆交易所在的區塊是否為共識區塊)。
三、拜占庭將軍問題(ByzantineFailures)與拜占庭容錯算法(ByzantineFaultTolerance)
1.拜占庭將軍問題
1982年,計算機科學家萊斯利·蘭伯特(LeslieLamport)提出了著名的拜占庭將軍問題,該問題基于一個虛構的歷史架空場景:
圖五:拜占庭將軍問題
拜占庭帝國的軍隊包圍了一處敵軍的堡壘,但是為了維持包圍縱深使得軍力不得不分散為幾支彼此獨立的部隊。如果想要攻陷堡壘,那么就需要幾支部隊共同行動(一起進攻或者一起撤退)。如果只有一部分軍隊進攻,另一部分軍隊撤退,那么戰局將會陷入無可挽回的失敗。已知其中幾只部隊的將領已經叛變且會向其它部隊發送錯誤的信息,那么采用何種策略才能確保部隊之間行動的一致性呢?
這一看似與區塊鏈無關的問題實則觸及到了整個區塊鏈網絡設計的核心——在成千上萬節點共同運作的情況下,如何達成全局數據一致性?
2.拜占庭容錯算法
比特幣網絡屬于典型的公鏈系統,這意味著并不會對網絡中的成員設置嚴苛的準入機制。那么惡意節點和作弊行為就是一個幾乎無法規避的問題。如何才能防止惡意節點破壞網絡,隨意篡改區塊鏈中的數據呢?
聲音 | 臺灣金管會林志吉:區塊鏈產業投資依然蓬勃發展:據中時電子報消息,近日,在臺灣舉辦的“2018臺灣創業投資論壇-區塊鏈”大會上,金管會綜合規劃處長林志吉指出,國內金融機構自行投資及轉投資區塊鏈產業的總金額預估今年度可較去年成長28%,顯示區塊鏈產業投資的蓬勃發展,雖然目前仍處于早期發展階段,全球各國監理框架尚未完全成熟,然區塊鏈技術演進快速,法規如何跟上腳步,如何平衡創新跟風險管理是應持續思考的議題。[2018/12/11]
萊斯利·蘭伯特在提出這一問題的同時也給出了一種在無網絡延遲狀況下的拜占庭容錯算法,這一算法在惡意節點數不超過總結點數1/3的狀況下是可解的。首先這一算法將整個分布式網絡簡化為一個“將軍(Commander)——副官(Vice-general)模型”,其中發起某個提議的節點扮演將軍,其余節點扮演副官,每支部隊之間可以兩兩互通。
所謂拜占庭容錯,指的是在拜占庭問題的場景設定下,要保證如下兩點:
當將軍是忠誠的時,要同時保證命令的準確性(將軍的提議被所有忠誠的副官正確執行)和行動的一致性(將軍和忠誠的副官行動保持一致)。
當將軍非忠誠時,要保證所有忠誠的副官行動的一致性。
設總結點數為N,惡意節點數為F,首先考慮不可解的情況,即N≤3F時:
圖六:N=3時,V2為叛徒的情況
當C和V1是忠誠的,V2是叛徒時。C向V1,V2發出進攻命令。V1從將軍處收到進攻命令,但V2告訴V1自己收到撤退命令,V1無法判定C與V2誰是忠誠的,故無法達成一致性。
圖七:N=3時,C為叛徒的情況
當V1,V2是忠誠的,C是叛徒時。C向V1發出進攻命令,向V2發出撤退命令。V1從C處收到進攻命令,V2告訴V1自己收到撤退命令,V1仍然無法判定C與V2誰是忠誠的,故無法達成一致性。
之后考慮可解的情況,即N>3F時:
圖八:N=4時,V3為叛徒的情況
當C和V1,V2是忠誠的,V3是叛徒時。C向V1,V2,V3發出進攻命令,V2告訴V1自己收到進攻命令,V3告訴V1自己收到撤退命令,此時V1收到的信息集合為{A,A,R},取多數原則,執行進攻命令。其余忠誠副官同理執行進攻命令,實現準確性和全局一致性。
圖九:N=4時,C為叛徒的情況
當V1,V2,V3是忠誠的,C為叛徒時。C向V1,V2發出進攻命令,向V3發出撤退命令。V1收到的信息集合為{A,A,R},執行進攻策略。其余忠誠副官同理執行進攻策略,實現全局一致性。
當然在實際的分布式系統中情況遠比這要復雜,可能有成百上千節點同時運行,因此當惡意節點的數量增加,這一算法是否還能夠實現拜占庭容錯呢?我們考慮一種更復雜的情況,令N=7,F=2。
動態 | 區塊鏈專利全球排行阿里90項名列第一:日前,IPRdaily正式對外公布‘2018年全球區塊鏈專利企業排行榜TOP100’,榜單數據顯示,中國公司占半數以上,BAT、華為均入榜。其中阿里巴巴以90項專利數排名第一,IBM和MasterCard分別以89、80專利數排榜單第二、三名。騰訊科技進入前十位列第八,擁有40件專利,百度則排在40位。[2018/11/26]
圖十:N=7時,V5,V6為叛徒的情況
首先我們定義一個三元函數:
該函數表示“Vz告訴Vx:‘Vy告訴Vz其所收到的命令’”。A表示進攻,R表示撤退,I表示不確定。假設v5和V6是叛徒,C,V1,V2,V3,V4是忠誠的。那么要想在這一情況下實現拜占庭容錯,就必須用到遞歸算法。我們以V1節點為例,當Vx=V1時,作出FVz→V1(Vy→Vz)函數的真值表:
表一:FVz→V1(Vy→Vz)函數真值表
首先我們根據橫向多數原則確定每一個忠誠將領從其它將領處收到的信息中的多數真值。然后根據縱向多數原則確定V1的最終策略,根據FVz→V1(Vy→Vz)函數真值表可確定V1的最終策略為攻擊。
同理可以計算出其它將領的FVz→Vx(Vy→Vz)函數真值表,結果為所有忠誠將領都會選擇攻擊策略。當將軍為叛徒時推演過程同上。
需要強調的是,萊斯利·蘭伯特的這一算法只能應用在無網絡延遲(即任意節點間可以瞬時互通)的情形下。當F值增加時,遞歸算法需要用到一個F維的向量函數真值表,算法復雜度會以指數級上升,因此這一算法在實際的分布式系統中幾乎無法應用。在此基礎上,后來計算機學者們進一步提出了POW,POS,PBFT,RAFT等實用的拜占庭容錯算法,這一部分將在后文中詳述。
四、比特幣的記賬賦權機制與基于工作量證明(ProofofWork)的共識算法
1.比特幣的記賬賦權機制
比特幣網絡的本質是一個大型的分布式記賬系統,由于該網絡不設準入機制,每一個成員節點都可以參與記賬。雖然每一筆交易都會被全網廣播,但是因為成員節點的網絡環境,數據延遲都有可能不同,進而導致每個節點的賬本中記錄的交易數據也有所不同。更何況還會存在惡意節點的作弊行為。那么對記賬者的篩選以及排除惡意節點的影響就成了比特幣網絡架構設計中所涉的核心問題。
首先比特幣網絡采用了一套有獎勵的記賬賦權機制。因為記賬行為需要算力和內存開銷,而且保存的賬本中大部分內容都是與記賬節點無關的交易內容。為了保持成員記賬的積極性,比特幣網絡設置了一定的記賬獎勵。首先參與記賬的節點可以獲得以比特幣形式支付的定額手續費。而獲得最終打包權(賬本入鏈)的節點則可以獲得高額的打包獎勵。打包獎勵在第一個四年高達每次50個比特幣,而這一數額每四年會減半,最終收斂于2100萬個。打包機會與算力正相關,只要全網算力分布均勻,那么打包權也會均勻賦權給所有節點。比特幣系統正是通過這種方式完成了貨幣在全網的擴散分發。
2.工作量證明(POW)
既然每個節點的賬本都有可能不一樣,那么最終由誰負責記賬就成為了一個至關重要的問題。比特幣網絡采用工作量證明(POW)來實現對記賬權限的唯一下發,進而實現賬本的全網一致性。
日本秘密召開多國央行與金融監管機構圓桌會議,商討公有區塊鏈的機遇與風險:日本金融服務局(FSA)本周一披露該機構曾在3月8日到3月9日舉辦了一場閉門圓桌會議,參與者包括來自多個國家的央行和金融監管機構以及少數外國和日本學術機構。FSA說:“這次圓桌會議特別強調了區塊鏈所固有的技術風險和機遇。作為這項倡議的一部分,日本金融服務管理局目前正在從技術角度研究公有區塊鏈的脆弱性問題和相關安全問題及其影響。”圓桌會議的參與者包括來自新加坡、加拿大和日本的中央銀行,以及來自英國、阿布扎比、法國和香港的金融監管機構以及澳大利亞證券監管機構。以加密為中心的麻省理工學院媒體實驗室、東京大學和日本慶應大學也作為學術機構參加了會議。[2018/3/22]
傳統的拜占庭容錯算法如PBFT算法往往旨在于設計出一種能夠對節點間的信息傳輸進行多重交叉驗證的通信機制來達成全局一致性。而POW則采用了另一種更為簡單粗暴的設計思路,那就是人為提高惡意節點偽造信息的成本,使得作弊成本遠遠高于所帶來的收益,通過犧牲區塊鏈網絡的效率來換取數據安全性。
POW是一種以結果為導向的認證賦權機制,即不關心受驗者具體的計算過程,只關心最終的結果。POW要求所有受驗者計算一個“數字謎題”,先計算出這個數字謎題的節點將獲得當前區塊的打包權限。
在每一個記賬周期內,每個節點都會接收到全網的多筆交易記錄,并保存在本地區塊體的交易集合中(其中第一筆交易記錄為Coinbase交易,即打包獎勵的交易記錄,每個節點都會生成自己的Coinbase交易記錄)。根據交易集合可以計算出其默克爾根,并和其余信息一起組裝成區塊頭。除默克爾根外,區塊頭中還保存了當前的協議版本號,父區塊哈希值,時間戳,難度目標,Nonce隨機數等。其中除了Nonce隨機數之外,其它數據都是已經確定的。
POW要求參與記賬的節點對自己當前區塊的區塊頭信息進行兩次SHA256哈希運算,得到一個256位的數字摘要。哈希運算是一種將不定長字符串數據映射到一個256位定長的二進制散列結構上的加密算法,且用原始數據計算哈希值很容易,但是卻幾乎無法通過哈希值逆推原始數據。此外哈希算法還具有輸入敏感特性,原始數據微小的差異都會使得哈希值大相徑庭,幾乎不需要考慮哈希碰撞的情況。因而有效規避了記賬節點通過偽造符合要求的哈希值和原始數據來竊取記賬權利的風險。
圖十一:POW解謎流程
首先區塊頭中保存了一個名為難度目標(target_bits)的字段信息,這一字段用來調節當前POW算法的題設難度。
其中target_bits為目標值,最大為一個固定的十六進制常數target_max。因為哈希值大體上是均勻離散的,因此哈希值每一位是0或者1的概率大體上都是1/2,其取值符合古典概率模型。每一個可能的哈希值都是一個基本事件,總共有有限多個基本事件,這就使得解謎成功率可以通過target_bits參量進行調節。POW的目標難度會隨著全網算力漲落而上下浮動,確保每10分鐘全網至少能打包一個區塊。
POW要求受驗節點計算一個哈希值:
且要求:
又因為一個待打包區塊的區塊頭中除Nonce隨機數外其余的字段都已經確定,受驗節點就只能通過調節Nonce的值來改變H(Nonce)的值。因此解題過程實際上也就是一個通過不斷改變Nonce的值來暴力計算符合要求的H(Nonce)的過程,也即俗稱的——挖礦。
類似于紙幣與主權信用掛鉤的主權貨幣體系抑或是美元與黃金掛鉤的布雷頓森林體系。POW是在嚴格的密碼學理論和數學算法限制下用物理資源的強制性開銷為比特幣的稀缺性和流通性提供信用擔保的一種手段,其構成了比特幣作為一種貨幣的信用基石。
也就是說,挖礦本質上是將實體物理資源(如計算機算力與電力開銷)轉換為虛擬資源(比特幣)的過程。
我們假設全網有N臺礦機,每臺礦機的平均算力為S(次/秒),當前的目標難度為target_bits,要保證十分鐘至少打包一個區塊,則很容易得出這三者之間的算數關系。
已知H(Nonce)的值域為離散的定長二進制數且符合古典概率模型,故任取一個Nonce1,H(Nonce1)<target_bits的概率為:
每秒全網能進行N*S次計算,則每秒產生的H(Nonce)符合條件的概率為:
要求10分鐘至少打包一個塊,那么要求十分鐘全網算出符合要求的H(Nonce)的概率必須為1,則有:
進而易得:
當某個受驗節點第一個得出符合要求的H(Nonce)值時,便會將自己打包的區塊和H(Nonce)向全網廣播(H(Nonce)會作為本區塊哈希編碼存入下一個區塊的區塊頭中)。其它節點接收到該信息后會迅速對結果進行驗證(驗證分為兩部分,一方面驗證受驗區塊H(Nonce)是否符合要求,另一方面驗證交易集合中的記錄是否合法),如果驗證通過則將該區塊入鏈并放棄對當前區塊的解謎,進入下一個區塊的解謎工作。POW記賬賦權機制保證了全網只會接受最快算出數字謎題的那個節點所打包的塊,進而保證了數據的全局一致性。
就POW作為一種共識算法而言,其優點是顯而易見的。去中心化,不設準入的設計有效規避了少數成員對記賬權利的壟斷。而且強制性的物理資源開銷也大大增加了惡意節點的作弊成本,有效避免了惡意節點對全網共識的干擾。
但是另一方面POW的缺點也尤為突出,最明顯的便是“數字解謎”的設計大大延緩了網絡的記賬效率。在10分鐘記賬周期內,一個區塊大約只能存儲4000條交易記錄,意味著比特幣網絡每秒大約只能處理7條左右的交易請求。
而且雖然POW基于去中心化的理念設計,但是在后來的實踐中不可避免的發生了對初衷的偏移。中本聰最初的設計愿景是全網每一個CPU公平分享記賬的權利。但是因為“數字解密”的算數重復性特征,很多專業挖礦團隊都采用了更加適合重復運算的GPU集群來挖礦。這使得POW最初的均質賦權體系受到了相當程度的沖擊,形成了少數大型礦場壟斷算力的局面。針對這種情況,區塊鏈技術在后來的演進中也采用了其它形式的POW算法。如以太坊(Ethash)采用的“內存困難算法”,即將算力開銷轉為內存開銷,使得礦場要想提升挖礦成功率就必須增加內存,而無法借助優化了CPU/GPU架構的專業礦機來實現挖礦效率的指數級提升。
五、比特幣網絡的身份防偽與交易驗證機制
1.公/私鑰加密算法與身份防偽
在比特幣網絡中每個節點隨時都會收到來自其它節點的多條交易記錄,其中有的交易記錄可能是惡意節點偽造的,確保每一筆交易由賬戶持有者本人發出且合法便成為了比特幣交易安全中一個至關重要的問題。對此比特幣網絡采用了公/私鑰加密算法來對每一筆交易進行身份驗證。所謂公/私鑰加密是一種典型的“非對稱加密算法”,“非對稱”的意思是信息的加/解密所需要的密鑰是不一致的。
用于信息加密的密鑰稱為“私鑰”,當用戶注冊時會生成一個隨機數,并由該隨機數生成用戶私鑰,其由用戶本人唯一持有且與比特幣賬戶關聯(私鑰丟失意味著該賬戶下所有資產的丟失)。同時比特幣網絡還會根據私鑰產生與之對應的公鑰和地址,這兩者都是公開的,用于交易時其它節點對交易合法性的驗證。
圖十二:基于公/私鑰算法的身份驗證機制
已知私鑰由賬戶所有者唯一持有,而對應公鑰可以由任何一個用戶持有。當用戶A發起一筆轉賬交易Trade=“A向B轉賬5BTC”時,首先A會對Trade進行一次SHA256運算得到數字摘要H(Trade)=SHA256(Trade)。之后A會用私鑰對H(Trade)加密得到密文C(Trade),然后A會將交易記錄Trade,C(Trade),公鑰,地址一起打包后向全網廣播。
當節點I收到A的廣播后,首先會對Trade進行一次SHA256運算得到H(Trade)=SHA256(Trade),之后用收到的公鑰解密密文C(Trade),得到D(Trade)=Deciphering(C(Trade))。比對H(Trade)和D(Trade),如果兩者一致則證明該條交易記錄確實由A發出,若不一致則說明該條記錄由惡意節點偽造。
2.超額透支與雙重支付
公/私鑰加密算法有效排除了惡意節點偽造交易記錄的情況,但是即便是正常用戶也有可能會存在超額透支自己賬戶中余額的作弊行為,這就需要引入額外的驗證機制。假設用戶A的賬戶中余額為50BTC,但是其卻向全網廣播了一條“A向B轉賬100BTC”的交易信息。當其它節點收到該信息后,并不會馬上將這條記錄寫入區塊,而是會通過回溯歷史區塊來重建A的賬戶信息,并對A的賬戶狀態進行校驗。如果其余額低于100BTC,則該條交易信息視為無效交易,并不會被打包進區塊中,也就不會出現超額透支的問題。
此外還有另一種更為特殊的情況,假設A的賬戶中余額為50BTC,但是A同時向全網廣播了兩條交易信息:“A向B轉賬50BTC”;“A向C轉賬50BTC”。當其它節點接收到這兩條信息后,都會只接受前一條信息,放棄后一條信息。但是因為網絡狀況的不同,有可能有的節點保留了前一條信息,而有的節點保留了后一條信息。在這種情況下,永遠都是以最終入鏈的那條交易記錄為準,因此發出一條交易記錄并不意味著該筆交易會立即生效,只有最終入鏈的交易記錄才會被全網所認可。
3.防篡改機制與最長鏈原則
圖十三:防篡改機制與最長鏈原則
此外還存在另一種比較極端的情況,因為區塊鏈本身的拓撲結構,每個區塊都保存了前一個區塊的數字摘要(父區塊哈希編碼)。如果某個歷史區塊中的記錄發生變動,那么其區塊哈希值也會隨之發生改變,從而破壞全鏈的拓撲結構,成為一條廢鏈。如果某個惡意節點想要篡改歷史區塊中的交易記錄,即必須從被篡改的區塊開始重新計算一條新鏈。為了規避惡意節點用被篡改的分支鏈取代公鏈,比特幣網絡引入了“最長鏈原則”,也就是全網永遠以最長的那條區塊鏈作為公鏈。如果惡意節點想要用分支鏈B取代公鏈A,就必須不斷向下計算直到分支鏈B比公鏈A更長。而又因為POW的限制,記賬概率與算力成正比。這就要求惡意用戶至少需要占有全網的多數算力才有可能做到這一點(51%算力攻擊),而這幾乎是一件不可能的事。
在POW和“最長鏈原則”的雙重保障下,比特幣網絡有效實現了歷史數據的防篡改機制。
參考文獻
SatoshiNakamoto:Bitcoin:APeer-to-PeerElectronicCashSystem
Castro,Miguel,BarbaraLiskov:PracticalByzantinefaulttolerance.OSDI.Vol.99.1999
Kwon,Jae:Tendermint:Consensuswithoutmining.Draftv.0.6,fall(2014)
Tags:區塊鏈比特幣POW區塊鏈工程專業學什么區塊鏈存證怎么弄區塊鏈技術發展現狀和趨勢比特幣中國官網聯系方式40億比特幣能提現嗎比特幣最新價格行情走勢POW價格POW幣
當前,疫情防控仍處于關鍵時期。吉利汽車決定:取消原定于2020年2月14日在杭州奧體中心網球館舉行的"吉利ICON上市發布會",變更為線上創新發布,上市日期將擇期公布.
1900/1/1 0:00:00如需報告請登錄。 1、特斯拉:到底用什么電池? 核心結論: 1)特斯拉采用寧德時代成熟“無鈷”電池方案,大概率是磷酸鐵鋰電池方案。國產特斯拉Model3基礎款對電池要求并不高.
1900/1/1 0:00:00八寶飯財經早訊2020年03月25日星期三八寶飯財經早訊,區塊鏈營養早餐八寶粥已經送達,Tether公司新增發1.2億美元USDT.
1900/1/1 0:00:00據韓國《中央日報》11日報道,由于新冠肺炎疫情的快速蔓延,釜山一名男子聽說紙幣可以用微波爐消,因此就把39張1萬元面值的韓幣,放進微波爐里消.
1900/1/1 0:00:00在對一畝田APP移動端進行深入細致的使用和產品體驗之后,本文我將基于產品視角,從產品戰略層、戰術層、框架層、功能層、表現層等五個方面來做從整體到局部的產品邏輯分析,并在分析的基礎上.
1900/1/1 0:00:0010月25日下午,現任盛大網絡旗下ActozSoft(亞拓士)董事長兼CEO、大幣網Dcoin交易所天使投資人郭海濱做客鏈節點ChainNode進行AMA.
1900/1/1 0:00:00