官术网_书友最值得收藏!

第一部分 基本原理與關(guān)鍵技術(shù)

第1章 區(qū)塊鏈的基礎(chǔ)原理與技術(shù)

1.1 區(qū)塊鏈的誕生與發(fā)展歷程

區(qū)塊鏈作為支撐數(shù)字經(jīng)濟(jì)發(fā)展的關(guān)鍵技術(shù)之一,得到了國家政策的支持。早在2016年12月,《“十三五”國家信息化規(guī)劃》就將區(qū)塊鏈定為戰(zhàn)略性前沿技術(shù)之一。2019年10月24日,習(xí)近平總書記在主持中央政治局第十八次集體學(xué)習(xí)時(shí)強(qiáng)調(diào),“區(qū)塊鏈技術(shù)的集成應(yīng)用在新的技術(shù)革新和產(chǎn)業(yè)變革中起著重要作用。我們要把區(qū)塊鏈作為核心技術(shù)自主創(chuàng)新的重要突破口,明確主攻方向,加大投入力度,著力攻克一批關(guān)鍵核心技術(shù),加快推動區(qū)塊鏈技術(shù)和產(chǎn)業(yè)創(chuàng)新發(fā)展”。

區(qū)塊鏈(Blockchain)也可以稱為分布式賬本技術(shù)(Distributed Ledger Technology,DLT),其主要利用分布式節(jié)點(diǎn)共識機(jī)制來生成和更新數(shù)據(jù),利用密碼學(xué)的方式保證數(shù)據(jù)傳輸和訪問的安全,利用由自動化腳本代碼組成的智能合約來編程和操作數(shù)據(jù),具有分布式存儲、防偽造、防篡改、透明可靠等特征。

作為一種融合了密碼學(xué)、博弈論、網(wǎng)絡(luò)通信等多種科學(xué)技術(shù)的集合創(chuàng)新技術(shù),區(qū)塊鏈具有多個層面的價(jià)值。從技術(shù)層面來說,通過構(gòu)建P2P自組織網(wǎng)絡(luò)、時(shí)間有序難篡改的密碼學(xué)共享賬本、分布式共識機(jī)制,從而在技術(shù)層面實(shí)現(xiàn)多中心的信任。從經(jīng)濟(jì)學(xué)層面來說,區(qū)塊鏈天然的弱中心、分布式的特點(diǎn)能夠帶來一種新的價(jià)值傳遞方式,使交易雙方可以通過區(qū)塊鏈的技術(shù)背書實(shí)現(xiàn)點(diǎn)對點(diǎn)的價(jià)值交換,大幅簡化中間環(huán)節(jié)。從社會治理層面來說,區(qū)塊鏈可以實(shí)現(xiàn)數(shù)據(jù)和價(jià)值跨平臺、地域、系統(tǒng)、部門、業(yè)務(wù)、國境的有序流通和共享,也可以支撐有效的協(xié)同管理和服務(wù)。作為推動供給側(cè)改革的利器之一,這一技術(shù)的推廣應(yīng)用將創(chuàng)造出全新的商業(yè)模式和服務(wù)模式,有望構(gòu)建新型的產(chǎn)業(yè)協(xié)作方式,提高協(xié)同流通的效率,加速社會數(shù)字化進(jìn)程。

1.1.1 區(qū)塊鏈的誕生

20世紀(jì)80年代,密碼朋克(Cypherpunk)就有了加密支付工具的最初設(shè)想。蒂莫·西梅(Timothy May)提出了不可追蹤的電子支付工具——加密信用(Crypto Credits),用于獎勵那些致力于保護(hù)公民隱私的黑客們;1990年,大衛(wèi)·喬姆(David Chaum)提出以盲簽名技術(shù)為基礎(chǔ)的、注重隱私安全的、不可追蹤的密碼學(xué)網(wǎng)絡(luò)支付系統(tǒng)——Ecash;1998年,戴偉(Dai Wei)提出了匿名的、分布式的電子支付系統(tǒng)——B-Money;2005年,尼克·薩博(Nick Szabo)提出了比特金(Bitgold)的設(shè)想。但由于當(dāng)時(shí)消費(fèi)者對互聯(lián)網(wǎng)上的隱私和安全問題并不十分重視,這些早期基于密碼學(xué)的支付工具的嘗試無一例外都失敗了。

