張 舒 楊宇光
(北京工業大學信息學部 北京 100124) (1005377563@qq.com)
區塊鏈是一種去中心化、去信任、點對點傳輸的共享賬本技術[1-3].區塊鏈按照交易的時間順序,將該時間段內的交易封裝到一個區塊中,并與上一個生成的區塊相連,區塊鏈基于密碼學基礎,使用智能合約來對數據進行編程和操縱,使用私鑰、公鑰和地址完成相應的交易[4],并由區塊上的全部節點進行記錄和維護,區塊上的每個用戶都有權力去翻閱和查看區塊鏈上所有的交易記錄,保證了區塊鏈數據和信息的不可篡改和不可偽造.區塊鏈這項技術徹底改變了現有技術中心化的特點,使信息與數據減少對中央服務器的依賴,形成分布式存儲.
在一定時間內,區塊鏈系統會選擇其中記賬最快最好的人,讓他進行進賬,將該段時間的交易記錄在區塊中,由系統確認后,鏈接在當前區塊的末端,該記賬者便可以獲得系統賦予的一定的獎勵.周而復始,系統不斷地選出記賬人進行記賬,區塊鏈也隨之逐步增長.
在一筆交易中客戶端發起一個交易請求,在該交易尾部附上自己的簽名并向全網廣播,待網絡中其他的節點確認后將這筆交易封裝到區塊中.該網絡上的接受節點執行共識算法.例如,比特幣中使用POW(proof of work)方法[5],想獲得一個合理的BLOCK散列值則需經過大量的計算,當其中一個節點找到合理的BLOCK HASH,由其他節點進行驗證,驗證通過后由該節點將這筆交易封裝到區塊中,通過該過程形成永久透明并且不斷延伸的區塊鏈.
1) 去中心化與集體維護.區塊鏈運行在分布式的網絡環境下,賬本并不依賴于某一特定的服務器,也不由某個第三方服務平臺進行維護,而是分布地存儲在網絡的各個節點中.每個節點都有同樣的權力與義務,每個節點都有賬本的副本.同時,它們也會共同去維護交易和整個鏈,任一節點的損壞都不會對區塊鏈的運行產生威脅.
2) 信任機制.區塊鏈基于密碼學,采用對稱加密、非對稱加密、散列算法以及數字簽名等方式[6-7],使得區塊鏈的信任機制不依賴于第三方的背書.整個區塊鏈系統運行機制公開透明,具有拜占庭容錯,可以容忍少于13的惡意節點.
3) 不可篡改性.交易記錄只要被添加到區塊鏈中便具有不可篡改性.交易進入區塊鏈中就會被永久地存儲,單個節點是無法對交易進行修改的,這是由區塊鏈的內置機制決定的,除非可以控制超過一半的節點,目前來看這種情況是不存在的.
4) 可追溯性.通過密碼學,每筆交易與它相鄰的區塊相鏈接.所以,可以對該區塊之前和之后的區塊進行訪問具有可追溯性.
區塊鏈被分為公有鏈、私有鏈和聯盟鏈3類[8].
公有鏈:任何人可以訪問區塊鏈上的任一節點,也可以參與到區塊鏈的挖礦,同時可以訪問到區塊鏈上的全部賬本.公有鏈完全中心化不需借助任何的第三方平臺,通過密碼學技術保障整個系統的安全性.公有鏈的應用范圍極廣,比特幣類似的虛擬貨幣都是采用公有鏈技術.
私有鏈:在一些情況下并不希望所有人都可以訪問所有數據,也不希望所有人都可以進行挖礦.系統只希望一部分有權限的人可以訪問所有數據.私有鏈只允許特定的人對鏈有讀寫權限.私有鏈部分中心化,如今越來越多的大型金融機構更偏重采用私有鏈.
聯盟鏈:系統中的一部分被選中節點,每個節點權限完全相同,這些節點間在不需要建立互信的條件下就可以直接進行可信交易.其他所有未被選中的節點也可以參與交易,但沒有記賬的權限,可以對區塊鏈上開放的API進行限定的查詢.聯盟鏈采用共識機制的信任機制,具有較高的可擴展性.
本文中我們著重介紹比特幣、以太坊和由Linux基金會宣布創立的企業級區塊鏈解決方案Hyperledger項目.
比特幣是最早應用區塊鏈技術、并且影響最大的一項應用,用在數字貨幣方面.
2.1.1比特幣區塊結構
比特幣采用Level DB來存儲區塊,不同于以往的關系數據庫,Level DB是一種鍵值型的數據庫,由谷歌進行維護.其中每個區塊由區塊頭和區塊體構成(如圖1所示),頭信息主要包括版本號、前面區塊的散列值、默克爾樹根、時間戳、難度值、隨機數等.其中默克爾樹根根據當前區塊中所有交易的隨機散列值產生,保證了存儲在該區塊交易的不可篡改性和一致性,其路徑方便檢驗交易是否存在于區塊中[9].而區塊體部分則主要是用來存放交易信息.一個完整區塊鏈節點有如下功能.錢包:隨機生成私鑰,通過私鑰生成公鑰再轉換成相應地址,錢包負責構建新的交易.挖礦:具有網絡和計算下一個區塊的能力,將交易放到內存池中,包裝成區塊,系統認證后即可獲得相應的獎勵.完全區塊鏈節點:記錄鏈上發生的所有交易信息,可以快速得到UTXO結果,認證交易.網絡路由:把其他節點的交易信息傳送給更多的節點.

