張峻銘,朱衛(wèi)星,楊忠舉,王梅娟
(中國(guó)人民解放軍陸軍工程大學(xué),南京 210007)
智能合約[1]與傳統(tǒng)合約不同,通過數(shù)字形式掌控現(xiàn)實(shí)資產(chǎn),是提供驗(yàn)證并執(zhí)行的計(jì)算機(jī)交易協(xié)議,一旦滿足智能合約的執(zhí)行條件,協(xié)議會(huì)自動(dòng)執(zhí)行且無(wú)需第三方參與。智能合約技術(shù)作為一種極具發(fā)展?jié)摿Φ念嵏残孕畔⒓夹g(shù),具有去中心化、防篡改、高度自治等典型特征,特別是其高度自治的特征打破了傳統(tǒng)合同的交易方式和習(xí)慣,成功被應(yīng)用于數(shù)字貨幣、金融、醫(yī)療和農(nóng)業(yè)等領(lǐng)域。與此同時(shí),無(wú)人機(jī)集群作為一種顛覆性技術(shù)[2],具有成本低、任務(wù)完成率高、工作效率高的優(yōu)勢(shì)。因此,無(wú)人機(jī)集群技術(shù)在現(xiàn)代信息化社會(huì)發(fā)揮的作用也越來越重要,并將會(huì)成為未來市場(chǎng)的突破點(diǎn)。然而,當(dāng)前無(wú)人機(jī)集群執(zhí)行任務(wù)過程中依舊存在通信依賴性強(qiáng)、應(yīng)變能力不足、信息傳遞時(shí)效性差及易受干擾等安全性問題,為解決無(wú)人機(jī)集群的安全問題并進(jìn)一步發(fā)揮其優(yōu)勢(shì),本文結(jié)合智能合約的優(yōu)勢(shì)特點(diǎn)提出智能合約在無(wú)人機(jī)集群中自主通信、實(shí)時(shí)通信、加密通信和態(tài)勢(shì)分析4 個(gè)方面的典型應(yīng)用。智能合約的相關(guān)特性帶來了眾多便利的同時(shí)也引起諸多挑戰(zhàn),而安全性問題是其中最重要、最具影響力的一種。因此,研究智能合約在無(wú)人機(jī)集群中的應(yīng)用及安全性漏洞具有重大的現(xiàn)實(shí)意義。
基于智能合約的去中心化特點(diǎn)可以用來解決無(wú)人機(jī)集群執(zhí)行任務(wù)過程中通信依賴強(qiáng)的特點(diǎn),提高工作效率。目前典型的的無(wú)人機(jī)集群控制方法有集中式控制、分布式控制和混合式控制;其中集中式控制方法采用一個(gè)主控單元,集中掌握了環(huán)境中全局信息和所有無(wú)人機(jī)的信息,進(jìn)行集中式處理任務(wù)與資源分配,由主控單元合理分配給每一個(gè)無(wú)人機(jī),每個(gè)無(wú)人機(jī)只需負(fù)責(zé)數(shù)據(jù)的輸入和輸出,數(shù)據(jù)的存儲(chǔ)和控制處理;分布式控制方法中各無(wú)人機(jī)之間對(duì)等,不存在主控與被控關(guān)系,各無(wú)人機(jī)互相進(jìn)行信息交互,自主處理實(shí)時(shí)數(shù)據(jù)并根據(jù)數(shù)據(jù)規(guī)劃出一條路徑;混合式控制方法則結(jié)合了前2 種方法的優(yōu)點(diǎn),一個(gè)主控單元控制所有無(wú)人機(jī),而每一個(gè)無(wú)人機(jī)則采用分布式控制方法,因此主控?zé)o人機(jī)可獲取到當(dāng)前所有機(jī)器人的位置、環(huán)境信息、處理數(shù)據(jù)和策略規(guī)劃等,進(jìn)而根據(jù)獲取的全局信息規(guī)劃路徑。
通過對(duì)以上3 種典型的無(wú)人機(jī)集群控制方法的闡述,可以看出無(wú)人機(jī)集群對(duì)于通信的依賴性較強(qiáng)。對(duì)于對(duì)主控通信依賴強(qiáng)的無(wú)人機(jī)集群而言,一方面若主控單元出現(xiàn)故障或受到惡意攻擊時(shí),會(huì)導(dǎo)致整個(gè)系統(tǒng)陷入癱瘓,從而致使整個(gè)任務(wù)的失敗;另一方面存在計(jì)算復(fù)雜度大、反應(yīng)速度慢等問題,導(dǎo)致各個(gè)無(wú)人機(jī)工作效率降低;對(duì)于對(duì)周圍環(huán)境依賴性強(qiáng)的無(wú)人機(jī)集群而言,整個(gè)無(wú)人機(jī)集群缺乏全局性,各無(wú)人機(jī)之間的協(xié)調(diào)合作難,所獲取的信息有限且難以實(shí)現(xiàn)全局最優(yōu)解,甚至可能會(huì)造成各無(wú)人機(jī)之間的任務(wù)沖突。不論是對(duì)主控的通信依賴還是對(duì)周圍環(huán)境的通信依賴,都會(huì)對(duì)無(wú)人機(jī)集群編隊(duì)系統(tǒng)飛行效果造成影響,而具有去中心化特質(zhì)的智能合約具備解決這一問題的能力。所謂的去中心化特質(zhì)[3]是指智能合約不依賴第三方管理機(jī)構(gòu)或硬件設(shè)施,沒有中心管制,除了自成一體的區(qū)塊鏈本身,通過分布式核算和存儲(chǔ),各個(gè)節(jié)點(diǎn)間實(shí)現(xiàn)了信息自我驗(yàn)證、傳遞和管理,保證了無(wú)人機(jī)集群編隊(duì)系統(tǒng)的可用性,使得無(wú)人機(jī)能及時(shí)可靠地訪問數(shù)據(jù)信息,只要網(wǎng)絡(luò)中大部分節(jié)點(diǎn)未遭遇黑客攻擊,就能確保整個(gè)系統(tǒng)的正常運(yùn)行,這也大大降低了通信依賴對(duì)無(wú)人機(jī)集群編隊(duì)系統(tǒng)飛行效果的影響,可實(shí)現(xiàn)無(wú)人機(jī)集群較大程度上的自主通信。
基于智能合約的成員資格服務(wù)[4]可保障緊急命令的高效執(zhí)行,解決無(wú)人機(jī)集群在執(zhí)行任務(wù)過程中信息傳遞時(shí)效性差和應(yīng)變能力不足問題。以用餐后結(jié)賬流程為例進(jìn)一步闡述成員資格服務(wù),在餐廳用完餐后結(jié)賬時(shí),會(huì)看到一個(gè)提示——現(xiàn)金或支付寶支付,倘若嘗試使用微信掃描支付寶的付款碼進(jìn)行付款,無(wú)論用戶的微信賬戶是否真實(shí)存在且賬戶中是否有足夠的資金,用戶的支付請(qǐng)求都不會(huì)被接受。擁有真實(shí)存在的用戶和足夠的資金是不夠的,其必須被商家所接受。這里就需要證書頒發(fā)機(jī)構(gòu)(PKI)和成員資格服務(wù)提供商(MSP)協(xié)同工作,PKI[5]就像一個(gè)提供商——分配了許多不同類型的可驗(yàn)證身份,而另外一邊,MSP 就像餐廳接受的提供商列表——來確定哪些身份是支付網(wǎng)絡(luò)的可信成員,MSP 的強(qiáng)大功能不僅僅是列出誰(shuí)是支付網(wǎng)絡(luò)的可信成員或通道成員,MSP 還可以識(shí)別網(wǎng)絡(luò)的可信成員可能在MSP 所代表的組織范圍內(nèi)扮演的特定角色,如管理員、執(zhí)行者、中繼或子成員等,并設(shè)置對(duì)于在網(wǎng)絡(luò)和通道,如讀者、寫者等的情況中定義訪問權(quán)限的基礎(chǔ)。
在現(xiàn)代信息化快速發(fā)展條件下,廣延性、多邊性、連續(xù)性和快節(jié)奏表現(xiàn)的愈發(fā)明顯,最終效果越來越取決于后臺(tái)操作員的操控能力和集群分隊(duì)的隨機(jī)應(yīng)變能力,但由于相關(guān)技術(shù)的滯后性和局限性,總是會(huì)出現(xiàn)信息傳遞時(shí)效性差和應(yīng)變能力不足等問題,導(dǎo)致無(wú)人機(jī)集群工作效能不能發(fā)揮到最佳水平。智能合約是部署在區(qū)塊鏈上的代碼,一旦某個(gè)事件觸發(fā)合約中的條款,代碼就自動(dòng)執(zhí)行;簡(jiǎn)單來講就是滿足條件就執(zhí)行,不需要人為操控,與PKI 和MSP 協(xié)同工作提供的成員資格服務(wù)結(jié)合為無(wú)人機(jī)的通信環(huán)境提供了良好的信任基礎(chǔ);便可大幅度改善信息傳遞時(shí)效性差和應(yīng)變能力不足問題。通過賦予權(quán)限最高操作人員管理員角色和寫者訪問權(quán)限,操作人員便可通過實(shí)時(shí)跟進(jìn)現(xiàn)場(chǎng)情況,選擇是否更改預(yù)先設(shè)定的智能合約,即便現(xiàn)場(chǎng)條件和預(yù)先設(shè)定的不同,仍能取得預(yù)先設(shè)定的目標(biāo)效果;通過賦予無(wú)人機(jī)集群系統(tǒng)中各個(gè)個(gè)體執(zhí)行者和讀者權(quán)限,使其能在第一時(shí)間收到來自管理員的命令,改變?cè)瓉碛衅畹闹悄芎霞s,立即執(zhí)行現(xiàn)在的智能合約,達(dá)到實(shí)時(shí)通信,從而有效地保障了緊急命令的高效執(zhí)行,使得無(wú)人機(jī)集群工作效能大幅度提升。
基于智能合約的同態(tài)加密技術(shù)設(shè)計(jì)數(shù)字簽名和認(rèn)證的協(xié)議及橢圓曲線密碼技術(shù)[6]可以保障無(wú)人機(jī)集群執(zhí)行任務(wù)過程中的加密通信,解決無(wú)人機(jī)集群執(zhí)行任務(wù)過程中易受干擾問題。同態(tài)加密是計(jì)算復(fù)雜性理論的密碼學(xué)技術(shù)[7],與一般加密算法相比,同態(tài)加密除了能實(shí)現(xiàn)基本的加密操作,還能實(shí)現(xiàn)密文間的多種計(jì)算功能,可實(shí)現(xiàn)先計(jì)算后解密等價(jià)于先解密后計(jì)算功能;橢圓加密算法是一種公鑰加密體制,最初由Koblitz 和Miller 于1985 年提出,其數(shù)學(xué)基礎(chǔ)是利用橢圓曲線上的有理點(diǎn)構(gòu)成Abel 加法群上橢圓離散對(duì)數(shù)的計(jì)算困難性。
智能合約本身具有去中心化、防篡改等特征,具有一定的安全性,結(jié)合同態(tài)加密技術(shù)和橢圓曲線密碼技術(shù),可大幅提高無(wú)人機(jī)集群系統(tǒng)加密通信能力。結(jié)合橢圓曲線密碼學(xué)在某些情況下可使用比其他方法更小的秘鑰,但能夠提供相當(dāng)?shù)幕蚋叩燃?jí)的安全的特性,對(duì)智能合約內(nèi)容進(jìn)行加密,這樣不僅能使智能合約的安全性得到提升,同時(shí)還具備加密速度快、存儲(chǔ)空間占用小和對(duì)寬帶要求低等優(yōu)勢(shì)。而后文提到基于智能合約的背書節(jié)點(diǎn)服務(wù),其中采用數(shù)字簽名和認(rèn)證技術(shù),這里就涉及到對(duì)橢圓曲線密碼加密的智能合約進(jìn)行解密,才能更好地進(jìn)行認(rèn)證等操作,若采用同態(tài)加密技術(shù)來進(jìn)行數(shù)字簽名和認(rèn)證,解密方就只能獲取最后的結(jié)果,而無(wú)法獲得每一個(gè)密文的內(nèi)容,這樣就能夠保證數(shù)字簽名和認(rèn)證在安全加密的環(huán)境下進(jìn)行,同時(shí)密文計(jì)算無(wú)需經(jīng)過秘鑰方,減少了通信成本。綜上,經(jīng)過橢圓曲線密碼技術(shù)和同態(tài)加密技術(shù)處理后,可降低無(wú)人機(jī)集群在執(zhí)行任務(wù)過程中易受干擾的問題,即使無(wú)人機(jī)集群系統(tǒng)中某個(gè)節(jié)點(diǎn)收到干擾或攻擊,也能保證通信在加密條件下進(jìn)行,保障其他節(jié)點(diǎn)不受影響。
基于智能合約的背書節(jié)點(diǎn)服務(wù)[8]可進(jìn)行任務(wù)結(jié)束后的態(tài)勢(shì)分析,及時(shí)查漏補(bǔ)缺,提高無(wú)人機(jī)集群飛行效率。背書節(jié)點(diǎn)服務(wù)可以理解為:承擔(dān)背書任務(wù)的節(jié)點(diǎn)為智能合約的執(zhí)行進(jìn)行信息驗(yàn)證,對(duì)驗(yàn)證通過的交易聲明此交易合法的過程和機(jī)制。背書節(jié)點(diǎn)服務(wù)的工作流程如下:首先由客戶端將提議(這里指需要執(zhí)行的智能合約)發(fā)給指定的1 個(gè)或多個(gè)背書節(jié)點(diǎn);背書節(jié)點(diǎn)收到交易提議后,首先用客戶端的公鑰驗(yàn)證信息是否篡改過、是否之前已經(jīng)提交過、是否可以在該提議進(jìn)行操作、提議是否被提交及提議的組織是否正確等等,驗(yàn)證通過后將結(jié)果反饋給客戶端;客戶端收到背書節(jié)點(diǎn)的結(jié)果后,表示這個(gè)提議已經(jīng)被該節(jié)點(diǎn)正確背書。
結(jié)合智能合約不可違約性和不可篡改性[9],可保證相關(guān)交易信息公開透明,再利用背書節(jié)點(diǎn)服務(wù),這樣每個(gè)節(jié)點(diǎn)都可以被追溯記錄在智能合約上的交易過程,一方面降低違約行為發(fā)生的幾率,另一方面可根據(jù)背書倒查各個(gè)節(jié)點(diǎn)在任務(wù)執(zhí)行過程中的表現(xiàn),及時(shí)查漏補(bǔ)缺,做出優(yōu)化調(diào)整。以2018 年5 月1 日發(fā)生在西安的無(wú)人機(jī)集群表演事故為例,演出一開始就有一部分無(wú)人機(jī)沒有飛到預(yù)定位置,導(dǎo)致1 374 架無(wú)人機(jī)沒有成功組成完整圖案;如此龐大的無(wú)人機(jī)集群在表演時(shí)出現(xiàn)失誤,事故一出,當(dāng)時(shí)眾說紛紜,有的認(rèn)為是干擾所致,有的認(rèn)為是受當(dāng)時(shí)天氣環(huán)境條件的影響,也有的認(rèn)為是跟蹤定位信息出現(xiàn)了紕漏,在當(dāng)時(shí)想要立馬研究清楚失誤原因具有一定難度,但倘若采用智能合約下的背書節(jié)點(diǎn)服務(wù),其中可節(jié)省不少工作量,達(dá)到事半功倍的效果。因此,將基于智能合約下的背書節(jié)點(diǎn)服務(wù)應(yīng)用于各種條件下的無(wú)人機(jī)集群中可實(shí)現(xiàn)現(xiàn)場(chǎng)態(tài)勢(shì)分析,對(duì)執(zhí)行任務(wù)后復(fù)盤總結(jié)、查漏補(bǔ)缺提供直觀依據(jù),根據(jù)背書節(jié)點(diǎn)的簽名追溯責(zé)任,并依據(jù)情報(bào)等級(jí)采用不同的懲罰措施和改進(jìn)措施,對(duì)以后飛行任務(wù)分工調(diào)整運(yùn)用起到指導(dǎo)作用,提高了無(wú)人機(jī)集群飛行效率。
通過分析無(wú)人機(jī)集群執(zhí)行任務(wù)過程中存在的通信依賴強(qiáng)、應(yīng)變能力不足、信息傳遞時(shí)效性差及易受干擾等缺點(diǎn),提出基于智能合約的去中心化特點(diǎn)以用來解決無(wú)人機(jī)集群在執(zhí)行任務(wù)過程中通信依賴強(qiáng)問題、基于智能合約的成員資格服務(wù)以解決無(wú)人機(jī)集群在執(zhí)行任務(wù)過程中信息傳遞時(shí)效性差和應(yīng)變能力不足問題、基于智能合約的背書節(jié)點(diǎn)服務(wù)以提高無(wú)人機(jī)集群飛行效率、基于智能合約的同態(tài)加密技術(shù)和和橢圓曲線密碼技術(shù)以解決無(wú)人機(jī)集群執(zhí)行任務(wù)過程中易受干擾問題;最終實(shí)現(xiàn)無(wú)人機(jī)集群系統(tǒng)自主通信、實(shí)時(shí)通信、態(tài)勢(shì)分析和加密通信,對(duì)提高無(wú)人機(jī)集群執(zhí)勤效率、高質(zhì)量完成任務(wù)和出色的發(fā)揮出其優(yōu)勢(shì)提供參考。
對(duì)應(yīng)場(chǎng)景及解決方案:在加密通信中,基于智能合約的同態(tài)加密技術(shù)可實(shí)現(xiàn)先計(jì)算后解密等價(jià)于先解密后計(jì)算的功能,在進(jìn)行計(jì)算和加解密過程中,若采用同態(tài)加密技術(shù)中的先計(jì)算后解密的功能,會(huì)涉及到整數(shù)溢出漏洞問題;根據(jù)漏洞原理和漏洞判斷條件,可對(duì)所有的整數(shù)變量添加驗(yàn)證條件[10];使用SafeMath 庫(kù)中的add,sub,multi,div 函數(shù)進(jìn)行計(jì)算。
分類:整數(shù)上溢,整數(shù)下溢。
漏洞原理:uint256 在EVM 中的數(shù)據(jù)位數(shù)是0~255,當(dāng)數(shù)值超過這個(gè)范圍就會(huì)發(fā)生溢出,因此對(duì)“+”“-”“×”“/”操作后得到的變量沒有及時(shí)進(jìn)行值的驗(yàn)證就會(huì)產(chǎn)生該漏洞。
漏洞判定條件:沒有使用SafeMath 庫(kù)操作,且使用“+”“-”“×”“/”操作后未對(duì)結(jié)果進(jìn)行溢出判斷。
對(duì)應(yīng)場(chǎng)景及解決方案:在實(shí)時(shí)通信中,若攻擊者調(diào)用了無(wú)人機(jī)集群系統(tǒng)內(nèi)類似call.value()這類轉(zhuǎn)賬函數(shù)時(shí),盡管無(wú)人機(jī)集群系統(tǒng)已經(jīng)收到新命令仍然會(huì)執(zhí)行之前的命令,這仍將導(dǎo)致信息傳遞時(shí)效性差和應(yīng)變能力不足;根據(jù)漏洞原理和漏洞判斷條件,可使用其他轉(zhuǎn)賬函數(shù)(比如Solidity 內(nèi)置的transfer()函數(shù));先修改狀態(tài)變量,再進(jìn)行轉(zhuǎn)賬操作。
漏洞原理:當(dāng)攻擊者調(diào)用了在函數(shù)內(nèi)部使用了call.value()轉(zhuǎn)賬的轉(zhuǎn)賬函數(shù)[11]時(shí),call.value()會(huì)觸發(fā)攻擊者合約中的被其改寫過了的fallback()函數(shù),其內(nèi)部可再次調(diào)用轉(zhuǎn)賬函數(shù),從而不斷從漏洞合約遞歸轉(zhuǎn)賬到攻擊者合約;并且轉(zhuǎn)賬函數(shù)是在call.value()轉(zhuǎn)賬操作之后,才修改漏洞合約中余額的狀態(tài)變量,這兩者共同導(dǎo)致了該漏洞的產(chǎn)生。
漏洞判定條件:使用了call.value()進(jìn)行轉(zhuǎn)賬操作,且在轉(zhuǎn)賬后才再修改狀態(tài)變量。
對(duì)應(yīng)場(chǎng)景及解決方案:自主通信和實(shí)時(shí)通信中分別涉及各個(gè)節(jié)點(diǎn)間實(shí)現(xiàn)了信息自我驗(yàn)證和基于智能合約下的成員資格服務(wù)身份驗(yàn)證,在驗(yàn)證過程中,若錯(cuò)誤的使用某些關(guān)鍵字,則會(huì)導(dǎo)致合約被非法攻擊;根據(jù)漏洞原理和漏洞判斷條件,可通過不要將判斷條件及關(guān)鍵函數(shù)的訪問關(guān)鍵字錯(cuò)誤使用就不會(huì)產(chǎn)生該問題。
漏洞原理:某些功能的驗(yàn)證條件存在設(shè)計(jì)缺陷,默認(rèn)的變量或函數(shù)訪問關(guān)鍵字[12](private,public,external,internal)和2 種底層調(diào)用方式(call()和delegatecall())等的使用錯(cuò)誤,使某些關(guān)鍵函數(shù)能被外部輕易訪問,從而使攻擊者獲利或者合約故障。
漏洞判定條件:關(guān)鍵函數(shù)的未添加正確的函數(shù)訪問關(guān)鍵字,或者函數(shù)內(nèi)部的判斷條件邏輯有誤。
對(duì)應(yīng)場(chǎng)景及解決方案:在自主通信、實(shí)時(shí)通信和態(tài)勢(shì)分析過程中,會(huì)用到call(),delegatecall(),callcode()3 個(gè)函數(shù)來實(shí)現(xiàn)跨合約調(diào)用,尤其是在自主通信中,各個(gè)節(jié)點(diǎn)間要實(shí)現(xiàn)信息自我驗(yàn)證、傳遞和管理,因此跨合約調(diào)用漏洞不容忽視;根據(jù)漏洞原理和漏洞判斷條件,可減少對(duì)這3 個(gè)函數(shù)的使用,相應(yīng)的功能可以使用高級(jí)函數(shù)來實(shí)現(xiàn)。例如,直接指向給定地址的合約以調(diào)用特定的函數(shù),以及轉(zhuǎn)賬操作使用transfer()或send()函數(shù)實(shí)現(xiàn)。
漏洞原理:Solidity 提供了call(),delegatecall(),callcode()3 個(gè)函數(shù)來實(shí)現(xiàn)合約之間交互訪問;若處理不當(dāng),很可能會(huì)產(chǎn)生一些致命的漏洞。如call()函數(shù)注入漏洞,使用不當(dāng)時(shí)可使外界直接控制合約中call()函數(shù)相關(guān)的參數(shù),從而訪問合約的其他重要函數(shù)。
漏洞判定條件:在函數(shù)中使用了帶有參數(shù)的call(),delegatecall(),callcode()方法,且其參數(shù)對(duì)于外界來說可以被控制。
對(duì)應(yīng)場(chǎng)景及解決方案:在實(shí)時(shí)通信中,若攻擊者通過消耗PKI 和MSP 資源,使得用戶無(wú)法獲得成員資格,因此也無(wú)法獲得相應(yīng)的權(quán)限,使合法用戶被拒絕服務(wù);根據(jù)漏洞原理和漏洞判斷條件,如果合約需要對(duì)外部函數(shù)調(diào)用的結(jié)果進(jìn)行處理才能進(jìn)入新的狀態(tài),就要考慮外部調(diào)用可能一直失敗的情況。也可以添加基于時(shí)間的操作,以防外部函數(shù)調(diào)用一直無(wú)法滿足require判斷。(一般地,完整的if-else,require,assert 語(yǔ)句都有2 條分支,true 則繼續(xù)執(zhí)行,false 則回退;函數(shù)調(diào)用也有不同的分支,可以使用函數(shù)的返回值作為判斷依據(jù),也可以將函數(shù)是否順利執(zhí)行作為判斷依據(jù),因此,開發(fā)者在編寫智能合約時(shí),應(yīng)加入函數(shù)執(zhí)行異常的處理機(jī)制)。
漏洞原理:攻擊者通過消耗合約的資源,讓用戶短暫或者永久地退出該合約,擾亂、中止、凍結(jié)正常合約的執(zhí)行,從而把以太幣鎖在被攻擊的合約中;有些時(shí)候,合約被編寫成進(jìn)入新的狀態(tài),需要將以太幣發(fā)送到某個(gè)地址或者等待來自外部的某些輸入[13]。當(dāng)外部調(diào)用失敗或者由于外部原因而被阻止時(shí),這些模式也可能導(dǎo)致拒絕服務(wù)攻擊。
漏洞判定條件:沒有對(duì)一些能夠被外部調(diào)用影響的重要變量或函數(shù)添加執(zhí)行失敗時(shí)的異常處理機(jī)制。
對(duì)應(yīng)場(chǎng)景及解決方案:在加密通信中,在利用橢圓曲線密碼技術(shù)對(duì)智能合約內(nèi)容加密和同態(tài)加密算法時(shí),在進(jìn)行加密操作和實(shí)現(xiàn)密文間的多種計(jì)算功能時(shí),存在以00 結(jié)尾造成短地址攻擊漏洞;根據(jù)漏洞原理和漏洞判斷條件,可在編寫代碼時(shí)添加對(duì)地址長(zhǎng)度的檢查機(jī)制,即可有效防范短地址攻擊漏洞。
漏洞原理:短地址攻擊是指調(diào)用其他合約的時(shí)候,特意選取以00 結(jié)尾的地址,并且傳入地址參數(shù)的時(shí)候省略最后的00,導(dǎo)致以太坊虛擬機(jī)(EVM)在解析數(shù)量參數(shù)的時(shí)候會(huì)在參數(shù)末尾錯(cuò)誤地補(bǔ)0,最終導(dǎo)致超額轉(zhuǎn)出代幣。當(dāng)參數(shù)傳遞給智能合約時(shí),EVM 就會(huì)根據(jù)ABI 規(guī)范將參數(shù)進(jìn)行編碼,就是把Solidity 編寫的合約等內(nèi)容轉(zhuǎn)換成機(jī)器可以運(yùn)算的二進(jìn)制編碼[14]。
漏洞判定條件:函數(shù)未對(duì)傳入的地址參數(shù)進(jìn)行長(zhǎng)度檢查。
對(duì)應(yīng)場(chǎng)景及解決方案:在自主通信和實(shí)時(shí)通信2 種情況下,智能合約的執(zhí)行會(huì)依賴當(dāng)前區(qū)塊的時(shí)間戳,尤其在實(shí)時(shí)通信條件下,為使無(wú)人機(jī)集群能在第一時(shí)間收到來自管理員的命令,達(dá)到信息傳遞的時(shí)效性,導(dǎo)致對(duì)時(shí)間戳依賴程度較高;根據(jù)漏洞原理和漏洞判斷條件,可不使用區(qū)塊時(shí)間戳作為判定勝負(fù)或該改變重要狀態(tài)的決定性因素;可通過指定區(qū)塊編號(hào)來更改合約狀態(tài)的方法可能是更安全的。
漏洞原理:時(shí)間戳依賴,就是指智能合約的執(zhí)行依賴當(dāng)前區(qū)塊的時(shí)間戳,隨著時(shí)間戳的不同,合約的執(zhí)行結(jié)果也有差別。礦工在處理一個(gè)新的區(qū)塊時(shí),如果新區(qū)塊的時(shí)間戳大于上一個(gè)區(qū)塊的時(shí)間戳,并且時(shí)間戳之差小于900 s,那么新區(qū)塊的時(shí)間戳就是合法的(這是由以太坊協(xié)議規(guī)定的)。然而,如果礦工有能力稍微調(diào)整時(shí)間戳,在智能合約中錯(cuò)誤地使用區(qū)塊時(shí)間戳,將會(huì)造成嚴(yán)重的后果,這就是時(shí)間戳依賴漏洞。
漏洞判定條件:在改變重要狀態(tài)或者判定條件部分使用了時(shí)間戳。
對(duì)應(yīng)場(chǎng)景及解決方案:在態(tài)勢(shì)分析過程中,在運(yùn)用背書節(jié)點(diǎn)服務(wù)時(shí)要進(jìn)行自我驗(yàn)證,此時(shí)會(huì)遍歷調(diào)用棧,調(diào)用全變量tx.origin,這會(huì)導(dǎo)致合約受到攻擊;根據(jù)漏洞原理和漏洞判斷條件[15],合約開發(fā)者要盡量避免使用tx.origin,可以改為msg.sender。在權(quán)限驗(yàn)證時(shí)候,采用require(this==msg.sender)或者require(owner==msg.sender)。
漏洞原理:tx.origin 是Solidity 中的一個(gè)全局變量[16],能夠遍歷調(diào)用棧并返回最初發(fā)送調(diào)用的賬號(hào)的地址,即tx.origin 是整個(gè)交易過程中最初的哪個(gè)合約者的地址。在智能合約中使用tx.origin 變量使用身份驗(yàn)證,會(huì)導(dǎo)致合約受到攻擊。
漏洞判定條件:在權(quán)限驗(yàn)證的時(shí)候使用了tx.origin。
通過分析智能合約在無(wú)人機(jī)集群執(zhí)行任務(wù)過程中的漏洞,包含整數(shù)溢出、重入、訪問控制缺陷、跨合約調(diào)用、拒絕服務(wù)攻擊、短地址攻擊、時(shí)間戳依賴及tx.origin漏洞,通過分析漏洞原理、漏洞判定條件及結(jié)合對(duì)應(yīng)場(chǎng)景提出解決方案,具體對(duì)應(yīng)關(guān)系見表1;研究智能合約在無(wú)人機(jī)集群中的漏洞能夠降低其帶來的安全風(fēng)險(xiǎn),同時(shí)為開發(fā)規(guī)范的智能合約以及對(duì)漏洞的檢測(cè)提供參考。
表1 漏洞類型及其所涉及的應(yīng)用場(chǎng)景
本文以無(wú)人機(jī)集群為研究對(duì)象,為解決無(wú)人機(jī)集群系統(tǒng)現(xiàn)有存在的通信依賴性強(qiáng)、應(yīng)變能力不足、信息傳遞時(shí)效性差及易受干擾等安全性問題,結(jié)合智能合約去中心化、防篡改、高度自治等典型優(yōu)勢(shì)特征,提出智能合約在自主通信、實(shí)時(shí)通信、加密通信及態(tài)勢(shì)分析4 個(gè)方面的典型應(yīng)用,對(duì)提高無(wú)人機(jī)集群執(zhí)行效率、高質(zhì)量完成任務(wù)及出色的發(fā)揮其優(yōu)勢(shì)提供保證,為智能合約更好地應(yīng)用于無(wú)人機(jī)集群并發(fā)揮其優(yōu)勢(shì)提供參考。同時(shí)重點(diǎn)分析在4 種應(yīng)用場(chǎng)景下潛在的8 種智能合約漏洞,分別為整數(shù)溢出、重入、訪問控制缺陷、跨合約調(diào)用、拒絕服務(wù)攻擊、短地址攻擊、時(shí)間戳依賴及tx.origin 漏洞,并根據(jù)漏洞原理及應(yīng)用場(chǎng)景提出相應(yīng)的解決方案;由于智能合約漏洞的存在會(huì)影響智能合約在無(wú)人機(jī)集群應(yīng)用過程中的安全系數(shù),關(guān)于智能合約漏洞的檢測(cè)技術(shù)研究變得尤為重要。因此,在今后研究中將重點(diǎn)關(guān)注基于深度學(xué)習(xí)的智能合約漏洞檢測(cè)方法,實(shí)現(xiàn)快速、有效地檢測(cè)出智能合約在無(wú)人機(jī)集群中的潛在安全漏洞。