[发明专利]一种基于拍卖退款交易智能合约重入攻击漏洞的优化方法在审
申请号: | 202211163193.3 | 申请日: | 2022-09-23 |
公开(公告)号: | CN115470498A | 公开(公告)日: | 2022-12-13 |
发明(设计)人: | 陈虹;王颖辉;刘腊梅 | 申请(专利权)人: | 辽宁工程技术大学 |
主分类号: | G06F21/57 | 分类号: | G06F21/57;G06F21/56 |
代理公司: | 沈阳东大知识产权代理有限公司 21109 | 代理人: | 李在川 |
地址: | 123000 辽*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 拍卖 退款 交易 智能 合约 攻击 漏洞 优化 方法 | ||
1.一种基于拍卖退款交易智能合约重入攻击漏洞的优化方法,其特征在于,具体包括以下步骤:
步骤1:设定重入攻击智能合约,contract reentrancy合约是不含拒绝服务漏洞的合约;所述重入攻击智能合约是基于现有拍卖退款智能合约通过增加退款函数withdraw的方式,避免使用revert()方法进行优化得到的;
步骤2:为了验证重入攻击智能合约的有效性,使用promela语言将重入攻击智能合约转化为reentrancySecure.pml形式化文件,对重入攻击智能合约进行建模;
步骤3:将步骤2得到的重入攻击智能合约模型进行形式化验证。
2.根据权利要求1所述的一种基于拍卖退款交易智能合约重入攻击漏洞的优化方法,其特征在于,步骤1所述设定重入攻击智能合约具体为:
首先定义并输入当前领先者currentFrontrunner、当前金额currentBid、存储退款映射refunds和退款数组refund;若保存到合约中金额大于当前最高价,则继续执行支付函数bid()和退款函数withdraw();否则,则中止支付函数bid(),执行退款函数withdraw();
bid()函数带有关键字“payable”是带有支付性质的函数;退款函数将需要退款的地址借助变量refund来存储,依次退款,以此来避免重入攻击;
使用solidity语言进行重入攻击智能合约编写,合约名字为reentrancySecure,该合约首先定义mapping类映射refunds来存储用户之间的退款,避免拒绝服务攻击,随后设计bid支付函数用于用户间竞价,最后设计withdraw函数用于执行用户的退款;
设置支付金额为vether(v100)用于建议退款,点击bid按钮后,该笔交易成功执行,生成对应的合约地址及交易地址,花费一定的燃料费gas,然后点击withdraw按钮合约执行退款功能,vether被退回,该笔交易成功,仅花费很少的燃料费gas。
3.根据权利要求1所述的一种基于拍卖退款交易智能合约重入攻击漏洞的优化方法,其特征在于,步骤2具体为:
步骤2.1:首先将solidity代码翻译成等效Promela代码,将一部分solidity代码去除,其他部分直接或间接换成Promela代码语句;建模时对合约控制语句进行抽象,对合约控制语句进行形式化定义如下所示:
(B,σB,σM)→True:
(if(B){O},σB,σM)→(O,σB,σM) (1)
(B,σB,σM)→False:
(if(B){O},σB,σM)→(//,σB,σM) (2)
式1和式2为if语句,其中,B表示判断条件,σB,σM分别表示存储在智能合约上的全局变量和局部变量,判断条件分为True(真)和False(假),若判断条件为真时,执行操作O,∥表示若判断条件为假,不执行任何操作;
(B,σB,σM)→True:
(while(B){O},σB,σM)→(O,while(B){O},σB,σM) (3)
(B,σB,σM)→False:
(while(B){O},σB,σM)→(//,σB,σM) (4)
式3和式4为while语句,其中,B表示判断条件,σB,σM分别表示存储在智能合约上的全局变量和局部变量,判断条件分为True真和False假,若判断条件为真时,执行操作O再进行判断,∥表示若判断条件为假,不执行任何操作;
步骤2.2:在使用promela建模时,需要将solidity中的控制语句转换为promela语句;定义转化规则如下:
需要转化的只有上述if语句和while语句两个部分,promela中if语句的关键词需要以fi来结尾,如果达到条件,就执行相应语句,否则跳出循环;while需要转化成do关键字,同时以od来结尾,如果满足循环条件则一直循环,否则跳出循环向下执行;
步骤2.3:基于上述步骤对入攻击智能合约进行建模;
首先定义msg_sender,msg_value类型以及初始值、定义整型数组refunds用于存放退款、定义出价最高者currentFrontrunner以及出具金额currentBid;定义付款函数sendCoin,用于货币传输;定义amount和receiver,amount参数用于存储账户金额,receiver参数用于存储收款人即参与竞价的地址;定义交易函数bid:包含通道变量currentstate,用于存储当前参与竞价地址以及竞价金额;定义退款函数withdraw,用于进行地址的退款,同时避免重入攻击;
将上述提及所有函数使用关键字run来激活进程;最终得到重入攻击智能合约模型。
4.根据权利要求1所述的一种基于拍卖退款交易智能合约重入攻击漏洞的优化方法,其特征在于,步骤3进行形式化验证具体为:
利用Remix在线编辑器编写智能合约并编译运行,采用形式化验证工具SPIN进行形式化验证,包含语法校验和冗余校验,得出校验结果及运行日志;
将编写完成的“reentrancySecure.pml”文件导入到SPIN;对reentrancySecure.pml进行语法校验和冗余校验:使用“syntax check”进行语法校验,得出“无语法错误”的提示,使用“Redundancy check”进行冗余校验,得出“无冗余”的提示;使用“Verification”检验验证优化后的重入智能合约的安全性及效率,生成存储空间使用情况及运行时间。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于辽宁工程技术大学,未经辽宁工程技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211163193.3/1.html,转载请声明来源钻瓜专利网。
- 上一篇:承载膜结构、光学膜结构、光学模组及显示装置
- 下一篇:一种古红桔的种植方法