◆宋伻陽 徐海水
(廣東工業(yè)大學計算機學院 廣東 510006)
隨著移動互聯(lián)網(wǎng)時代的到來,用戶數(shù)據(jù)呈爆炸式增長,在此期間互聯(lián)網(wǎng)企業(yè)也積累了大量的用戶數(shù)據(jù),這些企業(yè)在利用這些數(shù)據(jù)為用戶提供服務的同時,用戶也面臨著個人隱私泄露的風險,企業(yè)也形成了相對于用戶的“數(shù)據(jù)霸權”;另一方面,在金融危機爆發(fā)之后,人們看到了一些國家應對危機的無力以及濫發(fā)貨幣對人民財產造成的損失,中本聰提出的名為比特幣的電子貨幣以及背后的區(qū)塊鏈技術應運而生。
在2018年5月發(fā)布的《2018年中國區(qū)塊鏈產業(yè)白皮書》中提出,區(qū)塊鏈技術正在推動新一輪的商業(yè)模式變革,成為誠信社會體系的重要支撐,并且在我國的《“十三五”國家信息化規(guī)劃》中把區(qū)塊鏈作為一項重點前沿技術,明確提出需加強區(qū)塊鏈等新技術的創(chuàng)新、試驗和應用,以實現(xiàn)搶占新一代信息技術的主導權。從原來的單一的金融領域區(qū)塊鏈的應用研究,到現(xiàn)在與大數(shù)據(jù),物聯(lián)網(wǎng)相結合的區(qū)塊鏈研究,可見區(qū)塊鏈技術受到國家、社會、以及廣泛科研人員的關注。
本文針對區(qū)塊鏈原理、關鍵技術、研究現(xiàn)狀以及應用特點進行了詳細的介紹。
區(qū)塊鏈一詞源于中本聰?shù)恼撐摹禕itcoin:A Peer-to-Peer Electronic Cash System》。這篇論文提出了一種可信的、去中心化的電子貨幣系統(tǒng),也就是我們熟知的比特幣,而區(qū)塊鏈技術正是此系統(tǒng)的核心技術。比特幣能夠在沒有可信第三方的條件下,沒有信任基礎的雙方可以安全地在比特幣網(wǎng)絡中使用比特幣進行交易。區(qū)塊鏈的定義可以分為兩個角度:從數(shù)據(jù)存儲的角度來看,區(qū)塊鏈可以理解為一種分布式的、去信任的賬本數(shù)據(jù)庫;從數(shù)據(jù)結構的方向來研究,可以認為區(qū)塊鏈是一種基于時間戳的塊鏈結構。
基于區(qū)塊鏈的定義,其特點有以下三點:
(1)去中心化:節(jié)點之間通信無須通過中心節(jié)點,并且每個節(jié)點存儲并轉發(fā)信息到其他節(jié)點,并且任一節(jié)點停止工作都不會影響系統(tǒng)工作。
(2)去信任:系統(tǒng)中所有節(jié)點之間無須信任也可以進行交易,因為數(shù)據(jù)庫和整個系統(tǒng)的運作是公開透明的,在系統(tǒng)的規(guī)則和時間范圍內,節(jié)點之間無法欺騙彼此。
(3)信息不可篡改:系統(tǒng)中每一個節(jié)點都擁有最新的完整數(shù)據(jù)庫拷貝,修改單個節(jié)點的數(shù)據(jù)庫是無效的,因為系統(tǒng)會自動比較,認為最多次出現(xiàn)的相同數(shù)據(jù)記錄為真。
(1)以太坊
以太坊是一個開源的,并且提供智能合約功能的公共區(qū)塊鏈平臺。通過使用其電子貨幣以太幣,在以太虛擬機上處理點對點合約。以太坊于2013年到2014年間由程序員Vitalik Buterin受比特幣啟發(fā)后提出。其最突出的特點就是它提供了一種圖靈完備的語言solidity,可以使得以太坊輕松構建去中心化的應用。
(2)Hyperledger Fabric
Hyperledger是一個 Linux基礎項目,為企業(yè)開發(fā)區(qū)塊鏈技術,僅支持注冊會員使用。Hyperledger是一項開源協(xié)作,旨在推動跨行業(yè)的區(qū)塊鏈技術。這是由 Linux基金會主辦的全球合作,其中包括金融、銀行、物聯(lián)網(wǎng)、供應鏈、制造和技術領域的領導者。Hyperledger Fabric是一個分布式賬本平臺方案,也是目前在Hyperledger項目下孵化的多個項目之一,主要用于運行智能合約,利用可靠的技術以及可插拔方式實現(xiàn)各種商業(yè)應用場景的模塊化架構。目前最新版本為fabric 1.3。Fabric在1.0版本之后引入了通道的概念。在Fabric中,通過channel,即通道隔離數(shù)據(jù),只有在這個通道的節(jié)點才能共享賬本,通道外的節(jié)點不能訪問該通道賬本。通過建立不同的通道,可實現(xiàn)按需共享的目的。更符合現(xiàn)實生活的商業(yè)場景。表1為區(qū)塊鏈分類對比。
表1 區(qū)塊鏈分類對比
區(qū)塊鏈根據(jù)準入機制和節(jié)點開放程度可以分成三類:公有鏈、聯(lián)盟鏈、私有鏈。
( 1 )公有鏈
任何節(jié)點都可以加入?yún)^(qū)塊鏈網(wǎng)絡,并且可以讀取、發(fā)送交易,同時參與共識過程。公有鏈是完全去中心化的網(wǎng)絡。但是公有鏈共識速度慢,目前應用局限于虛擬貨幣。典型的公有鏈有比特幣、以太坊。
( 2 )聯(lián)盟鏈
節(jié)點加入網(wǎng)絡需通過授權,根據(jù)權限不同查看信息。記賬節(jié)點為多個預選節(jié)點并且存在一個或者多個信任第三方機構為其背書。聯(lián)盟鏈是部分去中心化的網(wǎng)絡,且適合于機構間的交易、結算等B2B場景,因此金融行業(yè)應用最廣泛。其中最知名的就是Hyperledger fabric、R3區(qū)塊鏈聯(lián)盟。
( 3 )私有鏈
只對個別實體或個人開放,去中心化程度不高,但共識速度快,常用于企業(yè)內部的數(shù)據(jù)庫管理、審計等,政府的預算和執(zhí)行,或者政府的行業(yè)統(tǒng)計數(shù)據(jù)等。北航鏈就是典型的私有鏈。
(1)塊鏈結構
區(qū)塊是固定時間段內區(qū)塊鏈網(wǎng)絡打包的所有信息。鏈上的每個區(qū)塊包含區(qū)塊頭和區(qū)塊體兩部分,區(qū)塊頭中包括當版本號、前一區(qū)塊哈希值、Merkle樹的根值、難度值、隨機數(shù)。具體的字段描述如表2所示。區(qū)塊體中則封裝了在一段時間內的所有交易數(shù)據(jù),這些交易數(shù)據(jù)通過 Merkle樹的結構進行組織,具體形式參見圖1。
表2 區(qū)塊字段詳述
哈希運算后的值HashMer kleRoot 全部交易所構成的32字節(jié)Merkle樹根第三部分:區(qū)塊體魔法數(shù) 比特幣客戶端解析數(shù)據(jù)的識別碼,一般用來區(qū)分幣種4字節(jié)交易數(shù)量 十分鐘交易總數(shù) 1-9字節(jié)交易記錄 交易詳情里包含著所有筆交易的詳情信息,以一條一條記錄的方式記載,采用的數(shù)據(jù)結構是哈希樹(默克爾樹);詳細記載了比特幣的交易記錄和相關細節(jié)不定
(2)Merkle樹
Merkle樹由Ralph Merkle提出,它利用數(shù)據(jù)哈希構造了一種遞歸的樹形結構。在比特幣中,每筆交易通過哈希運算轉換成哈希值,作為Merkle樹的葉子節(jié)點,而Merkle 樹的雙親節(jié)點則由其兩個或多個孩子節(jié)點的哈希值合并之后哈希得到。
非對稱加密:即加密過程與解密過程采用不同的密鑰。加密效率相對于對稱加密算法來說效率較低,但是它的安全性更好。非對稱加密技術在區(qū)塊鏈中有兩種用途:一是數(shù)據(jù)加密, 二是數(shù)字簽名。數(shù)據(jù)加密是指將信息發(fā)送者采用信息接收者的公鑰對待發(fā)送的信息進行加密后發(fā)送給接收者, 接收者采用自己對應的私鑰對加密信息解密,這也是比特幣的交易加密。對于比特幣的數(shù)字簽名,每一位比特幣通過對前一次交易和下一位擁有者的公鑰簽署一個隨機散列的數(shù)字簽名,并將這個簽名附加在這枚電子貨幣的末尾,電子貨幣就發(fā)送給了下一位所有者。而收款人通過對簽名進行檢驗。
圖1 區(qū)塊鏈結構
哈希函數(shù):又稱散列函數(shù),是對不定長的輸入產生輸出的一種特殊函數(shù):h=H(M),其中 M 是變長的消息,h=H(M)是定長的散列值。散列函數(shù)H是公開的,散列值在信源處被附加在消息上,接收方通過重新計算散列值來確認消息未被篡改。哈希函數(shù)通常滿足不可逆、抗碰撞、雪崩效應等特性。常見的哈希函數(shù)有MD4、MD5、SHA-0、SHA-1、SHA-2、SHA-3。在比特幣中使用SHA256和RIPEMD160將公鑰轉化為錢包地址。
點對點網(wǎng)絡又稱P2P網(wǎng)絡,它不同于傳統(tǒng)的C/S結構,P2P網(wǎng)絡中每個節(jié)點同時具備客戶端與服務端功能節(jié)點間的通信。P2P網(wǎng)絡根據(jù)可以分為三種網(wǎng)絡模型:集中式、純分布式、分層式模型,其中純分布式模型又可以分為結構化和非結構化模型。比特幣使用非結構化的gossip協(xié)議作為比特幣的網(wǎng)絡協(xié)議,其過程由種子節(jié)點開始,將自己需要更新的狀態(tài)隨機發(fā)送給固定數(shù)量的節(jié)點,但該節(jié)點要保證未收到過此消息,收到消息的節(jié)點也會重復該過程,直到所有節(jié)點都收到消息。在比特幣網(wǎng)絡中,節(jié)點主要有四大功能:錢包、挖礦、區(qū)塊鏈數(shù)據(jù)庫、網(wǎng)絡路由。根據(jù)包含功能的不同可以分為以下幾種節(jié)點:
比特幣核心節(jié)點:Bitcoin Core,擁有全部四種功能:
全節(jié)點:Full Node,包含完整的區(qū)塊鏈數(shù)據(jù)庫,擁有錢包,區(qū)塊鏈數(shù)據(jù)庫,網(wǎng)絡路由功能。
輕節(jié)點:Lightweight Node一般只存儲部分數(shù)據(jù)庫,即區(qū)塊頭,不存儲交易數(shù)據(jù),通過“簡化交易驗證(SPV)”方式完成交易校驗,擁有錢包功能和網(wǎng)絡路由功能。
獨立礦工:Solo Miner,具備挖礦功能的同時,擁有完整的區(qū)塊鏈數(shù)據(jù)庫。
礦池礦工:Pool Miner,非獨立挖礦,通過使用礦池挖礦協(xié)議,即Stratum協(xié)議與礦池服務器通信,礦池服務器作為全節(jié)點與比特幣網(wǎng)絡進行通信。
PoW:Proof of work,即工作量證明,此算法參考了Adam Back提出的“哈希現(xiàn)金”,目的是在發(fā)送郵件的同時要付出一定算力,達到抑制垃圾郵件問題的目的。不同的是,在比特幣中,PoW把電子貨幣的發(fā)行和各個節(jié)點的共識結合在了一起。PoW原理主要是分布式系統(tǒng)中各個節(jié)點通過自己的算力解決一個難題,第一個算出問題答案并且通過其他節(jié)點驗證的節(jié)點獲得系統(tǒng)獎勵(也就是系統(tǒng)發(fā)行電子貨幣)。各個節(jié)點通過不斷嘗試不同隨機數(shù)Nonce,使得區(qū)塊哈希值小于等于目標哈希值。如果長時間不能得到符合條件的Nonce,則更改塊時間直到找到合適的Nonce。具體的算法流程如圖2所示:
圖2 PoW 算法流程
智能合約本質上是一段可運行的計算機腳本,允許在沒有第三方的條件下執(zhí)行。智能合約在1994年由Nick Szabo提出,但是當時沒有一個可信的系統(tǒng)可以作為智能合約的基礎,2009年中本聰提出了比特幣,研究人員意識到比特幣可以作為一個可信的運行環(huán)境。在比特幣的設計中,通過使用一種圖靈非完備的、基于堆棧的腳本語言實現(xiàn)了交易邏輯。腳本語言通過從左至右地處理每一個項目的方式來執(zhí)行腳本。數(shù)字被推送至堆棧,操作符向堆棧推送或移除一個或者多個參數(shù),對它們進行處理。條件操作符評估一項條件,會產生一個真或假的結果。這也是智能合約最初的模型。以太坊借鑒了比特幣,對其應用范圍進行了擴展??梢允褂肧olidity,Serpent,LLC編寫智能合約,然后將合約編譯成EVM字節(jié)碼運行。而HyperLedger智能合約可以用任何語言編寫,因為Hyperledger使用Docker運行智能合約,編譯后打包到 Docker鏡像中。節(jié)點訪問區(qū)塊鏈必須通過智能合約,其過程是通過節(jié)點啟動包含合約鏡像的容器,而合約通過 getState和putState來訪問區(qū)塊鏈。
比特幣利用密碼學加密算法、點對點網(wǎng)絡技術、工作量證明共識以及基于堆棧的腳本系統(tǒng)實現(xiàn)了去中心化的電子貨幣,是第一個殺手級區(qū)塊鏈應用?,F(xiàn)階段的區(qū)塊鏈技術研究集中在隱私保護、共識算法以及具體場景的區(qū)塊鏈應用等幾個方面?,F(xiàn)階段區(qū)塊鏈應用場景在下一節(jié)具體闡述。
對于交易數(shù)據(jù)公開地存儲在所有記賬節(jié)點上的做法,雖然起到了防止數(shù)據(jù)篡改的作用,但也同時帶來了隱私泄露的問題。在比特幣中,雖然會使用假名身份,但是通過啟發(fā)式武器庫可以將不同的比特幣交易連接到普通用戶,并且在許多情況下,可以將該用戶的真實世界身份連接起來,這對于個人隱私來說是致命的。針對區(qū)塊鏈的個人隱私保護,現(xiàn)階段已提出諸多解決方案:
(1)混幣技術
混幣技術的原理是將多個用戶多個輸入輸出地址混合,使得攻擊者無法找到確定的輸入地址和輸出地址,從而達到匿名身份特性。比較典型的混幣方案有 Mixcoin、CoinJoin、Dash、CoinShuffle等。Mixcoin利用中央混合服務器實現(xiàn)交易地址的混合,并且交易的金額相同,增加了匿名性。CoinJoin通過第三方平臺將多筆交易合并為一筆交易,從而隱藏輸入地址和輸出地址的關聯(lián)性。Dash幣的方案中引入了多個主節(jié)點來保護隱私,將多個主節(jié)點組成一條鏈,鏈首接收輸入地址,鏈尾提供輸出地址,攻擊者入侵任意主節(jié)點都不會同時得到輸入地址和輸出地址。用戶在發(fā)送交易請求時以固定時間間隔發(fā)送,隱藏了用戶的交易習慣。CoinShuffle中多個節(jié)點組成去中心化網(wǎng)絡,該網(wǎng)絡中的每個節(jié)點將按照一定順序依次打亂輸入輸出地址的順序,然后在該網(wǎng)絡廣播(使用其他用戶密鑰加密過的)地址列表。
(2)環(huán)簽名
環(huán)簽名是一種特殊的群簽名,它沒有群管理者。環(huán)簽名最初是由Rivest根據(jù)“如何安全地匿名泄密”這一問題提出的解決方案,得到了學者廣泛關注,并且提出了門限環(huán)簽名、代理環(huán)簽名等概念。環(huán)簽名過程是首先確定一個臨時的成員集合(包括匿名泄密者),集合中每個成員都有自己的公私鑰對,然后匿名泄密者利用自己的私鑰和集合中所有成員的公鑰對消息進行簽名,環(huán)簽名由于它的自發(fā)性、無條件匿名性和群特性具有廣泛的應用領域,如門羅幣在它的 CryptoNote協(xié)議中由 RingCT實現(xiàn)了環(huán)簽名技術。
(3)零知識證明
零知識證明是由S.Goldwasser、S.Micali及C.Rackoff提出??梢栽诓煌嘎断⒌那闆r下,證明者可以向驗證者證明某個論斷是正確的。對于零知識證明在區(qū)塊鏈也有諸多嘗試。Miers等人提出了基于零知識證明的零幣協(xié)議Zerocoin,Sasson等人提出了基于非交互性零知識證明技術 zk-SNARK的零鈔方案 Zerocash以及Kosba等人提出的Hawk方案。
(4)其他方案
還有一些其他方案做到了區(qū)塊鏈的隱私保護,如比特幣的閃電網(wǎng)絡只記錄第一次與最后一次交易,直接用減少數(shù)據(jù)庫的交易記錄保護個人隱私,微軟的Coco框架加強了對智能合約的隱私保護。
(1)股權證明算法PoS
PoS:Proof-of-Stake,股權證明。PoS最先由點點幣投入使用。該算法通過計算節(jié)點持有幣的數(shù)量和時間的乘積,即幣齡,用來作為獲得記賬權的標準。節(jié)點在獲得記賬權之后幣齡會清空,每清空規(guī)定數(shù)量幣齡會得到相應獎勵。由此可見,PoS依靠最大幣齡獲得記賬權,這與PoW使用最高算力獲取記賬權有很大不同,這使得即使攻擊節(jié)點獲得強大算力也無法對使用 PoS共識的區(qū)塊鏈系統(tǒng)進行攻擊。由PoS共識衍生出的還有Tendermint、Casper、Ouroboros等。
(2)股權授權證明算法DPOS
DPoS:Delegated Proof-of-Stake,股份授權證明。此算法由比特股Bitshares提出,讓每個持有幣的人對系統(tǒng)中的注冊的受托人投票,獲得票最多的101個受托人將對交易進行打包計算。這與人民代表大會制度類似,選出的受托人在進行高效共識的同時,還可避免資源的浪費。
(3)拜占庭容錯算法
PBFT:Practical Byzantine Fault Tolerance,實用拜占庭容錯。PBFT由MIT的Miguel和Barbara Liskov提出,是一種狀態(tài)機副本復制算法,狀態(tài)機在分布式系統(tǒng)的不同節(jié)點進行副本復制。PBFT可以分為請求、預準備、準備、提交這四個階段。
(4)Paxos與Raft算法
Paxos由Lamport提出,使用了提案-批準的兩階段提交模型,通過三種角色和多輪交互保證消息內容和順序一致。Paxos及其變種Raft算法都是通過對狀態(tài)機的復制實現(xiàn)容錯(如表3)。
表3 共識算法對比
如何利用區(qū)塊鏈技術解決能源轉型和可再生能源的利用問題已經成為區(qū)塊鏈的研究熱點之一,Caroline Plaza和Julien Gil提出了一種基于區(qū)塊鏈的解決方案,通過定義能量交換規(guī)則,利用智能計量基礎設施作為能源數(shù)據(jù)可信賴方,解決能源治理問題。PowerLedger項目中提出了雙區(qū)塊鏈層次結構:在公共層,利用以太坊區(qū)塊鏈將微電網(wǎng)生態(tài)系統(tǒng)與其他代幣的交換聯(lián)系起來;另一區(qū)塊鏈層次結構使用PowerLedger生態(tài)鏈,令應用程序在鏈上實現(xiàn)能源交易。
域名系統(tǒng)和證書頒發(fā)機構在實現(xiàn)中可能存在安全性和信任問題。針對這些問題,麻省理工學院的CertCoin項目是第一個基于區(qū)塊鏈技術的PKI實施。CertCoin刪除中心化CA并使用區(qū)塊鏈將其替換為分布式賬本存儲域名和公鑰。Enis Karaarslan 和Eylul Adiguzel提出了基于區(qū)塊鏈的域名系統(tǒng)(DNS)和分布式的公鑰基礎設施(DPKI)。
在文件存儲方面區(qū)塊鏈依然有大膽的嘗試。ChainSQL設計了具有區(qū)塊鏈去中心化,同時具有可審計、數(shù)據(jù)庫的快速查詢特性的數(shù)據(jù)庫應用平臺。星際文件系統(tǒng)(IPFS)針對HTTP協(xié)議低效、高成本等弊端,發(fā)明了基于區(qū)塊鏈且使用內容尋址方式的去中心化的存儲網(wǎng)絡。
物聯(lián)網(wǎng)經過長期發(fā)展,為智慧城市,智能家電等領域提供了有效的解決方案。但是仍然面臨網(wǎng)絡信任體系難以建立、安全性差,設備維護升級難度大等問題,同時考慮到數(shù)據(jù)中心運營成本高的問題,Shuling Li等人提出了一種基于區(qū)塊鏈的輕量級備份架構。在乘坐共享方面,現(xiàn)有的AV/IoT設備通常需要可信第三方,這會引發(fā)信任問題,CoT框架利用HyperLedger Fabric構建了安全可靠的服務。
在主流的社交媒體已經被少數(shù)幾個互聯(lián)網(wǎng)巨頭所壟斷的情況下,建立一個去中心化的社交體系逐漸成為新的技術訴求。比特信提出了基于 P2P的去中心化且無需第三方提供信用擔保的協(xié)議,通過隱藏非內容數(shù)據(jù)的方式保護個人隱私。BeeChat基于量子鏈,構建了為用戶提供加密即時通訊、新聞資訊、加密錢包多元化社區(qū)服務。
共識算法的安全隱患:在使用PoW共識的初期,極易受到51%的算力攻擊,這樣可以通過控制超過50%的算力來偽造區(qū)塊使之成為最長鏈,從而撤銷已生成的區(qū)塊來達到攻擊的目的,后期根據(jù)51%攻擊延伸出了自私挖礦和堅強挖礦等攻擊手段。使用PoS共識雖然可以避免PoW的資源浪費以及免受51%算力攻擊,但是容易受到權益粉碎攻擊。PoS共識的核心思想是在區(qū)塊鏈中的最大利益相關者獲取挖礦權,就會使得礦工間的貧富差距加大,令少數(shù)富有礦工決定區(qū)塊的生成,這與區(qū)塊鏈的去中心化思想極為不符。因為DPoS的共識節(jié)點有限的問題,所以DPoS還面臨著中心化的安全風險。
智能合約的安全漏洞:由于智能合約使用了圖靈完備的語言,使得合約更容易產生漏洞,如著名的DAO安全漏洞。有安全漏洞的智能合約可分為浪子合約、貪婪合約、自殺合約、死后合約等,如何有效的規(guī)避每種智能合約漏洞,是當今區(qū)塊鏈亟待解決的問題之一。
雖然針對比特幣的假名系統(tǒng)提出了許多隱私保護的解決方案,但仍面臨著一些問題。比如一些混幣方案去中心化不足和零知識證明驗證時間過長以至于應用受限等,同時隨著數(shù)據(jù)分析技術的發(fā)展,通過分析交易匿名集方法將輸入輸出交易進行關聯(lián),這對區(qū)塊鏈的隱私保護提出了更高要求。
由于公有鏈的共識過程全網(wǎng)節(jié)點的驗證,隨著網(wǎng)絡節(jié)點的增加,共識速度會更加緩慢。目前比特幣的TPS為7筆/秒,與支付寶等交易軟件的速度相差甚遠。這與由于區(qū)塊鏈使用了全節(jié)點備份,使得共識過程要通過全網(wǎng)大部分節(jié)點驗證,并且要經過六次確認之后交易才生效,這使得交易上鏈變得極為緩慢,從而也導致區(qū)塊鏈不適用于對時間敏感的應用場景。如何在兼顧安全性的同時提高共識效率,這是區(qū)塊鏈應用落地的關鍵問題。