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

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

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

圖3 Hyperledger交易流圖
區(qū)塊鏈以其分布式、無需第三方、不可更改等技術優(yōu)勢,在很多領域都有廣泛的應用.
區(qū)塊鏈是一個分布式賬本,具有不可更改的特性,很適用于數(shù)據(jù)存儲,可以滿足用戶個人對數(shù)據(jù)存儲的需要.目前,有很多公司在基于區(qū)塊鏈技術做數(shù)據(jù)存儲.例如:Tieron公司致力于使用區(qū)塊鏈構造數(shù)據(jù)存儲和驗證平臺;Peemova公司致力于開發(fā)用于商業(yè)領域的不可更改存儲系統(tǒng);Filecoin公司打造共享存儲系統(tǒng),把挖礦和滿足其他用戶的存儲需求結合起來.
區(qū)塊鏈的技術優(yōu)勢很適合與物聯(lián)網(wǎng)結合使用.使用分布式賬本記錄某個設備與其他設備、Web服務或者與用戶之間的數(shù)據(jù)交換,就可以跟蹤設備的歷史狀態(tài).德國的Slock.it公司提出了一款基于區(qū)塊鏈的智能鎖,使用智能合約對其進行控制.用在像Airbnb這樣的租房平臺可以將鎖連接到互聯(lián)網(wǎng),由于所有交易都是通過區(qū)塊鏈的,對交易進行確認后,戶主便可以決定在某段時間把房屋使用權賦給這個用戶,戶主可以發(fā)放一把或多把私鑰.戶主也可以通過平臺查看鎖狀態(tài),不需第三方介入.對于共享經(jīng)濟的今天,區(qū)塊鏈與物聯(lián)網(wǎng)的結合將會產(chǎn)生不一樣的效應.
區(qū)塊鏈很好解決了不需第三方的信任問題,所以很適合用在投票系統(tǒng).Follow my Vote:基于Grepheme平臺,改變了原有的投票方式,成為世界上第1個基于區(qū)塊鏈的、開源的、安全的在線投票系統(tǒng).滿足匿名性,任何人都可以發(fā)起投票.
利用區(qū)塊鏈全民參與性質以及智能合約可以創(chuàng)建新型的預測平臺.Augar公司將市場預測與去中心化網(wǎng)絡結合起來,平臺上用戶可以自行地發(fā)起投票事件,比如預測體育賽事等.
當然,截至目前,區(qū)塊鏈在某些方面的技術還不夠成熟.充分利用區(qū)塊鏈的技術優(yōu)勢,與現(xiàn)有技術結合,相信未來的區(qū)塊鏈技術可以在更多的應用領域大放異彩.
區(qū)塊鏈是一種去中心化、由多方節(jié)點共同驗證交易、共同維護賬本的分布式技術.
所有節(jié)點都是對等的,系統(tǒng)中每個節(jié)點都可以獲得總賬本的副本.即使部分節(jié)點遭受到惡意攻擊和損壞,也不會對其他節(jié)點和整個系統(tǒng)造成威脅.
區(qū)塊鏈采用散列函數(shù)、數(shù)字簽名等密碼學基礎對交易信息的安全性進行保障,保障其不可篡改性.使用工作量證明機制來鼓勵節(jié)點記錄交易信息,記錄的節(jié)點可以獲得一定的報酬.這種競爭機制下參與的節(jié)點數(shù)目越多,區(qū)塊鏈自身的安全性能就會越高.當然,這種機制本身也存在一定的安全隱患,51%攻擊就是一個需要考慮的問題,掌握了超過全網(wǎng)一半以上的算力就可能會控制新區(qū)塊生成,造成雙重支付等問題.
除了考慮區(qū)塊鏈底層技術和協(xié)議的安全性外,其應用的安全性也需要列入我們的考慮范圍內.區(qū)塊鏈底層技術支撐和規(guī)則協(xié)議的安全性相對較高,但這并不能表示其應用方面同其他軟件一樣,比特幣在運行過程中,同樣也會存在安全漏洞并需要及時進行修復.以太坊開發(fā)的TheDao應用就曾遭受過攻擊,造成了大量資金的竊取,損失嚴重.所以,區(qū)塊鏈應用的安全并不是只依靠自身底層技術.在應用安全方面我們也應該加強重視.
[1]馬昂, 潘曉, 吳雷, 等. 區(qū)塊鏈技術基礎及應用研究綜述[J]. 信息安全研究, 2017, 3(11): 968-980
[2]趙闊, 邢永恒. 區(qū)塊鏈技術驅動下的物聯(lián)網(wǎng)安全研究綜述[J]. 信息網(wǎng)絡安全, 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]程麗辰, 劉吉強. 區(qū)塊鏈技術及其安全問題[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