2008年,全球金融危機(jī)的爆發(fā)進(jìn)一步推動了分布式、點(diǎn)對點(diǎn)支付工具的研發(fā)和實(shí)驗(yàn)。2008年10月31日,中本聰在一個隱秘密碼學(xué)討論小組中第一次發(fā)布比特幣白皮書BitcoinA Peer-to-Peer Electronic Cash System(《比特幣:一個點(diǎn)對點(diǎn)的電子現(xiàn)金系統(tǒng)》),描述了如何建立一套全新的、無中心化運(yùn)營的點(diǎn)到點(diǎn)交易系統(tǒng),而區(qū)塊鏈?zhǔn)菍?shí)現(xiàn)比特幣的支撐技術(shù)。有別于傳統(tǒng)的集中式記賬技術(shù),比特幣網(wǎng)絡(luò)的運(yùn)行不需要任何中心化的支持機(jī)構(gòu)參與,而是通過區(qū)塊鏈中點(diǎn)對點(diǎn)通信和透明可信的規(guī)則,構(gòu)建難偽造、難篡改和可追溯的塊鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu),分散式地管理事務(wù)處理。其數(shù)據(jù)信息存儲在區(qū)塊中,通過邏輯上的鏈接形成一條帶有時(shí)序性的鏈型結(jié)構(gòu),通過使用數(shù)字簽名與完整性校驗(yàn)保證區(qū)塊中數(shù)據(jù)的真實(shí)性和完整性。

2009年1月3日,比特幣系統(tǒng)正式開始運(yùn)行,中本聰成功地從創(chuàng)世塊中挖出第一批比特幣(合計(jì)50枚),比特幣也成為第一個基于區(qū)塊鏈技術(shù)的應(yīng)用。2010年,比特幣交易所誕生,5月22日有人用10000個比特幣購買了兩個比薩,這是第一次有人用比特幣購買實(shí)物的交易,自此比特幣在極為小眾的群體中流通起來,區(qū)塊鏈作為支撐比特幣系統(tǒng)運(yùn)行的底層技術(shù),也開始進(jìn)入公眾的視野。

1.1.2 區(qū)塊鏈技術(shù)演進(jìn)

一種技術(shù)的發(fā)展必然要經(jīng)過不斷的更新迭代,區(qū)塊鏈技術(shù)發(fā)展至今可以說經(jīng)歷了3個階段:技術(shù)起源、區(qū)塊鏈1.0,區(qū)塊鏈2.0(見圖1-1),本節(jié)將主要介紹這3個階段和區(qū)塊鏈演進(jìn)過程中的技術(shù)探索。

圖1-1 區(qū)塊鏈的技術(shù)演進(jìn)

1.技術(shù)起源階段

1)P2P(Peer to Peer)網(wǎng)絡(luò)

P2P網(wǎng)絡(luò)技術(shù)又稱對等互聯(lián)網(wǎng)技術(shù)或點(diǎn)對點(diǎn)通信技術(shù),是相對于中心化網(wǎng)絡(luò)而言的,是一種分散式地連接各對等節(jié)點(diǎn)的組網(wǎng)技術(shù)。P2P網(wǎng)絡(luò)是區(qū)塊鏈技術(shù)的底層網(wǎng)絡(luò)基礎(chǔ),與中心化網(wǎng)絡(luò)中心服務(wù)器服務(wù)全網(wǎng)的模式顯然不同的是,在P2P網(wǎng)絡(luò)中各個計(jì)算機(jī)節(jié)點(diǎn)具有相等的地位,節(jié)點(diǎn)間通過特定的網(wǎng)絡(luò)協(xié)議進(jìn)行信息或資源的交互,如圖1-2所示。

圖1-2 網(wǎng)絡(luò)模式

2)非對稱加密

非對稱加密算法是利用一對密鑰對來進(jìn)行信息加解密的算法,這對密鑰指的是公有密鑰(Public Key)和私有密鑰(Private Key),又稱為公鑰和私鑰。常用的非對稱加密算法有RSA、ECC等。非對稱加密算法解密過程如圖1-3所示。區(qū)塊鏈中通常使用非對稱加密的公私鑰來構(gòu)建對等節(jié)點(diǎn)間的保密通信,保證消息的可信及可驗(yàn)證性。

圖1-3 非對稱加密算法解密過程

3)分布式數(shù)據(jù)庫

分布式數(shù)據(jù)庫本質(zhì)上是一種物理上分散但邏輯上集中的數(shù)據(jù)管理系統(tǒng),其所管理的數(shù)據(jù)分散在各個物理節(jié)點(diǎn)上。從邏輯上來說,這些數(shù)據(jù)屬于同一個系統(tǒng),數(shù)據(jù)屬于一個組織實(shí)體,但從物理上來看卻可能分散在計(jì)算機(jī)網(wǎng)絡(luò)的若干站點(diǎn)上。由此看來,分布式數(shù)據(jù)庫有兩個重要特點(diǎn):分布性和邏輯相關(guān)性。借助分布式數(shù)據(jù)庫的思想,區(qū)塊鏈擴(kuò)大分布式的范圍,將數(shù)據(jù)由一個實(shí)體管理擴(kuò)展為由多個實(shí)體共同存儲與維護(hù)。

