魏昂 黃忠義 周鳴愛
摘? ?要:自區(qū)塊鏈2.0時(shí)代以來(lái),以智能合約為代表的第二代區(qū)塊鏈平臺(tái)及應(yīng)用呈爆發(fā)式增長(zhǎng),但隨之而來(lái)的智能合約安全事件也頻繁發(fā)生。區(qū)塊鏈3.0時(shí)代,智能合約因其固有的去信任化、自動(dòng)性、防篡改、可追溯等技術(shù)特性,必將被廣泛應(yīng)用。但是,在此前景之下,智能合約的安全性成為了區(qū)塊鏈生態(tài)安全的基石。文章創(chuàng)新地提出了智能合約3.0—智慧合約的概念,并基于智能合約基礎(chǔ)架構(gòu)研究了智能合約安全威脅,提出了一套基本的智能合約安全實(shí)施規(guī)范,旨在為智能合約安全實(shí)施提供參考與借鑒。
關(guān)鍵詞:區(qū)塊鏈;智能合約;去中心化;基礎(chǔ)架構(gòu);智能合約安全
中圖分類號(hào): TP309? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
Abstract: Since the era of blockchain 2.0, the second generation of blockchain platforms and applications represented by smart contracts have grown explosively, but the security incidents of smart contracts are also frequent. In the era of blockchain 3.0, smart contract will be widely used because of its inherent technical characteristics of de trust, automation, anti tampering and traceability. But in this perspective, the security of smart contracts has become the cornerstone of the ecological security of blockchain. This paper puts forward the concept of smart contract 3.0 - Smart contract through innovation, studies the security threat of smart contract based on smart contract architecture, and puts forward a set of basic smart contract security implementation specifications, aiming to provide reference and reference for the implementation of smart contract security.
Key words: blockchain; smart contract; decentralization; basic framework; smart contract security
1 引言
近年來(lái),隨著世界各國(guó)聚焦區(qū)塊鏈技術(shù)創(chuàng)新與產(chǎn)業(yè)應(yīng)用,區(qū)塊鏈及智能合約技術(shù)在全球范圍內(nèi)得到了快速發(fā)展,并且成功地進(jìn)入了以“以太坊”平臺(tái)為標(biāo)志的區(qū)塊鏈2.0時(shí)代。智能合約技術(shù)作為劃分區(qū)塊鏈1.0時(shí)代的關(guān)鍵技術(shù),從以太坊開始,正式登上了區(qū)塊鏈發(fā)展的里程碑。智能合約已在許多區(qū)塊鏈系統(tǒng)上成功實(shí)現(xiàn),比較著名的系統(tǒng)有以太坊和超級(jí)賬本。以太坊(Ethereum)是一個(gè)開源的支持智能合約功能的公共區(qū)塊鏈平臺(tái),利用智能合約能夠在平臺(tái)上創(chuàng)建任何去中心化的應(yīng)用(Dapp)。超級(jí)賬本(Hyperledger Fabric)是一個(gè)為聯(lián)盟鏈而設(shè)計(jì)的系統(tǒng),支持種類繁多的非確定性智能合約(鏈碼 Chaincode)和可插拔的服務(wù),具有良好的靈活性、通用性和可擴(kuò)展性。當(dāng)前,智能合約還廣泛應(yīng)用于存證、能源、金融、公益慈善等領(lǐng)域,各種可執(zhí)行智能合約的區(qū)塊鏈呈井噴式增長(zhǎng),應(yīng)用前景十分廣闊。
當(dāng)然,智能合約作為一段程序,無(wú)可避免地會(huì)存在漏洞,黑客攻擊這些漏洞給智能合約帶來(lái)了一系列的安全挑戰(zhàn)。如2016年以太坊上發(fā)生的DAO(Decentralized Autonomous Organization)攻擊,導(dǎo)致6000萬(wàn)美元的以太幣被盜;2017年,以太坊庫(kù)合約被開發(fā)者誤刪除,導(dǎo)致依賴于該庫(kù)合約的錢包無(wú)法正常工作,損失了2.8億美元的以太幣;2018年,美鏈被攻擊者利用智能合約BatchOverFlow數(shù)據(jù)溢出的漏洞,產(chǎn)生大量代幣并拋售,致使美鏈憑空蒸發(fā)60億元人民幣的BEC[1]。智能合約安全問題正逐漸成為行業(yè)的聚焦點(diǎn),文章通過對(duì)智能合約安全威脅進(jìn)行研究,提出了一套完整的智能合約實(shí)施規(guī)范,將極大地降低智能合約全生命周期的安全威脅。
2 智能合約基本內(nèi)涵
2.1 定義與發(fā)展歷程
智能合約(Smart Contract)[1]這一概念可追溯到20世紀(jì)末。由尼克薩博(NickSzabo)首次提出智能合約的定義為:“智能合約是一個(gè)由計(jì)算機(jī)處理的、可執(zhí)行合約條款的交易協(xié)議。”這一概念,可以解釋為自動(dòng)化的自我執(zhí)行協(xié)議,標(biāo)志著智能合約1.0時(shí)代的到來(lái)。智能合約在1.0時(shí)代大多應(yīng)用于自動(dòng)售貨機(jī)的物理設(shè)定中,自動(dòng)售貨機(jī)會(huì)根據(jù)觸發(fā)的條件釋放相應(yīng)的物品。但是,由于智能合約1.0時(shí)代,缺乏可信操作環(huán)境,缺乏支持可編程合約的數(shù)字系統(tǒng)和技術(shù),智能合約并未被廣泛應(yīng)用于實(shí)際產(chǎn)業(yè)中。直到區(qū)塊鏈技術(shù)的興起,使得該問題得以解決,區(qū)塊鏈不僅能夠支持可編程合約,并具有去中心化、不可篡改、過程透明、可追蹤等優(yōu)勢(shì),為智能合約提供了一個(gè)完美的解決信任問題的機(jī)制。2013年以太坊項(xiàng)目成功地將智能合約引入了區(qū)塊鏈,拓展了區(qū)塊鏈在貨幣領(lǐng)域之外的應(yīng)用,智能合約2.0時(shí)代正式到來(lái),如圖1所示。
如今,廣泛認(rèn)為智能合約是一種旨在以信息化方式傳播、驗(yàn)證或執(zhí)行合同的計(jì)算機(jī)協(xié)議,是在計(jì)算機(jī)代碼中構(gòu)建的形式定義的承諾,合約參與方可以執(zhí)行存儲(chǔ)在區(qū)塊鏈上的承諾協(xié)議,通過計(jì)算機(jī)或計(jì)算機(jī)網(wǎng)絡(luò)自動(dòng)執(zhí)行,一旦雙方達(dá)成協(xié)議并執(zhí)行,處罰執(zhí)行條件會(huì)自動(dòng)輸出結(jié)果。目前,以太坊已成為最主流的智能合約開發(fā)和運(yùn)行平臺(tái),隨著Dapp的發(fā)展,智能合約將迎來(lái)全面爆發(fā)的3.0時(shí)代—智慧合約,智慧合約將是全面實(shí)現(xiàn)合約智能處理、自動(dòng)社會(huì)的基礎(chǔ)設(shè)施,如圖2所示。
2.2 技術(shù)特征
智能合約的運(yùn)用目的是為了提供優(yōu)于傳統(tǒng)合約的安全方法,可以將應(yīng)盡義務(wù)轉(zhuǎn)變?yōu)樽詣?dòng)化流程,從而保證更高程度的安全性。智能合約允許在沒有第三方的情況下進(jìn)行可信交易,減少對(duì)中介方的依賴,并減少與合約相關(guān)的其他交易成本,同時(shí)保證這些交易可追蹤且不可逆轉(zhuǎn)??偟膩?lái)說(shuō),智能合約具有去信任化、自動(dòng)性、防篡改、可追溯等技術(shù)特性[3]。
去信任化:智能合約的所有條款和執(zhí)行過程都是預(yù)先制定好的,一旦部署運(yùn)行,合約中的任何一方都不能單方面修改合約內(nèi)容以及干預(yù)合約的執(zhí)行。同時(shí),合約的監(jiān)督和仲裁都由計(jì)算機(jī)根據(jù)預(yù)先制定的規(guī)則來(lái)完成,明顯地降低了人為干預(yù)風(fēng)險(xiǎn).
自動(dòng)性:當(dāng)智能合約成功部署到區(qū)塊鏈上之后,智能合約就會(huì)立刻生效,自我驗(yàn)證、自我執(zhí)行,當(dāng)觸發(fā)合約內(nèi)容設(shè)立的執(zhí)行條件時(shí),智能合約可以自動(dòng)輸出相應(yīng)的結(jié)果而不需要依賴當(dāng)事人的配合。鑒于此,可以看出智能合約將明顯地節(jié)省締約方在合約執(zhí)行期間人力、物力、財(cái)力的資源浪費(fèi)。
防篡改:區(qū)塊鏈本身的所有數(shù)據(jù)不可篡改,因此部署在區(qū)塊鏈上的智能合約代碼以及運(yùn)行產(chǎn)生的數(shù)據(jù)輸出也是不可篡改的,運(yùn)行智能合約的節(jié)點(diǎn)不必?fù)?dān)心其他節(jié)點(diǎn)惡意修改代碼與數(shù)據(jù)。
可追溯:智能合約通過區(qū)塊鏈技術(shù)的數(shù)字簽名和時(shí)間戳,保證了合約的一切執(zhí)行運(yùn)作過程記錄在鏈,有跡可循,確保了安全可溯源。
2.3 基礎(chǔ)架構(gòu)
智能合約不僅是一段可以自動(dòng)執(zhí)行的計(jì)算機(jī)程序,同時(shí)也是系統(tǒng)的參與者。它可以對(duì)接收到的信息進(jìn)行回應(yīng),既能夠?qū)崿F(xiàn)接收和儲(chǔ)存價(jià)值,又可以向外發(fā)送信息和價(jià)值。總體來(lái)說(shuō),區(qū)塊鏈智能合約包含基礎(chǔ)設(shè)施層、傳輸層、合約層、維護(hù)層、執(zhí)行層以及應(yīng)用層[4],如圖3所示。
基礎(chǔ)設(shè)施層包括基礎(chǔ)數(shù)據(jù)賬本、共識(shí)算法、基礎(chǔ)運(yùn)行環(huán)境等,它們是智能合約運(yùn)行的必要基礎(chǔ)。傳輸層則封裝了用于支持賬本數(shù)據(jù)通信、傳輸?shù)膮f(xié)議。合約層包含了合約文件、合約代碼、應(yīng)對(duì)準(zhǔn)則等內(nèi)容。維護(hù)層主要包含對(duì)合約代碼進(jìn)行形式化驗(yàn)證、檢測(cè)審計(jì)、升級(jí)維護(hù)、運(yùn)行廢止等。執(zhí)行層主要封裝了智能合約運(yùn)行環(huán)境的相關(guān)軟件。應(yīng)用層則相對(duì)智能合約在各領(lǐng)域應(yīng)用,它主要是為智能合約與其他計(jì)算機(jī)、應(yīng)用程序通信服務(wù)的。
3 智能合約安全威脅
3.1 漏洞威脅
智能合約由于部署在區(qū)塊鏈上,具有復(fù)雜的時(shí)間依賴和次序依賴關(guān)系,合約代碼邏輯屬性的正確性以及合約代碼和合約文本的不確定性、不一致性,將導(dǎo)致智能合約本身存在漏洞,進(jìn)而導(dǎo)致智能合約受到漏洞攻擊,最終會(huì)導(dǎo)致自動(dòng)性執(zhí)行結(jié)果的輸出錯(cuò)誤。常見的智能合約漏洞威脅包含整數(shù)溢出漏洞、短地址漏洞、拒絕服務(wù)漏洞等。
整數(shù)溢出漏洞:在智能合約代碼中整數(shù)類型均為無(wú)符號(hào)整數(shù),最小的就是0,在算術(shù)運(yùn)算中出現(xiàn)越界,就會(huì)出現(xiàn)整數(shù)溢出漏洞。超出整數(shù)類型的最大表示范圍,數(shù)字便會(huì)由一個(gè)極大值變?yōu)橐粋€(gè)極小值或直接歸零,這叫“上溢”,如假設(shè)合約中最大值為X,當(dāng)X+1=0時(shí)即發(fā)生整數(shù)上溢漏洞;超出整數(shù)類型的最小表示范圍時(shí),數(shù)字便會(huì)由一個(gè)極小值或者零變成一個(gè)極大值,如0-1=X,即發(fā)生整數(shù)下溢漏洞。
短地址漏洞:短地址漏洞是虛擬機(jī)未能接受正確參數(shù)的副產(chǎn)物。攻擊者可以通過特定制作的地址,利用這個(gè)弱點(diǎn),針對(duì)部分編碼錯(cuò)誤的客戶端進(jìn)行參數(shù)填充。
拒絕服務(wù)漏洞:拒絕服務(wù)漏洞是指讓目標(biāo)機(jī)器停止提供服務(wù),通常被黑客利用拒絕服務(wù)攻擊方式進(jìn)行攻擊。這種攻擊方式可以讓合約執(zhí)行正常的交易操作被擾亂、中止、凍結(jié),更嚴(yán)重的是讓合約本身的邏輯無(wú)法運(yùn)行。
3.2 隱私安全威脅
智能合約運(yùn)行在區(qū)塊鏈上,沒有任何第三方進(jìn)行信用背書,因此智能合約不同于傳統(tǒng)合約的隱私保護(hù)。智能合約中的隱私安全威脅主要是攻擊者對(duì)身份隱私和交易隱私的攻擊,目前主要隱私安全威脅包括匿名性威脅、權(quán)限控制威脅和鏈上信息威脅等[5]。
匿名性威脅:區(qū)塊鏈上的信息是以分布式賬本的形式存儲(chǔ)在鏈上,任何一個(gè)節(jié)點(diǎn)都可以通過公開或者外部函數(shù)獲取到合約的內(nèi)容。機(jī)關(guān)智能合約交易具備一定的匿名性,但隨著技術(shù)的發(fā)展,匿名性已經(jīng)不能完全保護(hù)個(gè)人身份隱私。通過大數(shù)據(jù)的技術(shù),攻擊者可以通過分析交易規(guī)律,甚至能夠推測(cè)出用戶的身份信息和位置信息。
權(quán)限控制威脅:假設(shè)對(duì)于智能合約的可視性沒有進(jìn)行良好的安全設(shè)置,攻擊者很容易查看并獲取合約的隱私內(nèi)容和內(nèi)部邏輯,他們能夠找到繞過限制的方式,例如運(yùn)用合約使用tx.origin對(duì)調(diào)用者進(jìn)行驗(yàn)證時(shí)觸發(fā)權(quán)限控制威脅。
鏈上信息威脅:智能合約中對(duì)交易雙方信息保護(hù)的措施是通過對(duì)信息加密,防止攻擊者獲得有用的信息。但是,在鏈上加密交易信息的過程中,一方面要保證不能讓非交易者看到交易的信息,另一方面需要驗(yàn)證交易的正確性,對(duì)交易內(nèi)容不能完全加密。這兩者本身存在矛盾,也是隱私安全的威脅。
4 智能合約安全實(shí)施規(guī)范
4.1 安全實(shí)施框架
當(dāng)前,應(yīng)對(duì)智能合約安全威脅解決的主要辦法是:按照智能合約全生命周期安全實(shí)施規(guī)范進(jìn)行合約的實(shí)施,在合約創(chuàng)建前期,進(jìn)行詳細(xì)的需求收集計(jì)劃;合約創(chuàng)建要符合代碼書寫規(guī)范、邏輯要求等規(guī)范性要求;嚴(yán)格按照在合約正式部署到區(qū)塊鏈平臺(tái)前,對(duì)合約進(jìn)行盡可能完善的漏洞檢查與安全審計(jì)。智能合約的安全實(shí)施框架根據(jù)其運(yùn)行機(jī)制可概括為需求收集與規(guī)劃、合約創(chuàng)建、安全審計(jì)、合約部署、觸發(fā)執(zhí)行、廢止六個(gè)階段,如圖4所示。
智能合約安全實(shí)施執(zhí)行標(biāo)準(zhǔn)流程分為六步。
(1)需求收集和規(guī)劃:包括從多個(gè)來(lái)源收集輸入事實(shí),同時(shí)注意需求的可追溯性。
(2)合約創(chuàng)建:編寫符合指定需求的程序代碼,避免邏輯性沖突,避免已知的邏輯漏洞和低級(jí)的邏輯錯(cuò)誤。
(3)安全審計(jì):首先在內(nèi)部審核代碼,進(jìn)行形式化驗(yàn)證,然后在所有前提條件下提交外部安全審核。
(4)合約部署:將智能合約部署上鏈,執(zhí)行自動(dòng)化運(yùn)行。
(5)觸發(fā)執(zhí)行:通過相關(guān)調(diào)用達(dá)到觸發(fā)條件,智能合約執(zhí)行輸出結(jié)果。
(6)合約運(yùn)行:執(zhí)行從合約部署、合約實(shí)例化、合約執(zhí)行直到合約廢止整個(gè)生命周期流程。
4.2 智能合約創(chuàng)建
智能合約的創(chuàng)建主要是體現(xiàn)在代碼設(shè)計(jì)規(guī)則性上。在編寫智能合約代碼時(shí),應(yīng)符合代碼書寫規(guī)范、邏輯要求等規(guī)范性要求,使用已經(jīng)廣泛應(yīng)用的安全技術(shù)和工具,合約和函數(shù)應(yīng)模塊化,避免出現(xiàn)邏輯性沖突,避免已知的邏輯漏洞和低級(jí)的邏輯錯(cuò)誤,如轉(zhuǎn)賬前余額未校驗(yàn),未檢查返回值的調(diào)用等。同時(shí),對(duì)智能合約語(yǔ)言進(jìn)行約束,包括數(shù)據(jù)類型、計(jì)算類型和計(jì)算基本結(jié)構(gòu)等內(nèi)容[6],如表1所示。
4.3 合約安全審計(jì)
智能合約的安全審計(jì)采取自身與第三方安全機(jī)構(gòu)審計(jì),包括智能合約設(shè)計(jì)及業(yè)務(wù)邏輯安全、源代碼安全審計(jì)、編譯環(huán)境審計(jì)及相關(guān)的應(yīng)急響應(yīng)審計(jì),具體操作主要體現(xiàn)在對(duì)代碼進(jìn)行函數(shù)可見性審核、合約限制繞過審核、調(diào)用棧耗盡審核、進(jìn)行拒絕服務(wù)審核等測(cè)試分析。發(fā)現(xiàn)智能合約漏洞后,應(yīng)及時(shí)反饋,保證檢査和修復(fù)智能合約源代碼。
4.4 合約運(yùn)行生命周期
智能合約通過安全審計(jì)之后,將進(jìn)行上鏈部署運(yùn)行,整個(gè)運(yùn)行生命周期可分為合約部署、合約實(shí)例化、合約執(zhí)行、合約廢止四個(gè)周期,如圖5所示。
(1)合約部署是將合約代碼部署到區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)的智能合約運(yùn)行時(shí)環(huán)境中的過程。
(2)合約實(shí)例化是將智能合約代碼轉(zhuǎn)換成運(yùn)行環(huán)境可執(zhí)行格式的過程,該過程由智能合約運(yùn)行環(huán)境自動(dòng)完成。
(3)合約執(zhí)行是執(zhí)行智能合約業(yè)務(wù)邏輯的過程,這一過程展現(xiàn)出智能合約技術(shù)自動(dòng)性的特性。
(4)合約廢止是廢棄已部署智能合約的過程,該過程以接口調(diào)用的方式,在區(qū)塊鏈中達(dá)成共識(shí)后生效,智能合約廢止后,在區(qū)塊鏈網(wǎng)絡(luò)中保存被終止版本的智能合約代碼。
5 結(jié)束語(yǔ)
自以太坊項(xiàng)目成功提供圖靈完備的智能合約后,區(qū)塊鏈技術(shù)逐漸成為分布式應(yīng)用建設(shè)的底層基礎(chǔ)設(shè)施,為智能合約的發(fā)展提供了良好的實(shí)驗(yàn)藍(lán)田。隨著智能合約創(chuàng)新發(fā)展應(yīng)用,智能合約的安全問題也正受到關(guān)注,雖然國(guó)內(nèi)外在智能合約安全研究已取得不少的成果,但隨著區(qū)塊鏈3.0時(shí)代的到來(lái),不斷提高智能合約安全技術(shù)仍是區(qū)塊鏈發(fā)展的重點(diǎn)研究領(lǐng)域。本文創(chuàng)新地提出了智能合約3.0—智慧合約概念,并基于智能合約架構(gòu)研究了智能合約安全威脅,提出了一套基本的智能合約安全實(shí)施規(guī)范,以期能夠?yàn)橹悄芎霞s安全和隱私保護(hù)的未來(lái)研究做出一些有益的探索。
參考文獻(xiàn)
[1] 許雄.區(qū)塊鏈智能合約技術(shù)的研究[D].成都:電子科技大學(xué), 2019.
[2] 賀海武,延安,陳澤華.基于區(qū)塊鏈的智能合約技術(shù)與應(yīng)用綜述[J].計(jì)算機(jī)研究與發(fā)展,2018,55(11):2452-2466.
[3] 付夢(mèng)琳,吳禮發(fā),洪征,等.智能合約安全漏洞挖掘技術(shù)研究[J].計(jì)算機(jī)應(yīng)用,2019,39(07):1959-1966.
[4] 歐陽(yáng)麗煒,王帥,袁勇,等.智能合約:架構(gòu)及進(jìn)展[J].自動(dòng)化學(xué)報(bào), 2019,45(03):445-457.
[5] 王化群,張帆,李甜,等.智能合約中的安全與隱私保護(hù)技術(shù)[J].南京郵電大學(xué)學(xué)報(bào)(自然科學(xué)版),2019,39(04):63-71.
[6] 王繼輝.區(qū)塊鏈與智能合約圖譜分析[J].網(wǎng)絡(luò)空間安全, 2019,10(11):1-6+25.
[7] 王棟,石欣,陳智雨,呂梓童.區(qū)塊鏈智能合約技術(shù)在供應(yīng)鏈中的應(yīng)用研究[J].網(wǎng)絡(luò)空間安全,2018,9(08):8-17.
作者簡(jiǎn)介:
魏昂(1995-),男,漢族,安徽宿州人,青島科技大學(xué),碩士,賽迪(青島)區(qū)塊鏈研究院有限公司,工程師;主要研究方向和關(guān)注領(lǐng)域:區(qū)塊鏈技術(shù)、網(wǎng)絡(luò)安全、金融科技。
黃忠義(1989-),男,漢族,山東青島人,中國(guó)石油大學(xué),碩士,賽迪(青島)區(qū)塊鏈研究院有限公司,工程師;主要研究方向和關(guān)注領(lǐng)域:區(qū)塊鏈、工業(yè)互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、智能制造。
周鳴愛(1988-),女,漢族,河北張家口人,河北工程大學(xué),碩士,賽迪研究院網(wǎng)絡(luò)安全研究所,工程師;主要研究方向和關(guān)注領(lǐng)域:區(qū)塊鏈、計(jì)算機(jī)軟件 、網(wǎng)絡(luò)安全。