作者:王翔
前言
說起當今最具代表性的數據通信技術,區塊鏈無疑在列。作為當下最受關注的次世代分布式系統,區塊鏈可謂眾說紛紜,莫衷一是。有人視之為引爆下一次互聯網技術革命的突破口,也有人稱其為投機工具,驚世騙局。本文旨在于盡可能懸置那些游離于技術層面之外的價值判斷,將視角重新移回到區塊鏈技術本身,完整回溯區塊鏈1.0到3.0的技術原理和設計理念之沿革,為讀者揭開籠罩在區塊鏈之上那層神秘的面紗。
第一章區塊鏈網絡與數字貨幣系統
一、區塊鏈的技術背景
1.區塊鏈的起源
2008年,美國次貸危機爆發,金融海嘯席卷全球,經濟蕭條延宕數年之久。對2008危機的溯源性研究指向了多個可能的誘發性因素。除了次級貸款市場的過度放貸和杠桿率居高不下,主權貨幣的濫發也成為了金融危機的一個重要誘因。
同年11月1日,某化名為“中本聰(SatoshiNakamoto)”的網絡極客發表了一篇名為《比特幣:一種點對點的電子現金系統》的技術論文,也即后來人們所稱的《白皮書》。《白皮書》在基于主權信用背書的貨幣系統基礎上進一步提出了一種能夠規避主權貨幣濫發,而且完美解決了貨幣信用問題的電子支付系統——比特幣。該書完整闡述了筑基于點對點傳輸技術,密碼學算法,區塊鏈技術之上的比特幣分布式網絡的架構理念。
2009年,序號為0的區塊——創世區塊誕生。時隔不久,序號為1的第二個區塊誕生,并與創世區塊相連,世界首條區塊鏈面世。
需要澄清的一點是,與其說區塊鏈是一種技術工具,毋寧謂其為一種理念。無論是構成區塊鏈技術核心的共識算法,容錯算法,加密技術,傳輸技術,存儲技術,其都是構筑于完備的數學和密碼學基礎,而非工程學技術。正是因此,區塊鏈技術并不強依賴于物理基礎設施,在最極端的情況下,理論上我們甚至可以只借助于二戰時期的無線電技術來搭建一個簡易的區塊鏈網絡。就廣義范疇而言,比特幣只是區塊鏈技術的一種具體實現形式,只要具備去中心化,全網共識,防篡改,可回溯這幾個核心要素,都可視為區塊鏈技術理念的橫向延伸。
一言以蔽之,區塊鏈的本質是一種基于密碼學算法的“電子契約”。
2.區塊鏈的技術優勢
十數年間區塊鏈技術歷經了數次迭代發展。從以比特幣為代表的區塊鏈1.0到以以太坊為代表的區塊鏈2.0再到以Hyperledger,EOS為代表的區塊鏈3.0,區塊鏈技術所能承載的業務場景和應用范圍愈加廣泛。其功能已不僅僅局限于電子貨幣系統,而是進一步推廣到了企業,機構間數據共享,高敏感性數據存儲等諸多場景。
目前區塊鏈的技術優勢在于:
去中心化(或多中心化),每個節點都保存了完整的區塊鏈信息,解決了敏感數據的備份問題和傳統分布式系統的信息不對稱問題。去信任化,通過密碼學基礎和區塊鏈網絡解決了中心化系統的信任機制問題,由整個區塊鏈網絡而非某個中心服務器提供信用擔保。不可篡改,所有持久化的區塊永久保存,交易記錄可隨時回溯,一筆交易只能通過另一筆交易進行追償,無法單方面取消。規避了傳統數據庫的數據丟失和惡意篡改風險,更加適用于高敏感性數據(如金融數據,企業核心業務數據等)。二、比特幣的基礎數據結構與交易集驗證機制
1.區塊與區塊鏈
作為一種數據存儲系統,區塊鏈的本質仍然是一個數據庫,只不過是由整個網絡共同維護的分布式數據庫。不同于傳統的結構化關系型數據庫,區塊鏈為了實現時間維度的永久可回溯性,在底層數據結構中并不存儲數據的狀態,而只存儲對數據的變更。
對沖基金Two Sigma:將向區塊鏈信息網絡Chainlink提供數據:10月5日消息,量化對沖基金Sigma Securities宣布將向區塊鏈信息網絡Chainlink提供數據,包括掉期、期權和其他衍生品相關信息。Chainlink通過其預言機網絡提供價格信息和其他數據,一周前,金融服務公司Galaxy Digital也宣布加入Chainlink,提供鏈上加密定價數據。(coindesk)[2022/10/6 18:40:19]
以比特幣為例,作為一般等價物的貨幣本身只是一個價值符號,其意義在于對交易的額度標記。因此比特幣網絡就是一個大型的電子記賬系統。而區塊鏈中存儲的便是網絡中用戶之間的交易記錄。
圖一:區塊鏈結構一個區塊主要由區塊頭和區塊體兩部分構成,大小約為1M左右。區塊頭主要用于存儲版本號(用于標識當前的軟件協議版本),父區塊哈希編碼,默克爾根,時間戳,難度目標,Nonce隨機數等數據。其中父區塊哈希編碼用于和上一個區塊產生唯一性鏈接。默克爾根用于為比特幣用戶提供簡單支付驗證(SPV),這一部分內容將在后文中詳細介紹。
而區塊體中則包含了一組具體的交易記錄集合,交易分為兩種類型,Coinbase交易和普通交易,每個區塊中第一筆交易屬于Coinbase交易,是區塊鏈網絡給予記賬者的獎勵。而其它則是用戶之間進行轉賬的普通交易。每個區塊中大概包含了4000條左右的交易記錄。獲得記賬權限的節點會將區塊頭和區塊體打包成一個完整的塊并廣播給整個區塊鏈網絡,其它節點驗證通過后便會將其作為一個新區塊加入區塊鏈。
2.默克爾樹(MerkleTree)與交易集合
在區塊鏈結構中默克爾樹扮演了極為重要的角色。其一方面用于產生每個區塊的唯一數字摘要,另一方面也可以用于在部分節點存儲空間有限的情況下進行簡單支付驗證(SPV)操作。
圖二:默克爾樹
所謂默克爾樹,是一種典型的二叉樹數據結構。在每個區塊的區塊體中都保存了若干條交易記錄,這些交易記錄被均勻掛載在一個默克爾樹結構中。樹的每個葉子節點都保存了對應掛載的交易記錄哈希值。而每個葉子節點又會兩兩配對合并為一個新的字符串,進而用新字符串的哈希值構成上一級節點,一直迭代到最終產生一個唯一的根節點HROOT(在交易記錄為奇數條的情況下可能會存在余根的情況,因此會將奇數條記錄全部拷貝一份,構成平衡樹)。這樣在根哈希HROOT中就包含了每一條交易的數字摘要,任何一條記錄的增刪和變更都會由末端傳導至根哈希上。
因為默克爾樹下掛載的每一筆非相鄰交易記錄之間都是通過不同的上溯分支連接到根節點,因此默克爾樹相比哈希列表可以單獨對某個分區內的信息正確性和完整性進行驗證而無需重構所有葉子節點下的數據。這一數據結構被廣泛應用于分布式網絡中的數據校驗服務。
圖三:異質分區定位算法
除了通過上溯分支驗證數據正確性外,默克爾樹還可以用于快速定位兩個樹結構下異質分區的位置。如上圖所示。當HROOT-A≠HROOT-B時,只需向其下級節點回溯找到“gsc3”和“gts1”兩個異質節點,之后重復這一過程直至追溯到葉子節點,即可定位到兩個樹結構中的異質分區。
云南玉溪市區塊鏈產業金融服務平臺促成融資逾93億元:8月14日消息,云南省玉溪市在全省首創的玉溪市區塊鏈產業金融服務平臺已為銀企雙方促成貸款逾93億元。平臺推出客戶端APP,較之前拓寬了融資渠道,拓展了電力數據共享支持、用戶接入方式更加完善,應用場景不斷豐富,可為銀企雙方提供更好的使用體驗。目前,該平臺已在國家區塊鏈信息服務備案成功,實現了玉溪同類平臺零的突破。目前已注冊企業6045家,入駐金融機構65家,上線金融產品104項,金融機構授信595項融資需求,總計金額93.0331億元。(新浪網)[2021/8/14 1:55:09]
3.簡單支付驗證(SimplifiedPaymentVerification)
在比特幣網絡中,每一筆交易都要驗證,不僅涉及對帳戶余額的驗證,還需要對交易的執行結果進行驗證。這一過程有時可能需要回溯整個區塊鏈重構賬戶狀態,所需要的算力往往超出一般節點的算力載荷,因此通常情況下是由一些挖礦節點來進行交易驗證。
此外還存在另一種場景,那就是支付驗證。也就是驗證某一筆交易信息是否已經被區塊鏈網絡所確認。對此,中本聰提出了一種更為經濟的驗證方式,那就是簡單支付驗證(SPV)。SPV是一種基于默克爾樹結構的數據存在性校驗算法。因為支付驗證只需要校驗某筆交易是否在區塊鏈中存在,因此并不需要保存整個區塊鏈的信息。
圖四:SPV算法如圖所示,在區塊體中,每筆交易都掛載在默克爾樹的一個葉子節點上。如果我要驗證交易6是否在某個區塊中存在,那么我只需要得到H5,H78,H1234三個節點的信息,然后循著上溯分支計算出默克爾根,驗證其與HROOT是否相同即可。因此用戶只需要保存每個區塊的區塊頭信息即可完成對某筆交易的支付驗證(其本質為驗證某筆交易所在的區塊是否為共識區塊)。
三、拜占庭將軍問題(ByzantineFailures)與拜占庭容錯算法(ByzantineFaultTolerance)
1.拜占庭將軍問題
1982年,計算機科學家萊斯利·蘭伯特(LeslieLamport)提出了著名的拜占庭將軍問題,該問題基于一個虛構的歷史架空場景:
圖五:拜占庭將軍問題
拜占庭帝國的軍隊包圍了一處敵軍的堡壘,但是為了維持包圍縱深使得軍力不得不分散為幾支彼此獨立的部隊。如果想要攻陷堡壘,那么就需要幾支部隊共同行動(一起進攻或者一起撤退)。如果只有一部分軍隊進攻,另一部分軍隊撤退,那么戰局將會陷入無可挽回的失敗。已知其中幾只部隊的將領已經叛變且會向其它部隊發送錯誤的信息,那么采用何種策略才能確保部隊之間行動的一致性呢?
這一看似與區塊鏈無關的問題實則觸及到了整個區塊鏈網絡設計的核心——在成千上萬節點共同運作的情況下,如何達成全局數據一致性?
2.拜占庭容錯算法
比特幣網絡屬于典型的公鏈系統,這意味著并不會對網絡中的成員設置嚴苛的準入機制。那么惡意節點和作弊行為就是一個幾乎無法規避的問題。如何才能防止惡意節點破壞網絡,隨意篡改區塊鏈中的數據呢?
政府區塊鏈協會(GBA)愛爾蘭分會成立:5月19日消息,政府區塊鏈協會(GBA)宣布GBA愛爾蘭分會成立,新的愛爾蘭分會由Jillian Godsil(主席)和Lisa Gibbons(副分會負責人)領導。
GBA是一個國際非營利專業協會,會員遍布75多個國家。GBA的重點是在技術專家、公共政策制定者、應用專家以及那些希望了解新的和新興的數字貨幣的人之間培養專業的工作流程。(ACN Newswire)[2021/5/19 22:19:10]
萊斯利·蘭伯特在提出這一問題的同時也給出了一種在無網絡延遲狀況下的拜占庭容錯算法,這一算法在惡意節點數不超過總結點數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。
動態 | 公共養老金基金向Morgan Creek新區塊鏈基金投資5000萬美元:Morgan Creek Digital已為其第二支風險投資基金籌集了首批6090萬美元的資金,該基金的融資目標為2.5億美元。Morgan Creek透露,此前投資過首支資金的相同機構對第二支基金的投資增加了兩倍以上,包括兩家公共養老基金。弗吉尼亞州費爾法克斯縣的警官退休系統和雇員退休系統總共向第二支基金投資了5000萬美元,高于向2月份的首支基金投入的2100萬美元。其余1000萬美元來自其他機構投資者,包括Wakemed醫療和醫院、一家保險公司和一所大學的捐贈基金。(coindesk)[2019/10/23]
圖十: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萬個。打包機會與算力正相關,只要全網算力分布均勻,那么打包權也會均勻賦權給所有節點。比特幣系統正是通過這種方式完成了貨幣在全網的擴散分發。
動態 | 俄羅斯將推出藝術領域的首個大型區塊鏈項目:日前,俄羅斯國立特列季亞科夫美術館館長澤爾菲拉·特列古洛娃在第七屆圣彼得堡國際文化論壇上公布了一則重磅消息——特列季亞科夫美術館將委托RDI數字集團、區塊鏈解決方案公司Riddle&Code推出一個名為“我的特列季亞科夫”的應用程序,利用區塊鏈技術讓“全世界”成為美術館數字化建設的贊助者和畫廊藝術品的收藏者。據俄羅斯媒體稱,該項目是俄羅斯在藝術領域的首個大型區塊鏈項目,如果成果豐碩,將成為全球范圍內文博機構可效仿的“公眾參與藝術的新形式”。[2019/1/7]
2.工作量證明(POW)
既然每個節點的賬本都有可能不一樣,那么最終由誰負責記賬就成為了一個至關重要的問題。比特幣網絡采用工作量證明(POW)來實現對記賬權限的唯一下發,進而實現賬本的全網一致性。
傳統的拜占庭容錯算法如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幣
暗網和加密貨幣的關系,還要從比特幣的誕生說起。2009年1月3日,比特幣橫空出世,并沒有得到廣泛的關注。2010年5月22日,一個叫LaszloHanyecz的程序員花一萬個BTC買了2個披薩.
1900/1/1 0:00:00記者|鄭潔瑤編輯|文姝琪12019年,區塊鏈行業迎來轉機。10月24日,一場由中央發起的集體學習,把在亂世里野蠻生長了許久的區塊鏈技術收編進了正規軍的行列.
1900/1/1 0:00:00新京報訊2月7日,延安必康發布公告稱,近日與深圳市圖微安創科技開發有限公司簽署《戰略合作協議》.
1900/1/1 0:00:00(⊙_⊙) 每天一篇全球人文與地理 微信公眾號:地球知識局 NO.1341-蒙古國農業 作者:那日蘇 制圖:孫綠/校稿:貓斯圖/編輯:養樂多蒙古國位于東亞與北亞的交界,歐亞大草原的東部.
1900/1/1 0:00:00金色財經近期推出金色硬核(Hardcore)欄目,為讀者提供熱門項目介紹或者深度解讀。正如我們在“BTC第三次減半全解讀”中所說,比特幣在2020年值得關注的一個進展就是Schnorr/Tapr.
1900/1/1 0:00:00日前保時捷發布了兩款718GTS新車型官圖,兩款車型分別為718CaymanGTS4.0以及718BoxsterGTS4.0。兩款新車均搭載了4.0升水平對置6缸發動機.
1900/1/1 0:00:00