2.區(qū)塊鏈1.0

2009年1月,比特幣的正式上線運(yùn)行標(biāo)志著區(qū)塊鏈進(jìn)入1.0階段,依賴區(qū)塊鏈技術(shù)和激勵機(jī)制的設(shè)計(jì),比特幣在完全分布式環(huán)境、無單一運(yùn)維管理主體的情況下成功運(yùn)行了十年多。

區(qū)塊鏈在1.0階段的基本技術(shù)組成如下。

1)分布式共享賬本(Distributed Shared Ledger)

分布式共享賬本指的是將賬本分布式地存儲在很多不同的服務(wù)器上,不論這些服務(wù)器身處何處,都能準(zhǔn)確、及時(shí)地記錄全網(wǎng)發(fā)生的每一筆交易,同時(shí)通過網(wǎng)絡(luò)通信方式使得每個服務(wù)器上存儲的賬本都保持一致。這是一種不需要被任何中心化主體存儲或確認(rèn)的數(shù)據(jù)記錄方式,在同一個網(wǎng)絡(luò)里的所有參與者都可以獲得一個唯一、真實(shí)賬本的副本。由于賬本是全網(wǎng)同步的,通過各賬本的數(shù)據(jù)同步與交叉驗(yàn)證,任意一個肆意篡改的賬本都會被識別出來。

2)塊鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)

塊鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)是比特幣底層區(qū)塊鏈中數(shù)據(jù)存儲的結(jié)構(gòu),如圖1-4所示。在比特幣與其他后續(xù)發(fā)展的區(qū)塊鏈中,記錄在區(qū)塊鏈中的最小事務(wù)單位是“交易”(Transaction),交易代表著用戶在鏈上發(fā)起的轉(zhuǎn)賬、支付、兌換等金融活動。區(qū)塊是由特定的節(jié)點(diǎn)將一筆或者多筆交易打包形成的一個交易集合,其存儲結(jié)構(gòu)分為區(qū)塊頭和區(qū)塊體兩部分。其中,區(qū)塊體包含這個區(qū)塊的所有交易,以默克爾樹(MerkleTrees)的形式組織存儲,區(qū)塊頭包含父區(qū)塊哈希值、版本號、時(shí)間戳、生成區(qū)塊的難度、隨機(jī)數(shù)和交易體組成默克爾樹根的默克爾根值(Merkle Root)。由于區(qū)塊頭中包含前一區(qū)塊經(jīng)過哈希加密算法處理所得的哈希值,邏輯上形成了首尾鏈接的塊鏈?zhǔn)酱鎯Y(jié)構(gòu)。

圖1-4 塊鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)

在區(qū)塊鏈技術(shù)體系中,哈希加密算法的運(yùn)用發(fā)揮著重要作用。哈希加密算法具有顯著的單向性與碰撞約束,使其加密后的信息很容易被驗(yàn)證但很難還原。此外,哈希加密算法的一個重要特征是只要輸入的字符串發(fā)生一絲一毫的變化,其輸出的哈希值將會顯著不同。基于哈希加密算法的這一顯著特性,以及塊鏈?zhǔn)酱鎯Y(jié)構(gòu),攻擊者需要花費(fèi)巨大的代價(jià)才能篡改歷史區(qū)塊中的交易信息。因?yàn)橐坏┐鄹哪硞€歷史區(qū)塊中的交易信息,該區(qū)塊的哈希值就將發(fā)生變化,進(jìn)而引起該區(qū)塊之后所有區(qū)塊的哈希值變化,攻擊者必須將該區(qū)塊連同之后的所有區(qū)塊的哈希值重構(gòu)才可以完成交易修改。

3)默克爾樹

默克爾樹是區(qū)塊鏈的基本組成部分之一,以比特幣為例,區(qū)塊頭中的默克爾樹根是由區(qū)塊體中存儲的一筆筆交易不斷重復(fù)兩兩哈希過程而得到的唯一哈希值。

