?

區塊鏈技術的安全問題研究綜述

2018-11-15 09:08徐淑珍
信息安全研究 2018年11期
關鍵詞:以太私鑰哈希

顧 欣 徐淑珍

1(工業和信息化部電子第五研究所 廣州 510610)2 (天訊瑞達通信技術有限公司 廣州 510623)

從2009年比特幣誕生到以太坊和開源項目Hyperledger Fabric等等,至今,許多區塊鏈技術架構或區塊鏈平臺不斷被開發出來,區塊鏈技術也發生著日新月異的變化.區塊鏈技術是多種底層技術的融合[1],主要包括:點對點網絡技術、密碼學技術、塊鏈式結構和共識算法等等.雖然智能合約并不是區塊鏈系統的必要組成部分,但由于區塊鏈具備不可篡改、規則透明、多方執行等特性[2],使它可以很好地為智能合約提供可信的計算環境.因此,我們首先對4種典型區塊鏈技術框架進行介紹,然后從區塊數據結構、密碼學、共識機制、智能合約等方面進行對比,分析存在的安全問題.

1 區塊鏈技術架構

1.1 比特幣

比特幣(BitCoin)是最早也是全球最廣泛使用和真正意義的去中心化區塊鏈技術,因此其開源技術體系非常值得參考.

比特幣區塊鏈的核心技術框架采用C++語言開發,共識算法采用PoW算法,即常說的挖礦,PoW機制需要爭奪記賬權,達成共識的效率低、能耗高,容錯率為50%,實現全網記賬.比特幣的交易其實是轉賬,而轉賬費用又相當高昂,這就阻止了用交易觸發來實現智能合約.

1.2 以太坊

以太坊是一個圖靈完備的區塊鏈一站式開發平臺,采用多種編程語言實現協議,采用Go語言寫的Geth客戶端作為默認客戶端.基于以太坊平臺之上的應用是智能合約,這是以太坊的核心.智能合約配合友好的界面和外加一些額外的小支持,可以讓用戶基于合約搭建各種千變萬化的DAPP應用,這樣使得開發人員開發區塊鏈應用的門檻大大降低.

以太坊1.0版本采用的是PoW共識算法,目前以太坊運行的版本是1.5,采用類PoS的Casper算法,以使區塊鏈的確認速度相對于PoW的線性效率達到指數級,大幅降低資源消耗.

在規劃的以太坊2.0版本目標是從混合式系統開始,將PoS+PoW混合挖礦作為以太坊2.0升級的開端,預計在2017年底正式切換到PoS協議.

1.3 Hyperledger Fabric

Hyperledger Fabric是一個帶有可插入各種功能模塊架構的區塊鏈實施方案,其目標是打造成一個由全社會來共同維護的一個超級賬本.

作為一個區塊鏈框架,Fabric采用了松耦合的設計,將共識機制、身份驗證等組件模塊化,使之在應用過程中可以方便地根據應用場景來選擇相應的模塊.除此之外,Fabric采用了docker技術,將智能合約代碼放在docker中運行,從而使得智能合約幾乎可以用任意的高級語言來編寫.

Fabric0.6版本架構結構簡單,采用“應用—成員管理—Peer”的三角形關系.主要業務功能全部集中于Peer節點,但由于Peer節點承擔了太多的功能,所以帶來擴展性、可維護性、安全性、業務隔離等方面的諸多問題.

目前,Fabric1.0 alpha版本已發布,其特點是分拆Peer的功能,將區塊鏈的數據維護和共識服務進行分離,共識服務從Peer節點中完全分離出來,獨立為Orderer節點,提供共識服務;基于新的架構,實現多通道的結構,實現了更為靈活的業務適應性,支持更強的配置功能和策略管理功能.

1.4 Ripple

Ripple是基于區塊連的點到點全球支付網絡.Ripple有2個重要概念:其一是推出瑞波幣,它作為Ripple網絡的基礎貨幣,就像比特幣一樣可以在整個網絡中流通,主要是燃料Gas的作用,每產生一筆交易就會消耗一些XRP;其二是引入網關系統,它類似于貨幣兌換機構,允許人們把法定貨幣注入、抽離Ripple網絡,并可充當借、貸雙方的橋梁.

