The invention belongs to the field of block chain security technology, and discloses a design method and system of security function of intelligent contract based on state lock. When EVM executes the call function, the rest of the execution paths of EVM will be blocked; when the call is executed as a whole, the rest of the execution paths will be opened; when the rest of the execution paths of EVM are blocked, withdraw will be requested again, and EVM will refuse directly. EVM returns to its initial state and completes attack defense. The invention effectively solves the reentry vulnerability by using the state lock control call function; in the balance of account B after the attack, the attacker only takes out five ether coins stored in the DAO, but fails to successfully capture the remaining 50 ether coins in the DAO. Therefore, it can be seen that the library function of the invention successfully prevents the reentry attack.
【技术实现步骤摘要】
一种基于状态锁的智能合约的安全函数的设计方法及系统
本专利技术属于区块链安全
,尤其涉及一种基于状态锁的智能合约的安全函数的设计方法。
技术介绍
目前,业内常用的现有技术是这样的:重入漏洞:每一个以太坊智能合约都有且仅有一个没有名字的函数,该函数称为fallback函数,当合约接收到以太币时,这个函数会被执行,用于向以太坊表明收到了以太币,攻击者利用这一机制,在fallback函数中,写入攻击的代码,当被攻击合约向恶意合约传送以太币时,以太坊虚拟机EVM就会直接执行攻击者合约的fallback函数,来获取以太币。具体来说攻击者调用withdraw函数取回合约中的以太币,在call将以太币发送给接收方,此时接收方的fallback被EVM调用,fallback里则再次调用Dao的withdraw,但是Dao的余额更新代码一直未被执行(该行代码用于减去调用方在该函数中的余额),也就是说这里就形成了一个循环,withdraw将一直被重复调用,直到Dao的以太币被盗取完为止。综上所述,现有技术存在的问题是:现有技术中,不能有效解决重入漏洞问题。技术人员运用transfer等指令代替call从而避免fallback函数被重复调用,然而从EVM上来说,transfer函数需要消耗更多gas,且不如call函数灵活,所以call函数并不能被完全代替。如果不考虑使用transfer,技术人员只能通过自身经验,在状态量改变后调用call函数,仍然很难预防重入攻击。解决上述技术问题的难度和意义:该技术问题难度:主要在于锁的创建必须在本地建立的library中用结构体存放 ...
【技术保护点】
1.一种基于状态锁的智能合约的安全函数的设计方法,其特征在于,所述基于状态锁的智能合约的安全函数的设计方法包括:步骤一:当EVM执行到call函数时,以太坊其余执行路径将被封锁;步骤二:当call整体执行完毕后,其余路径被打开;步骤三:当以太坊其余执行路径被封锁时,withdraw被再次请求,EVM将直接拒绝;EVM回到初始状态,完成攻击防御。
【技术特征摘要】
1.一种基于状态锁的智能合约的安全函数的设计方法,其特征在于,所述基于状态锁的智能合约的安全函数的设计方法包括:步骤一:当EVM执行到call函数时,以太坊其余执行路径将被封锁;步骤二:当call整体执行完毕后,其余路径被打开;步骤三:当以太坊其余执行路径被封锁时,withdraw被再次请求,EVM将直接拒绝;EVM回到初始状态,完成攻击防御。2.如权利要求1所述基于状态锁的智能合约的安全函数的设计方法,其特征在于,在EVM进入call函数之前,把锁关闭,当攻击者再次调用withdraw进入_call()时,锁n还处于真状态,断言无法通过,直接退回到原状态,交易失败;当_call完整运行完毕,锁n被打开。3.如权利要求1所述基于状态锁的智能合约的安全函数的设计方法,其特征在于,所述基于状态锁的智能合约的安全函数的设计方法进一步包括:第一步...
【专利技术属性】
技术研发人员:陈中育,赵相福,林飞龙,郑忠龙,骆宾逸,
申请(专利权)人:浙江师范大学,
类型:发明
国别省市:浙江,33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。