默克爾樹以其發(fā)明者拉爾夫默克爾(Ralph Merkle)的名字命名,它是哈希大量聚集數(shù)據(jù)“塊”的一種方式。在區(qū)塊鏈中交易就是數(shù)據(jù)“塊”,構(gòu)成默克爾樹的葉子節(jié)點(diǎn)。如圖1-4所示,筆者將這些塊從下至上依次兩兩分組,為每組建立一個包含每個塊哈希指針的新的數(shù)據(jù)結(jié)構(gòu),直到得到一個單一的哈希指針,即根哈希(Root Hash)。在這樣的機(jī)制下可以從根哈希指針回溯到任意數(shù)據(jù)塊,最終能保證原始交易未經(jīng)篡改。因?yàn)橐坏┕粽叽鄹牧藰涞撞康囊恍?shù)據(jù)塊,會導(dǎo)致上一層的哈希指針不匹配,從而使得任何篡改行為都會被檢測到。

4)工作量證明機(jī)制(Proof of Work)

共識機(jī)制描述的是系統(tǒng)中各節(jié)點(diǎn)參與決策達(dá)成一致的過程。在區(qū)塊鏈這樣一個分布式的系統(tǒng)中,需要在互不信任的節(jié)點(diǎn)間建立一套信任機(jī)制,才能完成對每筆交易的驗(yàn)證與確認(rèn),通過技術(shù)背書在機(jī)器間建立“自信任”的網(wǎng)絡(luò)。

工作量證明機(jī)制是區(qū)塊鏈1.0階段中比特幣的共識機(jī)制。比特幣有兩種不同的獎勵機(jī)制來鼓勵節(jié)點(diǎn)進(jìn)行記賬工作。一種是區(qū)塊獎勵,即所謂的“挖礦”,創(chuàng)建區(qū)塊的記賬節(jié)點(diǎn)都可以在這個區(qū)塊里加入一筆特別的交易,這筆交易就是一個造幣的交易,形成這個區(qū)塊的節(jié)點(diǎn)可以獲得這筆收益;另一種是交易費(fèi),即比特幣交易的一部分支付給記賬節(jié)點(diǎn)作為記賬報(bào)酬。由于比特幣獲得一些國家和商業(yè)機(jī)構(gòu)的價(jià)值認(rèn)可,其獎勵機(jī)制的設(shè)計(jì)使得運(yùn)維比特幣系統(tǒng)的所有的記賬節(jié)點(diǎn)都有動力誠實(shí)地記賬,并維持系統(tǒng)的正常運(yùn)行。

3.區(qū)塊鏈2.0

為解決區(qū)塊鏈1.0階段應(yīng)用開發(fā)局限、吞吐量性能較低、能量消耗大的問題,區(qū)塊鏈的技術(shù)架構(gòu)在進(jìn)一步地調(diào)整與改進(jìn),2015年7月以太坊的問世,標(biāo)志著區(qū)塊鏈進(jìn)入2.0階段。以太坊引入智能合約的概念,支持圖靈完備的編程語言Solidity來編寫智能合約及分布式應(yīng)用,有了智能合約系統(tǒng)的支撐,區(qū)塊鏈的觸角開始從單一的記賬領(lǐng)域延伸到涉及合約功能的其他金融、政務(wù)、民生等諸多領(lǐng)域。另外,IBM超級賬本項(xiàng)目——Hyperledger Fabric聯(lián)盟鏈的誕生,使得區(qū)塊鏈的應(yīng)用進(jìn)一步擴(kuò)展到對監(jiān)管合規(guī)性、數(shù)據(jù)安全、性能等要求更高的場景中,技術(shù)賦能的業(yè)務(wù)領(lǐng)域逐漸擴(kuò)大。

區(qū)塊鏈2.0時(shí)代主要有以下幾個典型特征。

1)智能合約

智能合約的引入擴(kuò)展了區(qū)塊鏈的編程能力,是區(qū)塊鏈2.0的一個典型特征。1995年,跨領(lǐng)域法律學(xué)者尼克·薩博(Nick Szabo)提出了“智能合約”(Smart Contract)的概念,即“一個智能合約是一套以數(shù)字形式定義的承諾(Commitment),包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議”。智能合約允許在沒有第三方參與的情況下,實(shí)現(xiàn)雙方或多方的可信交易。但由于早期缺少可信的分布式執(zhí)行環(huán)境,智能合約并沒有實(shí)際落地。直到比特幣的誕生,人們意識到區(qū)塊鏈能夠與智能合約相結(jié)合,達(dá)到相輔相成的效果。從以太坊開始,智能合約已成為區(qū)塊鏈上的一種計(jì)算機(jī)程序,當(dāng)合約中的條件得到滿足時(shí),便會自動觸發(fā)執(zhí)行合約內(nèi)容。

2)共識機(jī)制

隨著區(qū)塊鏈應(yīng)用場景的豐富,適用于不同場景的共識機(jī)制也相繼誕生。例如,聯(lián)盟鏈常用的拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)算法、公鏈常用的股份授權(quán)證明(Delegated Proof of Stake,DPOS)等。

