- 區塊鏈+金融:數字金融新引擎
- 姜才康 李正主編
- 8000字
- 2021-02-22 16:03:01
第一部分 基本原理與關鍵技術
第1章 區塊鏈的基礎原理與技術
1.1 區塊鏈的誕生與發展歷程
區塊鏈作為支撐數字經濟發展的關鍵技術之一,得到了國家政策的支持。早在2016年12月,《“十三五”國家信息化規劃》就將區塊鏈定為戰略性前沿技術之一。2019年10月24日,習近平總書記在主持中央政治局第十八次集體學習時強調,“區塊鏈技術的集成應用在新的技術革新和產業變革中起著重要作用。我們要把區塊鏈作為核心技術自主創新的重要突破口,明確主攻方向,加大投入力度,著力攻克一批關鍵核心技術,加快推動區塊鏈技術和產業創新發展”。
區塊鏈(Blockchain)也可以稱為分布式賬本技術(Distributed Ledger Technology,DLT),其主要利用分布式節點共識機制來生成和更新數據,利用密碼學的方式保證數據傳輸和訪問的安全,利用由自動化腳本代碼組成的智能合約來編程和操作數據,具有分布式存儲、防偽造、防篡改、透明可靠等特征。
作為一種融合了密碼學、博弈論、網絡通信等多種科學技術的集合創新技術,區塊鏈具有多個層面的價值。從技術層面來說,通過構建P2P自組織網絡、時間有序難篡改的密碼學共享賬本、分布式共識機制,從而在技術層面實現多中心的信任。從經濟學層面來說,區塊鏈天然的弱中心、分布式的特點能夠帶來一種新的價值傳遞方式,使交易雙方可以通過區塊鏈的技術背書實現點對點的價值交換,大幅簡化中間環節。從社會治理層面來說,區塊鏈可以實現數據和價值跨平臺、地域、系統、部門、業務、國境的有序流通和共享,也可以支撐有效的協同管理和服務。作為推動供給側改革的利器之一,這一技術的推廣應用將創造出全新的商業模式和服務模式,有望構建新型的產業協作方式,提高協同流通的效率,加速社會數字化進程。
1.1.1 區塊鏈的誕生
20世紀80年代,密碼朋克(Cypherpunk)就有了加密支付工具的最初設想。蒂莫·西梅(Timothy May)提出了不可追蹤的電子支付工具——加密信用(Crypto Credits),用于獎勵那些致力于保護公民隱私的黑客們;1990年,大衛·喬姆(David Chaum)提出以盲簽名技術為基礎的、注重隱私安全的、不可追蹤的密碼學網絡支付系統——Ecash;1998年,戴偉(Dai Wei)提出了匿名的、分布式的電子支付系統——B-Money;2005年,尼克·薩博(Nick Szabo)提出了比特金(Bitgold)的設想。但由于當時消費者對互聯網上的隱私和安全問題并不十分重視,這些早期基于密碼學的支付工具的嘗試無一例外都失敗了。
2008年,全球金融危機的爆發進一步推動了分布式、點對點支付工具的研發和實驗。2008年10月31日,中本聰在一個隱秘密碼學討論小組中第一次發布比特幣白皮書Bitcoin:A Peer-to-Peer Electronic Cash System(《比特幣:一個點對點的電子現金系統》),描述了如何建立一套全新的、無中心化運營的點到點交易系統,而區塊鏈是實現比特幣的支撐技術。有別于傳統的集中式記賬技術,比特幣網絡的運行不需要任何中心化的支持機構參與,而是通過區塊鏈中點對點通信和透明可信的規則,構建難偽造、難篡改和可追溯的塊鏈式數據結構,分散式地管理事務處理。其數據信息存儲在區塊中,通過邏輯上的鏈接形成一條帶有時序性的鏈型結構,通過使用數字簽名與完整性校驗保證區塊中數據的真實性和完整性。
2009年1月3日,比特幣系統正式開始運行,中本聰成功地從創世塊中挖出第一批比特幣(合計50枚),比特幣也成為第一個基于區塊鏈技術的應用。2010年,比特幣交易所誕生,5月22日有人用10000個比特幣購買了兩個比薩,這是第一次有人用比特幣購買實物的交易,自此比特幣在極為小眾的群體中流通起來,區塊鏈作為支撐比特幣系統運行的底層技術,也開始進入公眾的視野。
1.1.2 區塊鏈技術演進
一種技術的發展必然要經過不斷的更新迭代,區塊鏈技術發展至今可以說經歷了3個階段:技術起源、區塊鏈1.0,區塊鏈2.0(見圖1-1),本節將主要介紹這3個階段和區塊鏈演進過程中的技術探索。