Ripple引入了一個共識機制RPCA,通過特殊節點的投票,在很短的時間內就能夠對交易進行驗證和確認.Ripple客戶端不需要下載區塊鏈,它在普通節點上舍棄掉已經驗證過的總賬本鏈,只保留最近的已驗證總賬本和一個指向歷史總賬本的鏈接,因而同步和下載總賬本的工作量很小.

2 區塊鏈技術安全性分析

本節從區塊數據結構、密碼學應用、共識機制、智能合約等區塊鏈技術組成方面進行分析.

2.1 區塊數據結構

在區塊數據結構中,每個數據區塊一般包含區塊頭和區塊體2個主要部分,區塊頭封裝了當前版本號、前一區塊地址、當前區塊的目標哈希值、默克爾根以及時間戳等信息.典型區塊數據結構如下:

比特幣區塊結構包括區塊大小、區塊頭、交易計數器、交易.其中,區塊頭主要包括版本、父區塊頭哈希值、默克爾根、時間戳、難度目標、nonce等[3];

以太坊區塊結構包括區塊哈希(blockHash)、區塊號(blockNumber)、父哈希(parentHash)、時間戳(timestamp)、難度(nonce)、交易哈希、使用容量(gasUsed)、總容量(gasLimit)等;

Fabric區塊結構包括版本、前一區塊哈希(previousBlockHash)、區塊交易的默克爾根哈希(transactionsHash)、時間戳(timestamp)、世界狀態的默克爾根哈希(stateHash)等;

Ripple區塊結構包括區塊索引、區塊哈希(ledge_hash)、父哈希(Parent_hash)、賬戶哈希(account_hash)、時間戳(close_time)、總幣數(total_coins)、交易哈希等.

區塊使用哈希值作為區塊的唯一標識,每個區塊記錄了前一區塊或父區塊的哈希值,這樣就通過每個區塊鏈接到其父區塊的哈希值,形成了一條所有區塊的鏈狀數據結構.

2.2 密碼學

區塊鏈技術中使用了哈希函數和非對稱加密算法.

哈希函數:區塊鏈通常并不直接保存原始數據或交易記錄,而是保存其哈希函數值,即將原始數據編碼為特定長度的由數字和字母組成的字符串后記入區塊鏈.哈希函數(也稱散列函數) 具有諸多優良特點,因而特別適合用于存儲區塊鏈數據.

非對稱加密:非對稱加密是為滿足安全性需求和所有權驗證需求而集成到區塊鏈中的加密技術,常見算法包括RSA,Elgamal,Rabin,D-H,ECC(即橢圓曲線加密算法)等.非對稱加密通常在加密和解密過程中使用2個非對稱的密碼,分別稱為公鑰和私鑰.非對稱密鑰對具有2個特點:首先是用其中一個密鑰(公鑰或私鑰)加密信息后,只有另一個對應的密鑰才能解開;其次是公鑰可向其他人公開,私鑰則保密,其他人無法通過該公鑰推算出相應的私鑰.非對稱加密技術在區塊鏈的應用場景主要包括信息加密、數字簽名和登錄認證等.

比特幣、以太坊、Fabric、Ripple均使用美國國家標準技術研究所發布的安全哈希算法SHA,輸出256b,同時我們比較MD5,SHA1,SHA256算法與國密SM3哈希算法[4],其結果如表1所示:

表1 典型哈希算法比較

比特幣、以太坊、Ripple使用的是橢圓曲線數字簽名算法(ECDSA),其中,Fabric支持使用Fabric CA進行數字簽名,Fabric CA是Hyperledger Fabric的證書頒發機構,它提供的功能包括:1)身份的注冊,或連接到LDAP作為用戶注冊表;2)發放注冊證書(ECerts);3)發布交易證書(TCerts),在Hyperledger Fabric blockchain上進行交易時提供匿名性和不可鏈接性;4)證書更新和撤銷.

目前區塊鏈采用的哈希算法和數字簽名算法是相對安全的,區塊鏈的密碼學機制隨著數學、密碼學和計算技術的發展變得越來越脆弱,同時區塊鏈技術中私鑰是用戶生成并保管的,沒有第三方參與,私鑰的使用和保存狀況是一個重要的安全問題,而私鑰安全才能保證區塊鏈應用安全.

2.3 共識機制

共識機制是區塊鏈技術框架的核心,數據分散在各個參與驗證的節點中,共識算法的作用是使數據保持一致性,否則系統將無法正常工作.