拜占庭容錯技術(shù)能夠很好地解決分布式系統(tǒng)中節(jié)點(diǎn)宕機(jī)和傳輸錯誤的情況,但由于早期拜占庭系統(tǒng)算法具有指數(shù)級的復(fù)雜度,所以應(yīng)用范圍受限。直到1999年P(guān)BFT算法的提出,將算法復(fù)雜度降為多項(xiàng)式級別,拜占庭容錯技術(shù)才得到了廣泛的應(yīng)用。

在PBFT算法中,存在視圖(View)的概念,在每個視圖里,所有節(jié)點(diǎn)都在相同的配置下運(yùn)行,同時(shí)只有一個主節(jié)點(diǎn)而其他節(jié)點(diǎn)作為備份節(jié)點(diǎn)。主節(jié)點(diǎn)負(fù)責(zé)對客戶端的請求進(jìn)行排序,按順序發(fā)送給備份節(jié)點(diǎn),而備份節(jié)點(diǎn)會檢查主節(jié)點(diǎn)對請求的排序是否存在異常。如果出現(xiàn)異常,就會觸發(fā)視圖更換(View Change)機(jī)制,由下一編號的節(jié)點(diǎn)作為主節(jié)點(diǎn),進(jìn)入新的視圖。

PBFT算法執(zhí)行流程如圖1-5所示,服務(wù)器之間交換信息3次,整個過程包含5個階段。

圖1-5 PBFT算法執(zhí)行流程

(1)請求(Request):客戶端向主節(jié)點(diǎn)發(fā)送請求,請求信息格式為<REQUEST,O,T,C>,O為執(zhí)行的操作,T為本地時(shí)間,C為客戶端編號。

(2)預(yù)處理(Pre-Prepare):收到請求的主節(jié)點(diǎn)記錄請求信息并進(jìn)行編號,之后廣播一條Pre-Prepare信息給其他備份節(jié)點(diǎn)。Pre-Prepare信息格式為<PRE-PREPARE,V,N,D>,其中,V為請求所在的視圖,N為主節(jié)點(diǎn)給請求的編號,D為Digest編號。如果備份節(jié)點(diǎn)所在視圖與V相同,且從未接收到在同一視圖下的編號也是N但Digest編號不同的Pre-Prepare信息,則同意該信息,并進(jìn)入Prepare階段。

(3)處理(Prepare):進(jìn)入該階段的備份節(jié)點(diǎn)將廣播一條Prepare信息,并接收其他節(jié)點(diǎn)發(fā)送的Prepare信息。Prepare信息格式為<PREPARE,V,N,D,I>,其中I為備份節(jié)點(diǎn)的編號。如果節(jié)點(diǎn)接收到2F個(F為系統(tǒng)最大允許出錯的節(jié)點(diǎn)數(shù)量)Prepare信息且Prepare信息的V、N、D相同,則該節(jié)點(diǎn)進(jìn)入Commit階段。

(4)執(zhí)行(Commit):進(jìn)入該階段的備份節(jié)點(diǎn)將廣播一條Commit信息,同時(shí)接收其他節(jié)點(diǎn)發(fā)送的Commit信息。Commit信息格式為<COMMIT,V,N,I>,當(dāng)接收到2F+1個(包含自己)具有相同V和N的Commit信息后,節(jié)點(diǎn)等待其他低編號的請求執(zhí)行后即可執(zhí)行該條請求。

(5)答復(fù)(Reply):該節(jié)點(diǎn)對客戶端進(jìn)行答復(fù),答復(fù)信息格式為<REPLY,V,T,C,I,R>,V為請求所在的View,T為請求對應(yīng)的時(shí)間戳,I為答復(fù)節(jié)點(diǎn)編號,R為執(zhí)行的結(jié)果。客戶端收到F+1個節(jié)點(diǎn)的答復(fù),且請求對應(yīng)的時(shí)間戳和執(zhí)行結(jié)果都相同,則認(rèn)為請求已被系統(tǒng)記錄處理。如果因網(wǎng)絡(luò)延遲等原因客戶端未收到足夠答復(fù),則重復(fù)發(fā)送請求到服務(wù)器。如果請求已被執(zhí)行,則服務(wù)器只需重復(fù)發(fā)送答復(fù)信息。

