智能合约在无人机集群中的应用及漏洞分析
2023-08-28张峻铭朱卫星杨忠举王梅娟
张峻铭,朱卫星,杨忠举,王梅娟
(中国人民解放军陆军工程大学,南京 210007)
智能合约[1]与传统合约不同,通过数字形式掌控现实资产,是提供验证并执行的计算机交易协议,一旦满足智能合约的执行条件,协议会自动执行且无需第三方参与。智能合约技术作为一种极具发展潜力的颠覆性信息技术,具有去中心化、防篡改、高度自治等典型特征,特别是其高度自治的特征打破了传统合同的交易方式和习惯,成功被应用于数字货币、金融、医疗和农业等领域。与此同时,无人机集群作为一种颠覆性技术[2],具有成本低、任务完成率高、工作效率高的优势。因此,无人机集群技术在现代信息化社会发挥的作用也越来越重要,并将会成为未来市场的突破点。然而,当前无人机集群执行任务过程中依旧存在通信依赖性强、应变能力不足、信息传递时效性差及易受干扰等安全性问题,为解决无人机集群的安全问题并进一步发挥其优势,本文结合智能合约的优势特点提出智能合约在无人机集群中自主通信、实时通信、加密通信和态势分析4 个方面的典型应用。智能合约的相关特性带来了众多便利的同时也引起诸多挑战,而安全性问题是其中最重要、最具影响力的一种。因此,研究智能合约在无人机集群中的应用及安全性漏洞具有重大的现实意义。
1 智能合约在无人机集群中的应用
1.1 自主通信
基于智能合约的去中心化特点可以用来解决无人机集群执行任务过程中通信依赖强的特点,提高工作效率。目前典型的的无人机集群控制方法有集中式控制、分布式控制和混合式控制;其中集中式控制方法采用一个主控单元,集中掌握了环境中全局信息和所有无人机的信息,进行集中式处理任务与资源分配,由主控单元合理分配给每一个无人机,每个无人机只需负责数据的输入和输出,数据的存储和控制处理;分布式控制方法中各无人机之间对等,不存在主控与被控关系,各无人机互相进行信息交互,自主处理实时数据并根据数据规划出一条路径;混合式控制方法则结合了前2 种方法的优点,一个主控单元控制所有无人机,而每一个无人机则采用分布式控制方法,因此主控无人机可获取到当前所有机器人的位置、环境信息、处理数据和策略规划等,进而根据获取的全局信息规划路径。
通过对以上3 种典型的无人机集群控制方法的阐述,可以看出无人机集群对于通信的依赖性较强。对于对主控通信依赖强的无人机集群而言,一方面若主控单元出现故障或受到恶意攻击时,会导致整个系统陷入瘫痪,从而致使整个任务的失败;另一方面存在计算复杂度大、反应速度慢等问题,导致各个无人机工作效率降低;对于对周围环境依赖性强的无人机集群而言,整个无人机集群缺乏全局性,各无人机之间的协调合作难,所获取的信息有限且难以实现全局最优解,甚至可能会造成各无人机之间的任务冲突。不论是对主控的通信依赖还是对周围环境的通信依赖,都会对无人机集群编队系统飞行效果造成影响,而具有去中心化特质的智能合约具备解决这一问题的能力。所谓的去中心化特质[3]是指智能合约不依赖第三方管理机构或硬件设施,没有中心管制,除了自成一体的区块链本身,通过分布式核算和存储,各个节点间实现了信息自我验证、传递和管理,保证了无人机集群编队系统的可用性,使得无人机能及时可靠地访问数据信息,只要网络中大部分节点未遭遇黑客攻击,就能确保整个系统的正常运行,这也大大降低了通信依赖对无人机集群编队系统飞行效果的影响,可实现无人机集群较大程度上的自主通信。
1.2 实时通信
基于智能合约的成员资格服务[4]可保障紧急命令的高效执行,解决无人机集群在执行任务过程中信息传递时效性差和应变能力不足问题。以用餐后结账流程为例进一步阐述成员资格服务,在餐厅用完餐后结账时,会看到一个提示——现金或支付宝支付,倘若尝试使用微信扫描支付宝的付款码进行付款,无论用户的微信账户是否真实存在且账户中是否有足够的资金,用户的支付请求都不会被接受。拥有真实存在的用户和足够的资金是不够的,其必须被商家所接受。这里就需要证书颁发机构(PKI)和成员资格服务提供商(MSP)协同工作,PKI[5]就像一个提供商——分配了许多不同类型的可验证身份,而另外一边,MSP 就像餐厅接受的提供商列表——来确定哪些身份是支付网络的可信成员,MSP 的强大功能不仅仅是列出谁是支付网络的可信成员或通道成员,MSP 还可以识别网络的可信成员可能在MSP 所代表的组织范围内扮演的特定角色,如管理员、执行者、中继或子成员等,并设置对于在网络和通道,如读者、写者等的情况中定义访问权限的基础。
在现代信息化快速发展条件下,广延性、多边性、连续性和快节奏表现的愈发明显,最终效果越来越取决于后台操作员的操控能力和集群分队的随机应变能力,但由于相关技术的滞后性和局限性,总是会出现信息传递时效性差和应变能力不足等问题,导致无人机集群工作效能不能发挥到最佳水平。智能合约是部署在区块链上的代码,一旦某个事件触发合约中的条款,代码就自动执行;简单来讲就是满足条件就执行,不需要人为操控,与PKI 和MSP 协同工作提供的成员资格服务结合为无人机的通信环境提供了良好的信任基础;便可大幅度改善信息传递时效性差和应变能力不足问题。通过赋予权限最高操作人员管理员角色和写者访问权限,操作人员便可通过实时跟进现场情况,选择是否更改预先设定的智能合约,即便现场条件和预先设定的不同,仍能取得预先设定的目标效果;通过赋予无人机集群系统中各个个体执行者和读者权限,使其能在第一时间收到来自管理员的命令,改变原来有偏差的智能合约,立即执行现在的智能合约,达到实时通信,从而有效地保障了紧急命令的高效执行,使得无人机集群工作效能大幅度提升。
1.3 加密通信
基于智能合约的同态加密技术设计数字签名和认证的协议及椭圆曲线密码技术[6]可以保障无人机集群执行任务过程中的加密通信,解决无人机集群执行任务过程中易受干扰问题。同态加密是计算复杂性理论的密码学技术[7],与一般加密算法相比,同态加密除了能实现基本的加密操作,还能实现密文间的多种计算功能,可实现先计算后解密等价于先解密后计算功能;椭圆加密算法是一种公钥加密体制,最初由Koblitz 和Miller 于1985 年提出,其数学基础是利用椭圆曲线上的有理点构成Abel 加法群上椭圆离散对数的计算困难性。
智能合约本身具有去中心化、防篡改等特征,具有一定的安全性,结合同态加密技术和椭圆曲线密码技术,可大幅提高无人机集群系统加密通信能力。结合椭圆曲线密码学在某些情况下可使用比其他方法更小的秘钥,但能够提供相当的或更高等级的安全的特性,对智能合约内容进行加密,这样不仅能使智能合约的安全性得到提升,同时还具备加密速度快、存储空间占用小和对宽带要求低等优势。而后文提到基于智能合约的背书节点服务,其中采用数字签名和认证技术,这里就涉及到对椭圆曲线密码加密的智能合约进行解密,才能更好地进行认证等操作,若采用同态加密技术来进行数字签名和认证,解密方就只能获取最后的结果,而无法获得每一个密文的内容,这样就能够保证数字签名和认证在安全加密的环境下进行,同时密文计算无需经过秘钥方,减少了通信成本。综上,经过椭圆曲线密码技术和同态加密技术处理后,可降低无人机集群在执行任务过程中易受干扰的问题,即使无人机集群系统中某个节点收到干扰或攻击,也能保证通信在加密条件下进行,保障其他节点不受影响。
1.4 态势分析
基于智能合约的背书节点服务[8]可进行任务结束后的态势分析,及时查漏补缺,提高无人机集群飞行效率。背书节点服务可以理解为:承担背书任务的节点为智能合约的执行进行信息验证,对验证通过的交易声明此交易合法的过程和机制。背书节点服务的工作流程如下:首先由客户端将提议(这里指需要执行的智能合约)发给指定的1 个或多个背书节点;背书节点收到交易提议后,首先用客户端的公钥验证信息是否篡改过、是否之前已经提交过、是否可以在该提议进行操作、提议是否被提交及提议的组织是否正确等等,验证通过后将结果反馈给客户端;客户端收到背书节点的结果后,表示这个提议已经被该节点正确背书。
结合智能合约不可违约性和不可篡改性[9],可保证相关交易信息公开透明,再利用背书节点服务,这样每个节点都可以被追溯记录在智能合约上的交易过程,一方面降低违约行为发生的几率,另一方面可根据背书倒查各个节点在任务执行过程中的表现,及时查漏补缺,做出优化调整。以2018 年5 月1 日发生在西安的无人机集群表演事故为例,演出一开始就有一部分无人机没有飞到预定位置,导致1 374 架无人机没有成功组成完整图案;如此庞大的无人机集群在表演时出现失误,事故一出,当时众说纷纭,有的认为是干扰所致,有的认为是受当时天气环境条件的影响,也有的认为是跟踪定位信息出现了纰漏,在当时想要立马研究清楚失误原因具有一定难度,但倘若采用智能合约下的背书节点服务,其中可节省不少工作量,达到事半功倍的效果。因此,将基于智能合约下的背书节点服务应用于各种条件下的无人机集群中可实现现场态势分析,对执行任务后复盘总结、查漏补缺提供直观依据,根据背书节点的签名追溯责任,并依据情报等级采用不同的惩罚措施和改进措施,对以后飞行任务分工调整运用起到指导作用,提高了无人机集群飞行效率。
1.5 小结
通过分析无人机集群执行任务过程中存在的通信依赖强、应变能力不足、信息传递时效性差及易受干扰等缺点,提出基于智能合约的去中心化特点以用来解决无人机集群在执行任务过程中通信依赖强问题、基于智能合约的成员资格服务以解决无人机集群在执行任务过程中信息传递时效性差和应变能力不足问题、基于智能合约的背书节点服务以提高无人机集群飞行效率、基于智能合约的同态加密技术和和椭圆曲线密码技术以解决无人机集群执行任务过程中易受干扰问题;最终实现无人机集群系统自主通信、实时通信、态势分析和加密通信,对提高无人机集群执勤效率、高质量完成任务和出色的发挥出其优势提供参考。
2 智能合约在无人机集群应用中的漏洞
2.1 整数溢出
对应场景及解决方案:在加密通信中,基于智能合约的同态加密技术可实现先计算后解密等价于先解密后计算的功能,在进行计算和加解密过程中,若采用同态加密技术中的先计算后解密的功能,会涉及到整数溢出漏洞问题;根据漏洞原理和漏洞判断条件,可对所有的整数变量添加验证条件[10];使用SafeMath 库中的add,sub,multi,div 函数进行计算。
分类:整数上溢,整数下溢。
漏洞原理:uint256 在EVM 中的数据位数是0~255,当数值超过这个范围就会发生溢出,因此对“+”“-”“×”“/”操作后得到的变量没有及时进行值的验证就会产生该漏洞。
漏洞判定条件:没有使用SafeMath 库操作,且使用“+”“-”“×”“/”操作后未对结果进行溢出判断。
2.2 重入
对应场景及解决方案:在实时通信中,若攻击者调用了无人机集群系统内类似call.value()这类转账函数时,尽管无人机集群系统已经收到新命令仍然会执行之前的命令,这仍将导致信息传递时效性差和应变能力不足;根据漏洞原理和漏洞判断条件,可使用其他转账函数(比如Solidity 内置的transfer()函数);先修改状态变量,再进行转账操作。
漏洞原理:当攻击者调用了在函数内部使用了call.value()转账的转账函数[11]时,call.value()会触发攻击者合约中的被其改写过了的fallback()函数,其内部可再次调用转账函数,从而不断从漏洞合约递归转账到攻击者合约;并且转账函数是在call.value()转账操作之后,才修改漏洞合约中余额的状态变量,这两者共同导致了该漏洞的产生。
漏洞判定条件:使用了call.value()进行转账操作,且在转账后才再修改状态变量。
2.3 访问控制缺陷
对应场景及解决方案:自主通信和实时通信中分别涉及各个节点间实现了信息自我验证和基于智能合约下的成员资格服务身份验证,在验证过程中,若错误的使用某些关键字,则会导致合约被非法攻击;根据漏洞原理和漏洞判断条件,可通过不要将判断条件及关键函数的访问关键字错误使用就不会产生该问题。
漏洞原理:某些功能的验证条件存在设计缺陷,默认的变量或函数访问关键字[12](private,public,external,internal)和2 种底层调用方式(call()和delegatecall())等的使用错误,使某些关键函数能被外部轻易访问,从而使攻击者获利或者合约故障。
漏洞判定条件:关键函数的未添加正确的函数访问关键字,或者函数内部的判断条件逻辑有误。
2.4 跨合约调用
对应场景及解决方案:在自主通信、实时通信和态势分析过程中,会用到call(),delegatecall(),callcode()3 个函数来实现跨合约调用,尤其是在自主通信中,各个节点间要实现信息自我验证、传递和管理,因此跨合约调用漏洞不容忽视;根据漏洞原理和漏洞判断条件,可减少对这3 个函数的使用,相应的功能可以使用高级函数来实现。例如,直接指向给定地址的合约以调用特定的函数,以及转账操作使用transfer()或send()函数实现。
漏洞原理:Solidity 提供了call(),delegatecall(),callcode()3 个函数来实现合约之间交互访问;若处理不当,很可能会产生一些致命的漏洞。如call()函数注入漏洞,使用不当时可使外界直接控制合约中call()函数相关的参数,从而访问合约的其他重要函数。
漏洞判定条件:在函数中使用了带有参数的call(),delegatecall(),callcode()方法,且其参数对于外界来说可以被控制。
2.5 拒绝服务攻击
对应场景及解决方案:在实时通信中,若攻击者通过消耗PKI 和MSP 资源,使得用户无法获得成员资格,因此也无法获得相应的权限,使合法用户被拒绝服务;根据漏洞原理和漏洞判断条件,如果合约需要对外部函数调用的结果进行处理才能进入新的状态,就要考虑外部调用可能一直失败的情况。也可以添加基于时间的操作,以防外部函数调用一直无法满足require判断。(一般地,完整的if-else,require,assert 语句都有2 条分支,true 则继续执行,false 则回退;函数调用也有不同的分支,可以使用函数的返回值作为判断依据,也可以将函数是否顺利执行作为判断依据,因此,开发者在编写智能合约时,应加入函数执行异常的处理机制)。
漏洞原理:攻击者通过消耗合约的资源,让用户短暂或者永久地退出该合约,扰乱、中止、冻结正常合约的执行,从而把以太币锁在被攻击的合约中;有些时候,合约被编写成进入新的状态,需要将以太币发送到某个地址或者等待来自外部的某些输入[13]。当外部调用失败或者由于外部原因而被阻止时,这些模式也可能导致拒绝服务攻击。
漏洞判定条件:没有对一些能够被外部调用影响的重要变量或函数添加执行失败时的异常处理机制。
2.6 短地址攻击
对应场景及解决方案:在加密通信中,在利用椭圆曲线密码技术对智能合约内容加密和同态加密算法时,在进行加密操作和实现密文间的多种计算功能时,存在以00 结尾造成短地址攻击漏洞;根据漏洞原理和漏洞判断条件,可在编写代码时添加对地址长度的检查机制,即可有效防范短地址攻击漏洞。
漏洞原理:短地址攻击是指调用其他合约的时候,特意选取以00 结尾的地址,并且传入地址参数的时候省略最后的00,导致以太坊虚拟机(EVM)在解析数量参数的时候会在参数末尾错误地补0,最终导致超额转出代币。当参数传递给智能合约时,EVM 就会根据ABI 规范将参数进行编码,就是把Solidity 编写的合约等内容转换成机器可以运算的二进制编码[14]。
漏洞判定条件:函数未对传入的地址参数进行长度检查。
2.7 时间戳依赖
对应场景及解决方案:在自主通信和实时通信2 种情况下,智能合约的执行会依赖当前区块的时间戳,尤其在实时通信条件下,为使无人机集群能在第一时间收到来自管理员的命令,达到信息传递的时效性,导致对时间戳依赖程度较高;根据漏洞原理和漏洞判断条件,可不使用区块时间戳作为判定胜负或该改变重要状态的决定性因素;可通过指定区块编号来更改合约状态的方法可能是更安全的。
漏洞原理:时间戳依赖,就是指智能合约的执行依赖当前区块的时间戳,随着时间戳的不同,合约的执行结果也有差别。矿工在处理一个新的区块时,如果新区块的时间戳大于上一个区块的时间戳,并且时间戳之差小于900 s,那么新区块的时间戳就是合法的(这是由以太坊协议规定的)。然而,如果矿工有能力稍微调整时间戳,在智能合约中错误地使用区块时间戳,将会造成严重的后果,这就是时间戳依赖漏洞。
漏洞判定条件:在改变重要状态或者判定条件部分使用了时间戳。
2.8 tx.origin 漏洞
对应场景及解决方案:在态势分析过程中,在运用背书节点服务时要进行自我验证,此时会遍历调用栈,调用全变量tx.origin,这会导致合约受到攻击;根据漏洞原理和漏洞判断条件[15],合约开发者要尽量避免使用tx.origin,可以改为msg.sender。在权限验证时候,采用require(this==msg.sender)或者require(owner==msg.sender)。
漏洞原理:tx.origin 是Solidity 中的一个全局变量[16],能够遍历调用栈并返回最初发送调用的账号的地址,即tx.origin 是整个交易过程中最初的哪个合约者的地址。在智能合约中使用tx.origin 变量使用身份验证,会导致合约受到攻击。
漏洞判定条件:在权限验证的时候使用了tx.origin。
2.9 小结
通过分析智能合约在无人机集群执行任务过程中的漏洞,包含整数溢出、重入、访问控制缺陷、跨合约调用、拒绝服务攻击、短地址攻击、时间戳依赖及tx.origin漏洞,通过分析漏洞原理、漏洞判定条件及结合对应场景提出解决方案,具体对应关系见表1;研究智能合约在无人机集群中的漏洞能够降低其带来的安全风险,同时为开发规范的智能合约以及对漏洞的检测提供参考。
表1 漏洞类型及其所涉及的应用场景
3 结束语
本文以无人机集群为研究对象,为解决无人机集群系统现有存在的通信依赖性强、应变能力不足、信息传递时效性差及易受干扰等安全性问题,结合智能合约去中心化、防篡改、高度自治等典型优势特征,提出智能合约在自主通信、实时通信、加密通信及态势分析4 个方面的典型应用,对提高无人机集群执行效率、高质量完成任务及出色的发挥其优势提供保证,为智能合约更好地应用于无人机集群并发挥其优势提供参考。同时重点分析在4 种应用场景下潜在的8 种智能合约漏洞,分别为整数溢出、重入、访问控制缺陷、跨合约调用、拒绝服务攻击、短地址攻击、时间戳依赖及tx.origin 漏洞,并根据漏洞原理及应用场景提出相应的解决方案;由于智能合约漏洞的存在会影响智能合约在无人机集群应用过程中的安全系数,关于智能合约漏洞的检测技术研究变得尤为重要。因此,在今后研究中将重点关注基于深度学习的智能合约漏洞检测方法,实现快速、有效地检测出智能合约在无人机集群中的潜在安全漏洞。