圖1-1 區塊鏈的技術演進
1.技術起源階段
1)P2P(Peer to Peer)網絡
P2P網絡技術又稱對等互聯網技術或點對點通信技術,是相對于中心化網絡而言的,是一種分散式地連接各對等節點的組網技術。P2P網絡是區塊鏈技術的底層網絡基礎,與中心化網絡中心服務器服務全網的模式顯然不同的是,在P2P網絡中各個計算機節點具有相等的地位,節點間通過特定的網絡協議進行信息或資源的交互,如圖1-2所示。

圖1-2 網絡模式
2)非對稱加密
非對稱加密算法是利用一對密鑰對來進行信息加解密的算法,這對密鑰指的是公有密鑰(Public Key)和私有密鑰(Private Key),又稱為公鑰和私鑰。常用的非對稱加密算法有RSA、ECC等。非對稱加密算法解密過程如圖1-3所示。區塊鏈中通常使用非對稱加密的公私鑰來構建對等節點間的保密通信,保證消息的可信及可驗證性。

圖1-3 非對稱加密算法解密過程
3)分布式數據庫
分布式數據庫本質上是一種物理上分散但邏輯上集中的數據管理系統,其所管理的數據分散在各個物理節點上。從邏輯上來說,這些數據屬于同一個系統,數據屬于一個組織實體,但從物理上來看卻可能分散在計算機網絡的若干站點上。由此看來,分布式數據庫有兩個重要特點:分布性和邏輯相關性。借助分布式數據庫的思想,區塊鏈擴大分布式的范圍,將數據由一個實體管理擴展為由多個實體共同存儲與維護。
2.區塊鏈1.0
2009年1月,比特幣的正式上線運行標志著區塊鏈進入1.0階段,依賴區塊鏈技術和激勵機制的設計,比特幣在完全分布式環境、無單一運維管理主體的情況下成功運行了十年多。
區塊鏈在1.0階段的基本技術組成如下。
1)分布式共享賬本(Distributed Shared Ledger)
分布式共享賬本指的是將賬本分布式地存儲在很多不同的服務器上,不論這些服務器身處何處,都能準確、及時地記錄全網發生的每一筆交易,同時通過網絡通信方式使得每個服務器上存儲的賬本都保持一致。這是一種不需要被任何中心化主體存儲或確認的數據記錄方式,在同一個網絡里的所有參與者都可以獲得一個唯一、真實賬本的副本。由于賬本是全網同步的,通過各賬本的數據同步與交叉驗證,任意一個肆意篡改的賬本都會被識別出來。
2)塊鏈式數據結構
塊鏈式數據結構是比特幣底層區塊鏈中數據存儲的結構,如圖1-4所示。在比特幣與其他后續發展的區塊鏈中,記錄在區塊鏈中的最小事務單位是“交易”(Transaction),交易代表著用戶在鏈上發起的轉賬、支付、兌換等金融活動。區塊是由特定的節點將一筆或者多筆交易打包形成的一個交易集合,其存儲結構分為區塊頭和區塊體兩部分。其中,區塊體包含這個區塊的所有交易,以默克爾樹(MerkleTrees)的形式組織存儲,區塊頭包含父區塊哈希值、版本號、時間戳、生成區塊的難度、隨機數和交易體組成默克爾樹根的默克爾根值(Merkle Root)。由于區塊頭中包含前一區塊經過哈希加密算法處理所得的哈希值,邏輯上形成了首尾鏈接的塊鏈式存儲結構。