比特幣和以太坊1.0版采用了PoW機制來保證賬本數據的一致性.PoW通過經濟激勵的方式來鼓勵節點參與區塊的構造過程,節點在構造區塊時需要窮舉一個隨機數以使得區塊符合規定的難度要求,為了維護區塊鏈,則需要全網具備較大算力支撐來保證網絡的安全性,否則賬本數據就有可能被篡改.此外,即使維持較大算力來保護網絡,PoW也無法從根本上保證交易的最終性,比如比特幣就經常產生孤立區塊,而包含在孤立區塊中的交易就有可能被撤銷.因此比特幣通常要求用戶等待6個區塊的確認,即1 h左右的時間.而為了維護算力而支出的電力成本也相當可觀.

目前以太坊1.5版采用了類PoS的Casper算法.PoS主要思想是節點記賬權的獲得難度與節點持有的權益成反比,相對于PoW,一定程度減少了數學運算帶來的資源消耗,性能也得到了相應的提升,但依然是基于哈希運算競爭獲取記賬權的方式,可監管性弱.該共識機制容錯性和PoW相同.總結來說,PoS是PoW的一種升級共識機制,根據每個節點所占代幣的比例和時間,等比例地降低挖礦難度,從而加快查找隨機數的速度.

Ripple引入了一個“RPCA”機制,通過特殊節點的投票,在很短時間內就能夠對交易進行驗證和確認.Ripple的交易確認過程可在幾秒鐘之內完成,當確認交易的節點百分比低于某一閾值時,交易未能通過一輪共識.每一輪都是一個迭代過程.在首輪投票開始時,至少50%的節點必須同意.達成共識的最后一個閾值是80%的節點同意.這些特定的值會發生變化.

Hyperledger則是采用類似Ripple共識機制,達成共識則是通過拜占庭容錯算法[5]機制.節點被分為普通節點和記賬節點(validating peer),只有記賬節點才會參與到區塊的構造過程,這種角色的分離使得算法的設計者有機會將運行共識算法的節點數量限定在一個可控的規模內.

相比較而言,工作量證明、權益證明機制提供了極高的靈活性和可用性,因為每個節點都獨立構造區塊而幾乎不需要其他節點的參與,節點可以隨時加入或者退出網絡,即使全網只剩下1個節點,網絡還是可以繼續工作,但是挖礦造成大量的資源浪費,共識達成的周期較長,不適合商業應用;而拜占庭容錯的機制則與之相反,犧牲了一定的靈活性和可用性,記賬節點必須在線提供服務而不能退出網絡,一旦出現13的記賬節點停機,那么網絡將變得不可用.

2.4 智能合約

區塊鏈技術的智能合約是一組情景——應對型的程序化規則和邏輯,是部署在區塊鏈上的去中心化、可信息共享的程序代碼.簽署合約的各參與方就合約內容達成一致,以智能合約的形式部署在區塊鏈上,即可不依賴任何中心機構自動化地代表各簽署方執行合約[6].智能合約具有自治、去中心化等特點,一旦啟動就會自動運行,不需要任何合約簽署方的干預.

智能合約可視作一段部署在區塊鏈上可自動運行的程序,是由事件驅動的、具有狀態的、獲得多方承認的、運行在一個可信共享的區塊鏈賬本上的、能根據預設條件自動處理賬本上資產的程序.其運行機理為:當一個預先編好的條件被觸發時,智能合約執行相應的合同條款.其涵蓋的范圍包括編程語言、編譯器、虛擬機、事件、狀態機、容錯機制等.智能合約只是以計算機代碼程序這種方式與真實世界的資產進行交互,其致力于將已有的合約法律法規以及相關的商業實踐轉移到互聯網上,使得陌生人通過互聯網就可以實現以前在線下開展的商業活動,其優勢是利用程序算法替代人仲裁和執行合同,能夠高效地實時更新,同時合約能夠得到準確執行,并且存在較低的人為干預風險.

從目前來看,雖然智能合約借助區塊鏈技術達到了前所未有的應用程度,但其仍舊存在安全隱患,在合約代碼實現中,存在非法操作、合約代碼未檢驗等安全性問題,導致合約無法終止.在作者對區塊鏈產品測試中,發現大部分產品實現的智能合約未進行合約代碼檢驗,導致合約代碼出現邊界值、死循環、內存溢出等安全問題,導致合約無法正常執行.