圖1 區塊頭信息
2.1.2比特幣中的交易
比特幣應用區塊鏈技術,整個系統主要是依靠一個個時間順序構成的區塊,每個區塊又記錄了一定時間內的一系列交易.在一筆交易中用戶可以創建一個比特幣錢包,通過錢包與另一方進行貨幣交易. 每個錢包對應一個私鑰,在交易時進行簽名,并附上接收方地址.網絡中礦工通過不斷計算來尋找下一個區塊,將內存池中所有未經校驗交易打包成一個區塊,通過區塊頭計算散列值,找到符合條件的新區塊就向全網廣播.網絡對當前區塊達成共識之后,將新生成的區塊鏈接到區塊鏈鏈條的最后面.比特幣包含很多網絡協議,比如P2P協議、Stratum協議、挖礦協議等.作為一個新啟動的節點該如何找到其他的節點呢,可以通過默認的種子服務器,或者通過已知的Bootstrap服務器,手動指定IP進入到比特幣的P2P網絡中.與找到的節點通過握手進行一個TCP的連接,連接成功后就可以進行后續的信息交換.
在比特幣交易過程中,地址轉換機制對比特幣安全性起著極為重要的作用.首先會通過隨機算法得到一個256 b的私鑰,通過ECDSA算法得到512 b公鑰,比特幣用SHA-256和RIPEM實現轉換,生成160 b的公鑰散列,再通過Base 58編碼生成一串更短的地址.其中Base 58中還包含校驗碼,通過校驗碼可以檢驗地址是否合法. 同樣,私鑰通過Base 58生成WIF格式的私鑰.
2.1.3共識攻擊
比特幣最基本的攻擊方式為51%攻擊,即區塊鏈的構成是一個依照時間順序不可逆的過程,修改區塊鏈中的某一區塊是基本不可能的,因為如果該區塊被改變,則它的后續區塊也需要更改,需要很強大的計算量.然而如果攻擊者具有很強大的算力,比如控制超過51%大的計算能力,可以達到強行扭轉最長鏈,還可能造成雙重支付[10].
2.1.4比特幣問題
交易時間過長:在可靠情況下,一般需要至少6個確認才能對一筆交易進行確認,時間大約在0.5 h~1 h,時間過長.PoW的挖礦方式浪費計算資源,不停計算散列,浪費電力,浪費CPU.ASIC礦機的出現使得全民參與性降低:一般使用CPU和顯卡挖礦的可能性極低,使比特幣流通性變差.不支持復雜的腳本語言,只支持逆波蘭表達式堆棧式語言.
以太坊是一個可編程的平臺,除了提供一些列預定義的操作外還可以用戶自己編寫操作.俠義來講,以太坊是一系列協議的集合,它提供有一個以太坊虛擬機,可以執行任何復雜的代碼,用戶可以通過虛擬機使用JavaScript或者python來編寫相關的應用.
以太坊包含了許多區塊鏈的技術,但也在區塊鏈的基礎上增加了許多新的技術.比如第1個提出智能合約概念的就是以太坊.智能合約被稱作是自動執行的合約、區塊鏈合約或者數字合約[11].在這種格式下,合約被轉化成一段計算機代碼,在系統中被存儲和復制,并由運行計算機組成的網絡監督執行.通俗來說,智能合約是在計算機系統上滿足一定條件時自動執行的一段代碼. 以太坊還提出了token機制[12].
以太坊也采用工作量證明機制挖礦,以太坊的工作量證明機制被稱為EtHAash.EtHash算法中存在一個種子,用來產生隨機數,種子可以通過區塊頭直接計算出來.通過種子可以獲得一個16 MB的偽隨機緩存,輕量客戶端負責存儲緩存.再通過緩存可以生成1 GB的數據集,數據集由客戶和礦工存儲,數據集隨時間線性增長.挖掘過程通過抓取數據集的隨機切片將它們混合在一起.通過使用緩存重新生成所需數據集的特定片段,令僅保存緩存的低內存的輕客戶端完成驗證.
以太坊在區塊鏈基礎上實現的一系列改進,完善了腳本系統,使智能合約也能應用到非金融領域;平衡賬目實現更加精細的賬目控制.