圖1-4 塊鏈式數據結構
在區塊鏈技術體系中,哈希加密算法的運用發揮著重要作用。哈希加密算法具有顯著的單向性與碰撞約束,使其加密后的信息很容易被驗證但很難還原。此外,哈希加密算法的一個重要特征是只要輸入的字符串發生一絲一毫的變化,其輸出的哈希值將會顯著不同。基于哈希加密算法的這一顯著特性,以及塊鏈式存儲結構,攻擊者需要花費巨大的代價才能篡改歷史區塊中的交易信息。因為一旦篡改某個歷史區塊中的交易信息,該區塊的哈希值就將發生變化,進而引起該區塊之后所有區塊的哈希值變化,攻擊者必須將該區塊連同之后的所有區塊的哈希值重構才可以完成交易修改。
3)默克爾樹
默克爾樹是區塊鏈的基本組成部分之一,以比特幣為例,區塊頭中的默克爾樹根是由區塊體中存儲的一筆筆交易不斷重復兩兩哈希過程而得到的唯一哈希值。
默克爾樹以其發明者拉爾夫默克爾(Ralph Merkle)的名字命名,它是哈希大量聚集數據“塊”的一種方式。在區塊鏈中交易就是數據“塊”,構成默克爾樹的葉子節點。如圖1-4所示,筆者將這些塊從下至上依次兩兩分組,為每組建立一個包含每個塊哈希指針的新的數據結構,直到得到一個單一的哈希指針,即根哈希(Root Hash)。在這樣的機制下可以從根哈希指針回溯到任意數據塊,最終能保證原始交易未經篡改。因為一旦攻擊者篡改了樹底部的一些數據塊,會導致上一層的哈希指針不匹配,從而使得任何篡改行為都會被檢測到。
4)工作量證明機制(Proof of Work)
共識機制描述的是系統中各節點參與決策達成一致的過程。在區塊鏈這樣一個分布式的系統中,需要在互不信任的節點間建立一套信任機制,才能完成對每筆交易的驗證與確認,通過技術背書在機器間建立“自信任”的網絡。
工作量證明機制是區塊鏈1.0階段中比特幣的共識機制。比特幣有兩種不同的獎勵機制來鼓勵節點進行記賬工作。一種是區塊獎勵,即所謂的“挖礦”,創建區塊的記賬節點都可以在這個區塊里加入一筆特別的交易,這筆交易就是一個造幣的交易,形成這個區塊的節點可以獲得這筆收益;另一種是交易費,即比特幣交易的一部分支付給記賬節點作為記賬報酬。由于比特幣獲得一些國家和商業機構的價值認可,其獎勵機制的設計使得運維比特幣系統的所有的記賬節點都有動力誠實地記賬,并維持系統的正常運行。
3.區塊鏈2.0
為解決區塊鏈1.0階段應用開發局限、吞吐量性能較低、能量消耗大的問題,區塊鏈的技術架構在進一步地調整與改進,2015年7月以太坊的問世,標志著區塊鏈進入2.0階段。以太坊引入智能合約的概念,支持圖靈完備的編程語言Solidity來編寫智能合約及分布式應用,有了智能合約系統的支撐,區塊鏈的觸角開始從單一的記賬領域延伸到涉及合約功能的其他金融、政務、民生等諸多領域。另外,IBM超級賬本項目——Hyperledger Fabric聯盟鏈的誕生,使得區塊鏈的應用進一步擴展到對監管合規性、數據安全、性能等要求更高的場景中,技術賦能的業務領域逐漸擴大。
區塊鏈2.0時代主要有以下幾個典型特征。
1)智能合約
智能合約的引入擴展了區塊鏈的編程能力,是區塊鏈2.0的一個典型特征。1995年,跨領域法律學者尼克·薩博(Nick Szabo)提出了“智能合約”(Smart Contract)的概念,即“一個智能合約是一套以數字形式定義的承諾(Commitment),包括合約參與方可以在上面執行這些承諾的協議”。智能合約允許在沒有第三方參與的情況下,實現雙方或多方的可信交易。但由于早期缺少可信的分布式執行環境,智能合約并沒有實際落地。直到比特幣的誕生,人們意識到區塊鏈能夠與智能合約相結合,達到相輔相成的效果。從以太坊開始,智能合約已成為區塊鏈上的一種計算機程序,當合約中的條件得到滿足時,便會自動觸發執行合約內容。
2)共識機制
隨著區塊鏈應用場景的豐富,適用于不同場景的共識機制也相繼誕生。例如,聯盟鏈常用的拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)算法、公鏈常用的股份授權證明(Delegated Proof of Stake,DPOS)等。
拜占庭容錯技術能夠很好地解決分布式系統中節點宕機和傳輸錯誤的情況,但由于早期拜占庭系統算法具有指數級的復雜度,所以應用范圍受限。直到1999年PBFT算法的提出,將算法復雜度降為多項式級別,拜占庭容錯技術才得到了廣泛的應用。
在PBFT算法中,存在視圖(View)的概念,在每個視圖里,所有節點都在相同的配置下運行,同時只有一個主節點而其他節點作為備份節點。主節點負責對客戶端的請求進行排序,按順序發送給備份節點,而備份節點會檢查主節點對請求的排序是否存在異常。如果出現異常,就會觸發視圖更換(View Change)機制,由下一編號的節點作為主節點,進入新的視圖。
PBFT算法執行流程如圖1-5所示,服務器之間交換信息3次,整個過程包含5個階段。