一般情況下,針對上述問題,對于合約存在空值調用返回情況,應在合約規則中進行約束處理,避免此種情況造成合約調用不生效;為避免合約出現不可終止情況,智能合約可采取GAS消耗方法,即合約代碼中每執行一步或每段代碼可消耗一定的數目代幣,以太坊、Ripple目前采用此種方法;同時可以控制合約運行時間以及限制合約可運行步驟數等3種方式來確保合約正常安全運行.

2.5 其他方面

區塊鏈技術在賬戶、身份認證以及存儲方面也作了比較,結果如下:

關于賬戶方面,比特幣里沒有賬戶概念,所有余額均通過UTXO計算而得.而以太坊和Fabric里均有賬戶概念.以太坊的賬戶分為普通賬戶和合約賬戶,每個賬戶對應有永久存儲空間,存儲該賬戶的以太幣余額等.Fabric中賬戶即為chaincodeID,每個被部署的chaincode(Fabric中對智能合約的叫法)就是一個賬戶,每個賬戶也對應有永久存儲空間,存儲自定義的鍵值對.這樣,數據隱私就成為了一個問題,使用地址進行交易,具有匿名性,但交易記錄完全公開,一旦地址與真實身份聯系起來,數據隱私將會暴露出來.

關于身份認證,比特幣和以太坊基本沒有身份認證的設計,原因很簡單,因為這兩者的設計思想都是強調隱私和匿名,反對監管和中心化,而身份認證就勢必要引入一些中心或者弱化的中心機構,Fabric使用數字證書進行身份認證,Ripple主要面向金融結算,是一個半去中心化的區塊鏈,通過RippleTrade進行身份認證.

關于存儲,由于區塊鏈要記錄完整的數據信息,不能刪除或修改區塊記錄,所以區塊會不斷增加,存儲空間將受到威脅,比特幣提出了使用默克爾樹來存放交易哈希的方式,當需要回收硬盤空間時,只需將老舊的交易從默克爾樹中剔除即可.一個不含交易信息的區塊頭大小僅有80 B.按照比特幣區塊生成的速率為每10 min 1個,那么每1年產生的數據約為4.2 MB,即使將全部的區塊頭存儲于內存之中都不是問題.

3 小 結

本文從區塊數據結構、密碼學應用、共識機制、智能合約等方面對區塊鏈技術進行了分析,并列舉了典型區塊鏈架構實現的技術方式.從目前來看,區塊鏈技術在安全性方面仍存在諸多問題.

區塊鏈實現的智能合約在合約代碼安全性檢測方面仍面臨巨大風險,合約代碼未經任何安全性檢測,可能存在邊界值未校驗、死循環、內存溢出等問題,導致合約無法正常執行.

基于PoW共識算法的區塊鏈仍面臨51%攻擊問題,即如果攻擊者掌握全網超過51%算力,就有可能成功篡改和偽造區塊數據,從而實現雙重支付[7],基于PoS共識算法的區塊鏈在一定程度上解決了51%攻擊問題[5],同時也引入了區塊分叉時的N@S攻擊問題[8],因此更為安全可靠的共識機制仍有待深入研究.

區塊鏈的非對稱加密機制也將隨著數學、密碼學和計算技術的發展而變得越來越脆弱,而且隨著量子計算等新科技的發展,未來非對稱加密算法有可能存在被破解的風險.

區塊鏈在私鑰使用和保存方面仍存在很大問題[9],長字節私鑰一般通過轉換,形成短字符長度形式的私鑰,但仍然不方便記憶,而有些區塊鏈是去中心化的,是沒有第三方參與的,那么如何安全可靠地保存私鑰仍是重要問題.

猜你喜歡
以太私鑰哈希
清掃機器人避障系統區塊鏈私鑰分片存儲方法
比特幣的安全性到底有多高
基于特征選擇的局部敏感哈希位選擇算法
Spatially defined single-cell transcriptional profiling characterizes diverse chondrocyte subtypes and nucleus pulposus progenitors in human intervertebral discs
哈希值處理 功能全面更易用
文件哈希值處理一條龍
以太萬物理論概述
車易鏈:做汽車業的“以太坊”
一種基于虛擬私鑰的OpenSSL與CSP交互方案
巧用哈希數值傳遞文件
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合