圖2 Hyperledger架構
在區塊鏈中有這樣的說法,如果以比特幣為代表的貨幣技術作為區塊鏈1.0典型應用,那么以太坊為代表的智能合約技術代表著區塊鏈2.0應用,實現完備的權限控制和安全保障的Hyperledger項目代表3.0技術.
Hyperledger是由Linux基金委創立的項目,于2017年7月發布1.0版本.其提供一個開源社區,目標在于提高基于區塊鏈系統的性能和可靠性,力造一個企業級區塊鏈解決方案,定制企業級區塊鏈標準,為技術公司、財務公司和供應鏈公司等提供商業交易平臺.它采用模塊化設計框架,提供插件式的算法,插件式即可替換的,為用戶提供身份識別服務、強大的訪問控制功能以及智能合約等.
2.3.1Hyperledger構架
在Hyperledger fabric架構上,提供單獨Fabric CA項目,加強身份證書的管理服務,實現自動申請和簽發證書.同時也支持多通道的特性,參與方可以建立單獨的通道,實現與其他通道之間的隔離,保證不同通道間彼此數據的隔離,保障了企業間的隱私性和隱秘性.Hyperledger架構做成可插拔式,用戶或者組織可以編寫替換的插件.并且在1.0版本后加入系統鏈碼來實現對區塊鏈系統的處理.
Hyperledger架構有幾個主要部分構成(如圖2所示),包括成員管理、區塊服務、ChainCode和Event.成員管理(Membership)在Hyperledger Fabrics中是很重要的一部分,主要是一個認證過程,驗證成員身份的合法性,為平臺安全性提供第1層保障.中間部分即區塊服務是整個區塊鏈的核心部分.區塊服務主要是負責節點之間的共識管理、賬本的分布式計算、賬本的存儲以及各個節點間P2P協議的實現.在這部分中也會有交易的執行.ChainCode部分主要是智能合約的執行,即約定在這個區塊鏈上真正執行的代碼.在Hyperledger中區塊鏈上的所有機制都是以事件的形式觸發的,事件貫穿于各個組件中.
2.3.2Hyperledger中的交易流
下面是Hyperledger一次交易的過程(如圖3所示).
1) CA是成員管理中的一部分,用來申請證書.Application端與Peer進行交互,發送Proposal(包括交易通道ID、運行的智能合約、輸入參數、簽名).
2) Peer端在接收Proposal后進行校驗,校驗Proposal簽名,驗證證書的合法性,屬于成員管理的范疇,也會對是否滿足通道規則進行校驗.校驗后Peer端會模擬交易的執行并對結果簽名,將讀寫集、背書以及簽名回復給Application端.
3) SDK端在接收到回復后,經過校驗再次提交交易給Peer端并轉發給Orders端.
4) Orders端是整個交易流中的核心部分,對交易排序進行區塊構造工作.封裝成區塊,Orders會負責將區塊廣播給Peer.
5) Peer端進行最后的校驗,包括簽名、讀寫集的一致性等.完成校驗,執行區塊中的合法交易,更新賬本狀態.