圖1-5 PBFT算法執行流程
(1)請求(Request):客戶端向主節點發送請求,請求信息格式為<REQUEST,O,T,C>,O為執行的操作,T為本地時間,C為客戶端編號。
(2)預處理(Pre-Prepare):收到請求的主節點記錄請求信息并進行編號,之后廣播一條Pre-Prepare信息給其他備份節點。Pre-Prepare信息格式為<PRE-PREPARE,V,N,D>,其中,V為請求所在的視圖,N為主節點給請求的編號,D為Digest編號。如果備份節點所在視圖與V相同,且從未接收到在同一視圖下的編號也是N但Digest編號不同的Pre-Prepare信息,則同意該信息,并進入Prepare階段。
(3)處理(Prepare):進入該階段的備份節點將廣播一條Prepare信息,并接收其他節點發送的Prepare信息。Prepare信息格式為<PREPARE,V,N,D,I>,其中I為備份節點的編號。如果節點接收到2F個(F為系統最大允許出錯的節點數量)Prepare信息且Prepare信息的V、N、D相同,則該節點進入Commit階段。
(4)執行(Commit):進入該階段的備份節點將廣播一條Commit信息,同時接收其他節點發送的Commit信息。Commit信息格式為<COMMIT,V,N,I>,當接收到2F+1個(包含自己)具有相同V和N的Commit信息后,節點等待其他低編號的請求執行后即可執行該條請求。
(5)答復(Reply):該節點對客戶端進行答復,答復信息格式為<REPLY,V,T,C,I,R>,V為請求所在的View,T為請求對應的時間戳,I為答復節點編號,R為執行的結果。客戶端收到F+1個節點的答復,且請求對應的時間戳和執行結果都相同,則認為請求已被系統記錄處理。如果因網絡延遲等原因客戶端未收到足夠答復,則重復發送請求到服務器。如果請求已被執行,則服務器只需重復發送答復信息。
此外,當節點執行完請求后,還需要進行垃圾回收,把之前記錄的該請求的信息清除掉,否則會占用系統資源。但由于網絡延時等原因,不同的節點可能處于不同的狀態,在清除記錄前需要在全網達成一致,因此PBFT算法中還設計了檢查點(Check Point)協議。
4.技術前沿探索
經歷過2.0階段后,區塊鏈的應用超越金融領域,涉及社會治理、智能化領域,包括物聯網、公益慈善、醫療、教育、審計、公證、司法仲裁等領域,應用范圍擴大到社會的方方面面。但隨著區塊鏈應用范圍的不斷擴展,商業需求對區塊鏈底層技術的要求也在不斷提升,2.0階段之后的區塊鏈技術開始探索如何提升鏈上性能、優化鏈式結構、實現鏈跨鏈互操作等功能。
1)區塊鏈不可能三角
以太坊創始人Vitalik Buterin在Sharding FAQ提出區塊鏈的“不可能三角”模型,如圖1-6所示。在一個區塊鏈系統中,很難做到同時滿足分散性、高效性、安全性3個屬性的要求,其中高效性指的是鏈上交易處理效率,可以理解為每秒處理交易的筆數(TPS)。由于無法同時滿足這3個要求,區塊鏈的設計就只能從三者中選擇其二,如比特幣就是選擇部分犧牲高效性,而確保分散性和安全性。而聯盟區塊鏈實質上是在確保安全性和高效性的基礎上進行“部分中心化”或“多中心化”的妥協。面對這樣的技術瓶頸制約,區塊鏈技術的發展只能不斷思考如何權衡三者的關系。

