(中山大學,廣東廣州510275)
中本聰提出一種點到點的現金系統[1],并在2009年公開了源代碼。通過社區的推進,人們開始嘗試使用比特幣進行支付,第一個例子就是使用一萬個比特幣購買一個披薩。比特幣源于社區,并自帶粉絲,社區內成員自我鑄幣、自我消費。繼比特幣之后,出現了如萊特幣[2]、點點幣[3]、名字幣[4]等以各種名目發行的密碼貨幣,因其總量固定,所以粉絲越多其匯率越高。
GAVIN W[5]在2014年對比特幣做了2個改進:第1個是提供以太坊虛擬機(EVM),用于執行任意用戶自定義的代碼,實現智能合約;第2個就是把比特幣中存放在未花費輸出交易(UTXO)中的貨幣和狀態、代碼存放在一個賬戶下面,即所謂的賬戶模型。以太坊的出現,極大地簡化了人們發行新幣的過程,于是區塊鏈領域上演了一場初始代幣發行(ICO)的大劇,各類項目良莠不齊。
IBM開發的Fabric[6]看到了另外一個生存空間,那就是避開以太坊,構造聯盟鏈,在企業中運行。得益于IBM的代碼質量和一貫良好的形象,Fabric很快在聯盟鏈中占據了主導地位。Fabric的特點是不用密碼貨幣,轉而用節點背書,其中每個節點的身份可以識別,不誠實的節點需要付出代價。目前在大部分所謂落地的應用中,例如:銀行、供應鏈、積分、稅務等場景,無一例外地采用了聯盟鏈的模式。
區塊鏈是內生在比特幣中,用于記錄比特幣交易,所以有時稱之為賬本。ARUIND N等人[7]從數據結構上看,認為區塊鏈就是一個用哈希指針取代了內存指針的一個鏈表。PASS R等人[8]從協議上看,認為區塊鏈就是一個協議,協議參與者各自本地維護的一個數據列表稱為鏈,參與者把收到的消息包含在自己的和其他所有參與者的鏈中。這些定義各有其優缺點,例如:ARUIND N的定義沒有考慮共識,PASS R等人的定義專門用于比特幣。
本質上,區塊鏈由一組基于點到點(P2P)網絡的節點形成,各節點通過執行共識算法,維護其各自數據的一致性。去中心化、不可篡改和激勵機制通過該定義可以體現。其中,P2P網絡和共識算法是去中心化的具體體現,也是不可篡改的前提和必要條件,激勵機制則是各節點維護其數據一致性的動力所在。可追蹤、匿名、可編程這些特點則是對區塊鏈的一致數據賦予語義之后得到的功能特性。我們下面對區塊鏈技術進行分析,指出其典型特點和功能特性的技術支撐,然后再探討區塊鏈技術在物聯網(IoT)場景的幾個應用。
區塊鏈技術的典型特點包括去中心化、不可篡改和激勵機制。
去中心化屬于區塊鏈技術的基本屬性,是區塊鏈技術和其他技術得以區分的基本特點。去中心化既有物理基礎又有組織形式,具體如下:
(1)物理基礎
比特幣、眾多山寨幣和一些無幣區塊鏈項目大都會堅持使用P2P網絡,這其實是去中心化的物理基礎。我們知道純粹的P2P網絡是沒有服務器角色的,每個節點既是服務器又是客戶端,彼此地位均等。這種地位均等與設備的計算能力、網絡帶寬等無關。
(2)組織形式
在P2P網絡之上,基于比特幣的工作量證明(PoW)算法,比特幣中每個節點潛在地具有記賬的權力,這是一種表面的去中心化,因為這種權力與節點的算力等資源密切相關。事實上,比特幣網絡中記賬的權力集中在幾個大礦池手中,是一種聯盟記賬的模式。成為這個特定聯盟的節點并不需要其他節點的允許,而是單純地依靠算力比拼,可以稱之為無組織算力聯盟。我們使用無組織這個詞匯,是因為在這個聯盟中,各個成員節點是純粹的競爭性關系,不存在哪一個礦池服從其他礦池的情況,這與一般的由某個企業或者單位主導形成的聯盟有所不同;在基于其他共識算法的區塊鏈中,具有記賬權力的節點首先是獨立的,然后節點之間依靠某種規則確定記賬節點的集合,形成一個動態的記賬聯盟,與比特幣的最終形態是類似的,不同之處在于不依賴PoW的記賬聯盟往往則需要某種集體許可的機制,這是一種有組織的聯盟。
數據不可篡改是區塊鏈中數據的基本屬性,我們分基于PoW、基于數字簽名和基于數據冗余3部分來闡述。
(1)基于PoW的不可篡改
對于采用PoW的區塊鏈技術,每一個區塊的生成背后都有算力的競爭,進而有區塊難度的概念。區塊難度基本表明了一個區塊生成時生成該區塊的節點所需要付出的計算代價。因此,給定一個比特幣區塊鏈,任何設備想要重新生成一條具有同等難度的區塊鏈都必須付出同等的累積計算力量。鑒于比特幣區塊鏈消耗的巨大計算資源,在計算能力沒有本質突破的前提下,任何設備都難以承受重新生成一條區塊鏈的代價。因此,比特幣區塊鏈的數據擁有者們只能刪除自己存儲的數據,而無法對其進行任何修改;而單個節點對數據的刪除,并不會改變其他節點擁有的數據副本,因而比特幣網絡中的數據具有非常強的不可篡改性。
(2)基于數字簽名的不可篡改
權益證明(PoS)是根據節點權益決定區塊的生成節點的一種共識算法。當PoS共識指定某個節點充當區塊的生成節點時,該節點通過數字簽名表明該區塊是其生成的。因此基于PoS的區塊鏈是一種由數字簽名保護的區塊鏈。給定任意一個PoS區塊鏈,一個節點可以刪除數據,也可以自己生成很多的公私鑰對,進而形成一個具有不同數字簽名的偽區塊鏈。與基于計算難度的區塊鏈不同,這個偽區塊鏈只能通過驗證數字簽名來區分,進而需要PoS區塊鏈明確哪些公鑰是屬于這個區塊鏈的,哪些是合法的。只有這些明確了,才能明確哪一個PoS區塊鏈是真的,哪一個是假的。在一個PoS區塊鏈有明確的參與節點邊界之后,單個節點的數據刪除并不會影響其他節點的數據副本,因而數據具有不可篡改性。如果這個節點邊界的范圍非常小,并且所有節點的數據都被刪除了,數據就真的從這個區塊鏈刪除了,這就是明確的邊界帶來的代價。
(3)基于數據冗余的不可篡改
采用拜占庭容錯類算法的區塊鏈或直接采用修改的分布式數據庫技術保持數據一致性的區塊鏈,如果不采用數字簽名,其數據的不可篡改性只能來自數據冗余。任意節點可以修改自己的本地數據,但是節點是獨立的。一個節點刪除或修改自己的數據并不影響其他節點,因而當查詢一份數據時,多數節點給出的結果就是該數據的真實情況。此時數據的不可篡改依賴維護一個區塊鏈的誠實節點的數量。我們再次強調節點獨立的重要性:對于一些直接采用了分布式數據庫技術的區塊鏈項目,經過測試,維護分布式數據庫的節點并不是獨立的,因而任意有權限的節點刪除數據會使得其他節點“同步”地刪除數據,這樣的區塊鏈項目是沒有不可篡改性的。類似地,由單個企業或者單位維護的區塊鏈項目,其不可篡改性是需要質疑的。
激勵機制在區塊鏈中有重要的作用,它使得人們對聯盟節點的行為可以預期,進而產生信任。以無組織算力聯盟為例,聯盟成員一般不會特意地阻斷某一個交易,聯盟成員會努力計算,期望自己獲得區塊的獎勵。這種可預期的行為是信任產生的基礎。所以區塊鏈的可信與區塊鏈節點行為的可預期相關,而行為的可預期則與激勵機制相關。比特幣長期的實踐經驗告訴我們:激勵良好且相互制衡的聯盟成員行為可以預期、可以信任。在有組織的聯盟中,激勵機制同樣是不可或缺的,在其治理下,可以使用獎懲的方法,并且形式也可以多樣化,可以不使用貨幣,形成所謂的無幣區塊鏈項目。
在有幣的區塊鏈項目中,激勵機制是否有效取決于項目的代幣是否可支付,例如:比特幣的可支付來自社區內的認同。眾所周知,有一萬個比特幣換取披薩的事情,那么為什么是一萬個不是五千個呢?我們可以推測持有比特幣的一方用電費來衡量自己獲取的比特幣在當時的價值,披薩的銷售者一方面必然是比特幣社區的成員,一方面還可以用電費衡量披薩的價值,于是你情我愿之下,才會有這樣的一筆交易。我們特別推測了披薩店主應該是比特幣社區的成員,或可以說是比特幣的粉絲;否則,這筆交易是不會發生的。所以我們認為認同是支付的前提。如果項目的參與者對項目不認同,可支付性降低,激勵機制失效,那么這個項目就很難有效地運行。
區塊鏈技術的基本特點是區塊鏈得以成為區塊鏈的關鍵,而功能特性則是對數據進行不同的語義賦值之后得到的特性,例如:可追蹤、匿名和可編程。
(1)可追蹤
當區塊鏈中的數據彼此具有鏈接關系時,就有了某種可追蹤性。以比特幣為例,一個新生成的比特幣交易中包含輸入交易的哈希值,輸入交易也是交易,也包含其輸入交易,以此類推,可以直接推到多個鑄幣交易。那么,從鑄幣交易集合到新生成的這個比特幣交易就形成了一棵樹,樹根是新生成交易,樹上的任意一筆交易都與新生成的交易相關。然而,在不使用區塊鏈技術的情況下,一個中心化的服務器也可以使用這種鏈式關系來形成其存儲數據的可追蹤性。因此,可追蹤性只與具體的數據結構以及應用的語義有關系。
(2)匿名
區塊鏈中的數據都是有來源的,在大多數項目中,這個來源只能使用一串公鑰標識出來。公鑰是可以任意生成的,因而與人或物的一些真實身份信息沒有直接的對應關系,因而具有了某種匿名性。比特幣提供的這種匿名準確一些叫做假名。一個實體可以隨便生成公鑰,但公鑰與資產綁定后,通過交易的可追蹤性可以大概率地通過一些簡單的聚合算法找出一個實體的不同公鑰。這些公鑰盡管還不能直接對應到人,但再加上一些交易時間分析、IP地址分析和社會工程學方法,終究還是可以把人找出來,因此比特幣的這種假名技術并沒有提供太多的保護。有許多的項目致力于提高匿名性,提供真實匿名的系統,例如:零幣,可以隱藏交易金額、實體等信息,具有更好的匿名性。匿名性是對數據的語義分析之后得到的某個項目是否保護參與實體身份等信息的安全屬性。
(3)可編程
比特幣提供的腳本語言可以讓交易方明確比特幣轉移的條件;而腳本語言本質上是一種編程語言,因而人們一般認為區塊鏈資產具有可編程的特點。以太坊的出現強化了人們的這種觀念。以太坊提供了一個準圖靈機,讓人們可以自定義智能合約,以完成資產的管理。智能合約是一種技術手段,隨著合約內容涉及的應用領域不同,出現了對保險、供應鏈、公證等諸多社會生活領域的智能合約,因而出現了所謂可編程社會的觀點。事實上,可編程也可以看成對數據的語義賦值之后的功能特性,只不過現在維持一致的數據包括了“代碼數據”而已。
以上我們把區塊鏈的技術特點分為去中心化、不可篡改、激勵機制3個,并把可追蹤、匿名、可編程看成區塊鏈數據的語義賦值。通過這些分析,我們自然地可以把單個企業提供的“區塊鏈”服務、“云區塊鏈”等項目與真正的區塊鏈項目區分開。
IoT場景有2個典型特點:數據量大,設備無時無刻不在產生數據;數據安全很重要,因為IoT數據可以與工控安全、居家環境等現實社會的生產生活建立直接的關聯,因而其數據的機密性、完整性和可用性是必須要考慮的。區塊鏈技術所保障的僅僅是數據的完整性,為數據的可用性提供了便利,但是并沒有對數據機密性進行任何的考慮。下面我們選擇幾個典型的IoT場景區塊鏈項目來分析區塊鏈技術在IoT中的應用。
IOTA[9]是區塊鏈技術在IoT中應用的一個主要代表,主要考慮了IoT數據體量的問題。IOTA技術的白皮書主要披露了一個糾纏(Tangle)賬本。糾纏賬本是一種基于有向無環圖(DAG)的分布式賬本底層技術,其基本安全假設為:攻擊者生成交易的速度需要小于誠實網絡節點生成交易速度的和。在這一假設下,為了鼓勵誠實節點生成交易,不收交易費。考慮到IoT設備生成的數據體量較大,不收交易費也就成了該技術適用于IoT的一個主要原因。
糾纏賬本的問題集中在賬本安全性和激勵機制2個方面:在賬本安全性上,交易速度的假設還需要實踐檢驗;在激勵機制上,在沒有交易費的情況下如何激勵節點存儲大量的IoT交易也是需要經過實踐檢驗的。
沃爾頓鏈[10]是一個結合硬件的IoT應用項目,考慮了IoT數據的產生和管理問題。該團隊開發出了區塊鏈讀寫器,可以把標簽數據的哈希值通過讀寫器直接寫入區塊鏈中。同時讀寫器與標簽具有雙向認證的功能,可以確保數據的來源是經過認證的。對于數據量較大的問題,該團隊構思了跨鏈架構,希望該架構能承載眾多不同形態、不同應用場景的子鏈。該項目的跨鏈思路還需要實踐檢驗。
SMT項目[11],致力于為移動設備提供一個有激勵措施的通信平臺,其考慮更多的是IoT的數據通信方式的問題。從愿景上看,該項目希望提供一個平行于互聯網的全球移動設備通信平臺。從技術組成上看,該項目基于以太坊,準備采用雷電網絡的技術支持移動設備之間的“鏈下”支付。該技術特點與愿景是有矛盾的,因為雷電網絡終究是不能離開以太坊的在線支持。該項目的激勵措施在于轉發數據可以獲得獎勵,但白皮書中并沒有披露具體的獎勵算法,畢竟數據的來源往往是一個用戶,而參與轉發的則涉及多個用戶。另外,IoT場景中的通信問題是否是一個關鍵性的問題還需要實踐檢驗。
Streamr項目[12],意在基于以太坊智能合約建立一個適用于IoT的數據產生和消費平臺。IoT設備作為數據產生的源頭,把經過接收方公鑰加密的數據發送給該網絡的中介節點。不同的中介節點群處理不同的IoT數據,形成可擴展的架構。中介節點群之間的管理通過以太坊智能合約實現。數據接收方通過中介節點獲得加密的數據,并通過自定義的該項目的合約平臺完成數據處理。然而,以太坊作為一個一般性平臺,最近一直受到交易速度的困擾。該項目底層完全依賴以太坊,其基本的交易處理速度受限于以太坊,因此在IoT中的實用性還需要進一步的檢驗。
Ruff項目[13],把邊緣計算的概念和區塊鏈結合在一起,提供了統一的IoT應用接口,并提供IoT主控設備和受控設備的全局管理,它屬于IoT數據應用層面的項目。該項目中輕節點代表具體的IoT受控設備,該設備通過存儲主控設備的公鑰來識別主控設備的命令。通過智能合約,主控設備可以把受控設備的部分功能以租賃或轉移的形式提供服務。該項目搭建自己的公鏈,采用了股份授權證明(DPoS)共識算法,每輪選擇105個節點參與區塊生成。該公鏈能否承載其設備租賃的服務模式,還需要在實踐中檢驗。
以上我們對幾個典型的以IoT為應用場景的區塊鏈項目進行了分析,可以看到目前人們對于IoT場景下數據量較大、數據較為敏感的問題已經有了初步的建議方案,另外對IoT的通信方式、數據使用方式、數據生成方式進行了積極的探索。
本文中,我們提出去中心化、不可篡改和激勵機制屬于區塊鏈技術的本質特點,而可追蹤、匿名、可編程屬于區塊鏈數據之上的功能特性,以此可以區分一些區塊鏈項目和借區塊鏈概念的項目。進一步地,我們分析了區塊鏈技術在IoT場景的幾個應用,對其中的主要問題和主要方法進行了闡述,指出IoT的數據體量和數據安全問題依舊是區塊鏈技術在IoT場景應用需要重點考慮的問題。