此外,當(dāng)節(jié)點(diǎn)執(zhí)行完請求后,還需要進(jìn)行垃圾回收,把之前記錄的該請求的信息清除掉,否則會占用系統(tǒng)資源。但由于網(wǎng)絡(luò)延時(shí)等原因,不同的節(jié)點(diǎn)可能處于不同的狀態(tài),在清除記錄前需要在全網(wǎng)達(dá)成一致,因此PBFT算法中還設(shè)計(jì)了檢查點(diǎn)(Check Point)協(xié)議。

4.技術(shù)前沿探索

經(jīng)歷過2.0階段后,區(qū)塊鏈的應(yīng)用超越金融領(lǐng)域,涉及社會治理、智能化領(lǐng)域,包括物聯(lián)網(wǎng)、公益慈善、醫(yī)療、教育、審計(jì)、公證、司法仲裁等領(lǐng)域,應(yīng)用范圍擴(kuò)大到社會的方方面面。但隨著區(qū)塊鏈應(yīng)用范圍的不斷擴(kuò)展,商業(yè)需求對區(qū)塊鏈底層技術(shù)的要求也在不斷提升,2.0階段之后的區(qū)塊鏈技術(shù)開始探索如何提升鏈上性能、優(yōu)化鏈?zhǔn)浇Y(jié)構(gòu)、實(shí)現(xiàn)鏈跨鏈互操作等功能。

1)區(qū)塊鏈不可能三角

以太坊創(chuàng)始人Vitalik Buterin在Sharding FAQ提出區(qū)塊鏈的“不可能三角”模型,如圖1-6所示。在一個區(qū)塊鏈系統(tǒng)中,很難做到同時(shí)滿足分散性、高效性、安全性3個屬性的要求,其中高效性指的是鏈上交易處理效率,可以理解為每秒處理交易的筆數(shù)(TPS)。由于無法同時(shí)滿足這3個要求,區(qū)塊鏈的設(shè)計(jì)就只能從三者中選擇其二,如比特幣就是選擇部分犧牲高效性,而確保分散性和安全性。而聯(lián)盟區(qū)塊鏈實(shí)質(zhì)上是在確保安全性和高效性的基礎(chǔ)上進(jìn)行“部分中心化”或“多中心化”的妥協(xié)。面對這樣的技術(shù)瓶頸制約,區(qū)塊鏈技術(shù)的發(fā)展只能不斷思考如何權(quán)衡三者的關(guān)系。

圖1-6 區(qū)塊鏈“不可能三角”模型

2)有向無環(huán)圖

有向無環(huán)圖(Directed Acyclic Graph,DAG)是計(jì)算機(jī)領(lǐng)域的一種數(shù)據(jù)結(jié)構(gòu),其獨(dú)特的拓?fù)浣Y(jié)構(gòu)經(jīng)常被用于處理動態(tài)規(guī)劃、數(shù)據(jù)壓縮等多種算法場景。

由于區(qū)塊鏈傳統(tǒng)的單鏈?zhǔn)浇Y(jié)構(gòu)決定了打包出塊無法并發(fā)執(zhí)行,大大制約了交易處理的效率,故有人提出用DAG來存儲區(qū)塊鏈上的交易,將傳統(tǒng)的塊鏈?zhǔn)浇Y(jié)構(gòu)變?yōu)榫W(wǎng)狀拓?fù)浣Y(jié)構(gòu),進(jìn)而解決區(qū)塊鏈的效率問題。有學(xué)者指出相比傳統(tǒng)鏈?zhǔn)浇Y(jié)構(gòu)的區(qū)塊鏈,在區(qū)塊打包時(shí)間不變的情況下,DAG區(qū)塊鏈可以并行打包N個區(qū)塊,網(wǎng)絡(luò)中的交易量就可以容納N倍。DAG結(jié)構(gòu)示意如圖1-7所示。

圖1-7 DAG結(jié)構(gòu)示意

由計(jì)算機(jī)科學(xué)家雷蒙貝爾德開發(fā)的哈希樹(Hashgraph)方案就是采用DAG技術(shù)將交易以時(shí)序先后組織起來。DAG中的交易并不需要礦工來驗(yàn)證,并摒棄了傳統(tǒng)區(qū)塊鏈中的交易以區(qū)塊連接的形式,這意味著其比傳統(tǒng)結(jié)構(gòu)的區(qū)塊鏈的交易處理速度更快。

3)分片

在傳統(tǒng)區(qū)塊鏈中,通常在一段時(shí)間里只產(chǎn)生一個區(qū)塊,全網(wǎng)參與共識的節(jié)點(diǎn)將競爭唯一的記賬權(quán),或者針對一個新生成的區(qū)塊達(dá)成共識。為了尋求更高的可擴(kuò)展性,可以通過提高區(qū)塊生產(chǎn)速度或者增加區(qū)塊大小的方法來完成擴(kuò)容。然而,這兩種方式會帶來頻繁分叉或者網(wǎng)絡(luò)延遲的問題。分片技術(shù)則提供了另一種區(qū)塊鏈擴(kuò)容的解決思路,即通過改變網(wǎng)絡(luò)中驗(yàn)證區(qū)塊的方式來增加吞吐量。