圖3 Hyperledger交易流圖
區塊鏈以其分布式、無需第三方、不可更改等技術優勢,在很多領域都有廣泛的應用.
區塊鏈是一個分布式賬本,具有不可更改的特性,很適用于數據存儲,可以滿足用戶個人對數據存儲的需要.目前,有很多公司在基于區塊鏈技術做數據存儲.例如:Tieron公司致力于使用區塊鏈構造數據存儲和驗證平臺;Peemova公司致力于開發用于商業領域的不可更改存儲系統;Filecoin公司打造共享存儲系統,把挖礦和滿足其他用戶的存儲需求結合起來.
區塊鏈的技術優勢很適合與物聯網結合使用.使用分布式賬本記錄某個設備與其他設備、Web服務或者與用戶之間的數據交換,就可以跟蹤設備的歷史狀態.德國的Slock.it公司提出了一款基于區塊鏈的智能鎖,使用智能合約對其進行控制.用在像Airbnb這樣的租房平臺可以將鎖連接到互聯網,由于所有交易都是通過區塊鏈的,對交易進行確認后,戶主便可以決定在某段時間把房屋使用權賦給這個用戶,戶主可以發放一把或多把私鑰.戶主也可以通過平臺查看鎖狀態,不需第三方介入.對于共享經濟的今天,區塊鏈與物聯網的結合將會產生不一樣的效應.
區塊鏈很好解決了不需第三方的信任問題,所以很適合用在投票系統.Follow my Vote:基于Grepheme平臺,改變了原有的投票方式,成為世界上第1個基于區塊鏈的、開源的、安全的在線投票系統.滿足匿名性,任何人都可以發起投票.
利用區塊鏈全民參與性質以及智能合約可以創建新型的預測平臺.Augar公司將市場預測與去中心化網絡結合起來,平臺上用戶可以自行地發起投票事件,比如預測體育賽事等.
當然,截至目前,區塊鏈在某些方面的技術還不夠成熟.充分利用區塊鏈的技術優勢,與現有技術結合,相信未來的區塊鏈技術可以在更多的應用領域大放異彩.
區塊鏈是一種去中心化、由多方節點共同驗證交易、共同維護賬本的分布式技術.
所有節點都是對等的,系統中每個節點都可以獲得總賬本的副本.即使部分節點遭受到惡意攻擊和損壞,也不會對其他節點和整個系統造成威脅.
區塊鏈采用散列函數、數字簽名等密碼學基礎對交易信息的安全性進行保障,保障其不可篡改性.使用工作量證明機制來鼓勵節點記錄交易信息,記錄的節點可以獲得一定的報酬.這種競爭機制下參與的節點數目越多,區塊鏈自身的安全性能就會越高.當然,這種機制本身也存在一定的安全隱患,51%攻擊就是一個需要考慮的問題,掌握了超過全網一半以上的算力就可能會控制新區塊生成,造成雙重支付等問題.
除了考慮區塊鏈底層技術和協議的安全性外,其應用的安全性也需要列入我們的考慮范圍內.區塊鏈底層技術支撐和規則協議的安全性相對較高,但這并不能表示其應用方面同其他軟件一樣,比特幣在運行過程中,同樣也會存在安全漏洞并需要及時進行修復.以太坊開發的TheDao應用就曾遭受過攻擊,造成了大量資金的竊取,損失嚴重.所以,區塊鏈應用的安全并不是只依靠自身底層技術.在應用安全方面我們也應該加強重視.
[1]馬昂, 潘曉, 吳雷, 等. 區塊鏈技術基礎及應用研究綜述[J]. 信息安全研究, 2017, 3(11): 968-980
[2]趙闊, 邢永恒. 區塊鏈技術驅動下的物聯網安全研究綜述[J]. 信息網絡安全, 2017(5): 1-6
[3]Sidhu J. Syscoin: A peer-to-peer electronic cash system with blockchain-based services for E-business[C]Proc of
Int Conf on Computer Communication and Network. Piscataway, NJ: IEEE, 2017: 1-6
[4]Merkle R C. Protocols for public key cryptosystems[C]Proc of IEEE Symp on Security and Privacy. Piscataway, NJ: IEEE, 2014: 122-122
[6]Merkle R C. A Digital Signature Based on a Conventional Encryption Function[G]Advances in Cryptology—CRYPTO’87. Berlin: Springer, 1988: 369-378
[7]Carter J L, Wegman M N. Universal classes of hash functions (extended abstract)[J]. Journal of Computer & System Sciences, 1977, 18(2): 106-112
[8]Buterin V. On public and private blockchains[OL]. [2018-03-15]. https:blog ethereum.org20150807on-public-and-private-blockchains.2015
[9]Szydlo M. Merkle tree traversal in log space and time[G]Advances in Cryptology-EUROCRYPT 2004. Berlin: Springer, 2004: 541-554
[10]程麗辰, 劉吉強. 區塊鏈技術及其安全問題[J]. 信息通信技術, 2017 (3): 39-45
[11]Watanabe H, Fujimura S, Nakadaira A, et al. Blockchain contract: A complete consensus using blockchain[C]Proc of IEEE Consumer Electronics. Piscataway, NJ: IEEE, 2016: 577-578
[12]Wood G. Ethereum: A secure decentralised generalised transaction ledger[OL]. [2018-03-15]. https:doi.org10.1017CB09781107415324.004