圖1-6 區塊鏈“不可能三角”模型
2)有向無環圖
有向無環圖(Directed Acyclic Graph,DAG)是計算機領域的一種數據結構,其獨特的拓撲結構經常被用于處理動態規劃、數據壓縮等多種算法場景。
由于區塊鏈傳統的單鏈式結構決定了打包出塊無法并發執行,大大制約了交易處理的效率,故有人提出用DAG來存儲區塊鏈上的交易,將傳統的塊鏈式結構變為網狀拓撲結構,進而解決區塊鏈的效率問題。有學者指出相比傳統鏈式結構的區塊鏈,在區塊打包時間不變的情況下,DAG區塊鏈可以并行打包N個區塊,網絡中的交易量就可以容納N倍。DAG結構示意如圖1-7所示。

圖1-7 DAG結構示意
由計算機科學家雷蒙貝爾德開發的哈希樹(Hashgraph)方案就是采用DAG技術將交易以時序先后組織起來。DAG中的交易并不需要礦工來驗證,并摒棄了傳統區塊鏈中的交易以區塊連接的形式,這意味著其比傳統結構的區塊鏈的交易處理速度更快。
3)分片
在傳統區塊鏈中,通常在一段時間里只產生一個區塊,全網參與共識的節點將競爭唯一的記賬權,或者針對一個新生成的區塊達成共識。為了尋求更高的可擴展性,可以通過提高區塊生產速度或者增加區塊大小的方法來完成擴容。然而,這兩種方式會帶來頻繁分叉或者網絡延遲的問題。分片技術則提供了另一種區塊鏈擴容的解決思路,即通過改變網絡中驗證區塊的方式來增加吞吐量。
區塊鏈中的分片技術是受傳統數據庫分片的啟發,傳統數據庫分片指的是將數據分割為多個部分并分發至不同的服務器上。而在區塊鏈分片中,網絡中的節點將被劃分至不同片區,網絡中的交易也將被分配到不同的片區中進行處理。因此,原本區塊鏈中由共識節點處理全網所有交易的邏輯變成了每個節點只處理一小部分傳入交易,并且不同分片網絡中的節點將并行執行。這種將網絡分片的方式使得在同一時間內區塊鏈上可處理和驗證的交易數量變多,從而達到擴展區塊鏈吞吐量的目的。目前主流分片方式主要有3種:網絡分片(Network Sharding)、交易分片(Transaction Sharding)和狀態分片(State Sharding)。
4)跨鏈技術
如果說共識機制是區塊鏈的靈魂,那么跨鏈技術就是實現價值互聯網的橋梁,它是把聯盟鏈從分散的孤島中拯救出來的良藥。
跨鏈是讓區塊鏈上的數字資產、有價值的信息、服務、資源等“價值”跨過鏈與鏈之間的溝壑,進行直接的流通。從本質上來說,價值沒有辦法在兩條互不相關的區塊鏈間直接轉移,但是對于具體的某個用戶,用戶在一條區塊鏈上存儲的資產,能夠以某種形式兌換成另一條鏈上的資產,這就是價值的跨鏈;或者當一條鏈能依據另一條鏈上的事務來觸發做出相關的反應時,就是信息的跨鏈。
目前主流的跨鏈技術包括:公證人機制(Notary Schemes)、側鏈/中繼方案(Sidechains/Relays)、哈希鎖定技術(Hash-Locking)、分布式私鑰控制。例如,公證人機制的主要思想是尋找一個兩條鏈共同信任的第三方來聲明在每條鏈上發生的特定交易。這個第三方即公證人,公證人可以是某一個組織,也可以是一條區塊鏈。相較于側鏈技術,中繼技術適用范圍更廣,中繼鏈可以通過特定的協議,使參與到其中的所有區塊鏈都能夠互相操作,也就可以實現整個區塊鏈生態的跨鏈。
5)隱私保護
雖然區塊鏈多方記賬的技術原理使得賬本在多方之間公開透明,但是在區塊鏈上仍然要保護好流轉的用戶數據的安全與隱私。目前已有一些通過密碼學技術、安全多方計算、數據分區機制來保護用戶隱私安全的方案。這些技術可以用來保護數據隱私性、簽名者隱私性、地址隱私性等。然而,隱私安全的防范手段遠不止于此,隨著密碼學與區塊鏈技術的高速發展,將會涌現出更多的新技術。同時也應該意識到,任何單一技術都無法做到完全的保護,需要將多種技術結合到一起才能對用戶隱私實施有效的保護。以下將以零知識證明為例介紹相關的區塊鏈隱私保護方法。
零知識證明(Zero-Knowledge Proof)是由S.Goldwasser、S.Micali及C.Rackoff在20世紀80年代初提出的,零知識證明指的是證明者能夠在不向驗證者提供任何有效信息的情況下,使驗證者相信某個論斷是正確的。早期零知識證明需要證明者與驗證者通過交互消息的方式才能完成證明,這種證明過程被稱為“交互式零知識證明”。20世紀80年代末,Blum等人提出使用短隨機串交互過程實現零知識證明,只須由證明者發出一次消息,無須證明者與驗證者交互,驗證者就可以驗證消息的正確性,該證明過程被稱為“非交互式零知識證明”。在區塊鏈系統中通常使用的是“非交互式零知識證明”。下面以兩個典型場景來說明“零知識證明”的意義。
(1)場景一:信箱問題
證明者向驗證者表明自己是名郵遞員,并擁有信箱鑰匙。信箱只可以通過鑰匙打開,并不存在其他打開方式。驗證者懷疑證明者沒有信箱鑰匙,此時,證明者如何證明其擁有信箱鑰匙呢?當驗證者在場時,證明者打開信箱鎖,證明其言論正確性,但此時驗證者可以看到鑰匙形狀,鑰匙信息泄露。驗證者將帶有自定義內容的信件投遞到信箱,證明者單獨打開信箱,向驗證者展示信件內容,證明其擁有信箱鑰匙。該證明思路就屬于“零知識證明”。
(2)場景二:阿里巴巴與強盜問題。
一位名叫阿里巴巴的青年男子被強盜俘虜,強盜向他拷問打開山洞石門的咒語,如果阿里巴巴告訴強盜咒語,他將沒有利用價值而被殺死。如果阿里巴巴始終不說,強盜覺得阿里巴巴可能不知道咒語、沒有價值,阿里巴巴也將被殺死。怎樣做到讓強盜相信阿里巴巴知道咒語,卻又不告訴強盜呢?阿里巴巴想到一個好方法,強盜在距離阿里巴巴一定距離的地方拿著弓箭指著他,強盜舉起右手,阿里巴巴念咒語打開石門;強盜舉起左手,阿里巴巴念咒語關閉石門。強盜不停地隨機舉起左右手,阿里巴巴都能按照既定規則執行,證明其擁有咒語。
根據以上實例總結,“零知識證明”模型應滿足以下條件。
(1)可靠性:證明者論斷是真實的,則驗證者以大概率接受證明者論斷;證明者論斷是虛假的,則驗證者以大概率拒絕證明者論斷。
(2)零知識性:證明者向驗證者證明其論斷的正確性,但并未向證明者透露其他有用信息。
零知識證明經過學者們三十多年的探索和研究,取得了許多重要的成果。目前,已經有很多基于RSA或DSA數字簽名實現的零知識證明方案。零知識證明技術主要用于隱私保護場景,在許多行業中都有廣泛應用。例如,在身份識別領域已有Fiat-Shamir身份識別、Schnorr身份識別、Guillou-Quisquater身份識別等零知識證明方案。