區(qū)塊鏈中的分片技術(shù)是受傳統(tǒng)數(shù)據(jù)庫分片的啟發(fā),傳統(tǒng)數(shù)據(jù)庫分片指的是將數(shù)據(jù)分割為多個部分并分發(fā)至不同的服務(wù)器上。而在區(qū)塊鏈分片中,網(wǎng)絡(luò)中的節(jié)點(diǎn)將被劃分至不同片區(qū),網(wǎng)絡(luò)中的交易也將被分配到不同的片區(qū)中進(jìn)行處理。因此,原本區(qū)塊鏈中由共識節(jié)點(diǎn)處理全網(wǎng)所有交易的邏輯變成了每個節(jié)點(diǎn)只處理一小部分傳入交易,并且不同分片網(wǎng)絡(luò)中的節(jié)點(diǎn)將并行執(zhí)行。這種將網(wǎng)絡(luò)分片的方式使得在同一時(shí)間內(nèi)區(qū)塊鏈上可處理和驗(yàn)證的交易數(shù)量變多,從而達(dá)到擴(kuò)展區(qū)塊鏈吞吐量的目的。目前主流分片方式主要有3種:網(wǎng)絡(luò)分片(Network Sharding)、交易分片(Transaction Sharding)和狀態(tài)分片(State Sharding)。

4)跨鏈技術(shù)

如果說共識機(jī)制是區(qū)塊鏈的靈魂,那么跨鏈技術(shù)就是實(shí)現(xiàn)價(jià)值互聯(lián)網(wǎng)的橋梁,它是把聯(lián)盟鏈從分散的孤島中拯救出來的良藥。

跨鏈?zhǔn)亲寘^(qū)塊鏈上的數(shù)字資產(chǎn)、有價(jià)值的信息、服務(wù)、資源等“價(jià)值”跨過鏈與鏈之間的溝壑,進(jìn)行直接的流通。從本質(zhì)上來說,價(jià)值沒有辦法在兩條互不相關(guān)的區(qū)塊鏈間直接轉(zhuǎn)移,但是對于具體的某個用戶,用戶在一條區(qū)塊鏈上存儲的資產(chǎn),能夠以某種形式兌換成另一條鏈上的資產(chǎn),這就是價(jià)值的跨鏈;或者當(dāng)一條鏈能依據(jù)另一條鏈上的事務(wù)來觸發(fā)做出相關(guān)的反應(yīng)時(shí),就是信息的跨鏈。

目前主流的跨鏈技術(shù)包括:公證人機(jī)制(Notary Schemes)、側(cè)鏈/中繼方案(Sidechains/Relays)、哈希鎖定技術(shù)(Hash-Locking)、分布式私鑰控制。例如,公證人機(jī)制的主要思想是尋找一個兩條鏈共同信任的第三方來聲明在每條鏈上發(fā)生的特定交易。這個第三方即公證人,公證人可以是某一個組織,也可以是一條區(qū)塊鏈。相較于側(cè)鏈技術(shù),中繼技術(shù)適用范圍更廣,中繼鏈可以通過特定的協(xié)議,使參與到其中的所有區(qū)塊鏈都能夠互相操作,也就可以實(shí)現(xiàn)整個區(qū)塊鏈生態(tài)的跨鏈。

5)隱私保護(hù)

雖然區(qū)塊鏈多方記賬的技術(shù)原理使得賬本在多方之間公開透明,但是在區(qū)塊鏈上仍然要保護(hù)好流轉(zhuǎn)的用戶數(shù)據(jù)的安全與隱私。目前已有一些通過密碼學(xué)技術(shù)、安全多方計(jì)算、數(shù)據(jù)分區(qū)機(jī)制來保護(hù)用戶隱私安全的方案。這些技術(shù)可以用來保護(hù)數(shù)據(jù)隱私性、簽名者隱私性、地址隱私性等。然而,隱私安全的防范手段遠(yuǎn)不止于此,隨著密碼學(xué)與區(qū)塊鏈技術(shù)的高速發(fā)展,將會涌現(xiàn)出更多的新技術(shù)。同時(shí)也應(yīng)該意識到,任何單一技術(shù)都無法做到完全的保護(hù),需要將多種技術(shù)結(jié)合到一起才能對用戶隱私實(shí)施有效的保護(hù)。以下將以零知識證明為例介紹相關(guān)的區(qū)塊鏈隱私保護(hù)方法。

零知識證明(Zero-Knowledge Proof)是由S.Goldwasser、S.Micali及C.Rackoff在20世紀(jì)80年代初提出的,零知識證明指的是證明者能夠在不向驗(yàn)證者提供任何有效信息的情況下,使驗(yàn)證者相信某個論斷是正確的。早期零知識證明需要證明者與驗(yàn)證者通過交互消息的方式才能完成證明,這種證明過程被稱為“交互式零知識證明”。20世紀(jì)80年代末,Blum等人提出使用短隨機(jī)串交互過程實(shí)現(xiàn)零知識證明,只須由證明者發(fā)出一次消息,無須證明者與驗(yàn)證者交互,驗(yàn)證者就可以驗(yàn)證消息的正確性,該證明過程被稱為“非交互式零知識證明”。在區(qū)塊鏈系統(tǒng)中通常使用的是“非交互式零知識證明”。下面以兩個典型場景來說明“零知識證明”的意義。

(1)場景一:信箱問題

證明者向驗(yàn)證者表明自己是名郵遞員,并擁有信箱鑰匙。信箱只可以通過鑰匙打開,并不存在其他打開方式。驗(yàn)證者懷疑證明者沒有信箱鑰匙,此時(shí),證明者如何證明其擁有信箱鑰匙呢?當(dāng)驗(yàn)證者在場時(shí),證明者打開信箱鎖,證明其言論正確性,但此時(shí)驗(yàn)證者可以看到鑰匙形狀,鑰匙信息泄露。驗(yàn)證者將帶有自定義內(nèi)容的信件投遞到信箱,證明者單獨(dú)打開信箱,向驗(yàn)證者展示信件內(nèi)容,證明其擁有信箱鑰匙。該證明思路就屬于“零知識證明”。

(2)場景二:阿里巴巴與強(qiáng)盜問題。

一位名叫阿里巴巴的青年男子被強(qiáng)盜俘虜,強(qiáng)盜向他拷問打開山洞石門的咒語,如果阿里巴巴告訴強(qiáng)盜咒語,他將沒有利用價(jià)值而被殺死。如果阿里巴巴始終不說,強(qiáng)盜覺得阿里巴巴可能不知道咒語、沒有價(jià)值,阿里巴巴也將被殺死。怎樣做到讓強(qiáng)盜相信阿里巴巴知道咒語,卻又不告訴強(qiáng)盜呢?阿里巴巴想到一個好方法,強(qiáng)盜在距離阿里巴巴一定距離的地方拿著弓箭指著他,強(qiáng)盜舉起右手,阿里巴巴念咒語打開石門;強(qiáng)盜舉起左手,阿里巴巴念咒語關(guān)閉石門。強(qiáng)盜不停地隨機(jī)舉起左右手,阿里巴巴都能按照既定規(guī)則執(zhí)行,證明其擁有咒語。

根據(jù)以上實(shí)例總結(jié),“零知識證明”模型應(yīng)滿足以下條件。

(1)可靠性:證明者論斷是真實(shí)的,則驗(yàn)證者以大概率接受證明者論斷;證明者論斷是虛假的,則驗(yàn)證者以大概率拒絕證明者論斷。

(2)零知識性:證明者向驗(yàn)證者證明其論斷的正確性,但并未向證明者透露其他有用信息。

零知識證明經(jīng)過學(xué)者們?nèi)嗄甑奶剿骱脱芯浚〉昧嗽S多重要的成果。目前,已經(jīng)有很多基于RSA或DSA數(shù)字簽名實(shí)現(xiàn)的零知識證明方案。零知識證明技術(shù)主要用于隱私保護(hù)場景,在許多行業(yè)中都有廣泛應(yīng)用。例如,在身份識別領(lǐng)域已有Fiat-Shamir身份識別、Schnorr身份識別、Guillou-Quisquater身份識別等零知識證明方案。

主站蜘蛛池模板: 靖安县| 哈巴河县| 景德镇市| 龙口市| 封丘县| 永州市| 商丘市| 江阴市| 鹿泉市| 威远县| 垦利县| 沭阳县| 永修县| 威宁| 大邑县| 高平市| 恩平市| 方山县| 南江县| 金昌市| 综艺| 余庆县| 枣阳市| 洪湖市| 故城县| 延吉市| 湖州市| 承德市| 左权县| 张家川| 遵化市| 金塔县| 阿克苏市| 大洼县| 丰镇市| 金昌市| 苍溪县| 久治县| 简阳市| 安福县| 凤城市|