1. 首页 > 自媒体

以太坊智能合约是什么?智能合约安全性如何?

以太坊是一个比较著名的运行智能合约的去中心化的平台。康奈尔大学教授加密货专家E. GünSirer认为,以太坊区块链网络与比特币相比,在去中心化方面更胜一筹,因为以太坊节点在全球更分布,它的参与者来自不同的更多实体。而比特币的集中度很高,56%集中在数据中心及矿石领域,更有利于结构式的分布。

另外,以太坊发行自己的货币——以太币,用于调整激励机制,来奖励给寻找区块的矿工。以太坊与比特币相比,主要存在四点区别:

一、以太坊基于账户,而比特币基于UTXO(未花费输出);

二、以太坊图灵完备的脚本语言比比特币更强大,支持智能合约运行;

三、以太币的发行不是主要目的,是智能合约品台激励调整机制的副产品;

四、以太坊计划在不久的将来过渡至PoS(权益证明),比特币仍然停留在PoW(工作量证明)上。

如此来看,以太坊回到了账户的概念,这个账户包括地址、余额和代码(可选)。账户分为两种类型:一是外部账户,一般是个人或公司实体拥有的,合约以账户的形式存在;二是合约账户,合约以代码的形式存在。

那么,智能合约讲解执行呢?在以太坊中,所有账户加在一起就是整个网络状态,每个网络状态由每个区块更新,区块可看成是一个状态转移的函数,是状态发生的变化,所有账户与网络、其他账户、其他合约和合约状态之间的交互都通过“交易”进行。

在了解以太坊的背景之后,我们再来看智能合约。这个概念最早由NickSzabo在15年提出,智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议。

有人把智能合约称为区块链2.0,它确实有别于以比特币为代表的数字货币。在以太坊中,智能合约由网络本身执行,具有诸多特性:网络共识不需要可信第三方、无人可依违反合约、无法伪造合约的执行、允许在区块链上达成永久的P2P的共识。

简单看智能合约的优点和缺点,有很多优点可以带来一些新的社会合作模式。但其实也存在很多问题,比如效率低,只能做高值低频工作、法币支持困难、数模绑定难题、代码安全问题、隐私问题等。

而以太坊智能合约有四个目的:存储和维护数据、管理不可信用户之间的合约/关系、作为软件库为其他合约提供函、支持复杂权限管理。到底看其实很通用,并没有针对某些特定的应用做优化,并且上面这些特性可以组合使用。这是以太坊一直坚持的,做一个最基本、对代码执行机制的支持。

很多年前人们学习数据库,数据库里有一个叫存储过程,它是一个预先编制一系列SQL语句,存在数据库里面,不用临时现编语句,这跟我们现在看到智能合约很类似。其实从多个渠道验证智能合约并不是特别新的概念。存储过程是管理人执行,智能合约同样,但智能合约权限管理是一个最大的问题,很多的漏洞都是在权限管理的时候出现,对用户的地址、对数据拥有者没有做严格验证导致它出现问题。

下面的我们来看EVM(以太坊虚拟机)的具体执行。其实虚拟机也不是新概念,以太坊是通过自己的虚拟机,在虚拟机框架里运行合约代码,每一个节点执行的是虚拟机的代码。

以太坊虚拟机设计目标,首先要简洁,操作码越底层越好,数量尽量减少;其次是空间高效性、确定性,代码的执行应该是确定的,每一次重复执行是相同的结果;然后是专业性,因为要特别针对20字节的地址和密码学中常用的32字节数据做一些常用的处理;最后是安全性,以太坊有一个特别的设计——GAS机制,来自于区块链本身有这样一个激励机制可以设计GAS机制。

我们做了一个对比,以太坊的虚拟机和JAVA虚拟机,前者更轻量级,然后有GAS机制,可以极大减轻它做其他安全措施的压力。它的范围会小一点,主要是智能合约的应用,而JAVA虚拟机是一个更复杂虚拟执行环境,适用于各种应用场景。

说到GAS问题,以太坊想了一个经济机制,就像有人说比特币虽然解决了分布式系统一致性的问题,但它并不是一个完美的经济方案。但以太坊想了一个GAS方案,每一个合约包含GAS,GAS就像汽油,合约执行时会“燃烧”掉,虚拟机操作时需要GAS才能执行,每一笔交易都有消耗的GAS的最大数量。当GAS消耗完以后,如果当前执行没有完成,就会回滚到交易最初的状态,所以你必须把足够的GAS冲进去,才能够保证交易正常进行。

看一下智能合约的几个例子,以太坊白皮书上有一个非常简单的事例,就是代币系统,是只包含操作(send)的数据库,保证Alice有足够的钱,并且发起了交易,很简单几行代码完成了转帐操作。

还有一些类似的公共注册,像常用的DNS系统,中间有很多的安全问题,包括到底谁有DNS控制权,到底争论了很久,其实这种问题完全可以用以太坊实现:把一个名字注册到一个地址,这个地址很容易放在链上,到底需要的时候可上面这些链上查找,像区块链这样的平台很适合DNS公共查找基础平台。

此外,任何公共分布式数据存储都可以考虑智能合约解决方案。传统分布式数据库分为两种:物理分布式逻辑集中式、物理和逻辑上都是分布式,但实现难题在于数据一致性、不同分区之间的可靠性、数据读写操作的权限等。如果换一个思路,通过智能合约,其实可以有一个新的路径让底层区块链的共识算法保证数据的一致性,数据可靠性也不依赖于单点稳定性,单点的崩溃不会造成全网数据的丢失,智能合约严格传递了权限,操作的结果在全网进行记录。但性能问题目前未达成共识,目前只适用于关键数据上链,不适用过大的存储体积和过高的交易吞吐。

智能能源网、物联网也是智能合约常见的场景。另外还有一个去中心化的预测市场,再往前走一步,就变成了有一点像赌博性,比如NBA西部总决赛开始了,你可以预测,是火箭赢还是勇士赢,把到底的预测放在一个分布式平台上去做,它的模式是用一些购买费用看到底谁会赢,它的价格代表预测的概率,如果你去买到底都不认可的人,这样才会有一个超额的回报。

智能合约本质是计算机程序,计算机程序就是代码,只要是代码就会大概率出现漏洞。

来看几个案例,4月22日美图合约漏洞导致价值归零,4月24日SMT智能合约类似的漏洞被黑客利用。这是一个很严重的问题,因为普通代码的问题,可能丢失数据、可能造成崩溃,但智能合约的漏洞被利用,造成的是最直接的经济损失。

今年年初,我们看到新加波科研工作者对以太坊上的智能合约做了细致分析,主要是对漏洞进行分析,设计了合约漏洞的形式化验证方法,设计了合约漏洞的检测工具,并在Github上开源。

按照它的分析,大致分成三类:一是贪婪型,有进无出型,相当于以太币锁定在合约上,永远无法取出;二是挥霍型,任何人都可以得到合约中的以太币;三是自杀型,任何用户都可以终止该合约。

研究人员对几万个合约进行了分析,实验结果显示69%的合约存在问题,最大%都存在问题。就是一小段代码,框出来了,如果用安全加值就不会溢出。但是开发者没有正确采用,它用了一个简单的没有考虑它可能会有溢出的可能,带来了问题,导致后门被利用,漏洞被利用带来了很大的危害。这就是重入攻击,类似还有重放攻击、短地址攻击。

这个问题我们必须得解决,其实有这样一些可能的思路,可以将合约安全性问题得到显著改善:首先是检测,检测包括静态形式化检查和验证机制、动态分析以及模糊测试技术。还有一个思路是对整个链的设计,从新的角度考虑,功能分层,包括对操作系统分装,这两种角度可以同时发力,共同努力让代码质量有一个提升。

来具体谈谈检测技术,这个技术在智能合约里有广泛的应用前景,叫CFI,最早在CCS2005提出,并被广泛应用于安全漏洞分析理论研究之中。前面文章我们发现的一些漏洞是由于底层EVM自身执行机制的问题导致代码的非正常跳转,其实CFI可以防止这种重入的发生。CFI核心思想是限制程序运行中的控制转移,使之始终处于原有的控制流图所限定的范围内。

最后再来看一些常见的测试,比如模糊测试,通过对目标系统提供非预期的输入,不正常的输入看输出是不是有问题,有的时候靠异常的输入来考验程序。在这种情况下,模糊测试是比较好的手段,针对智能合约可以有另外模糊系统,在另外层面完成合约执行,提高效率,分析结果看会不会发现隐藏的漏洞。

刚才讲代码层的措施,从整个链的设计角度,看是否可以对安全性有所增强。这里面主要提出了链结构分层,底层区块链就做关键数据存储和研究,其他复杂业务在链外进行操作。

从这些分层结构,我们可以得到一些启发:首先链上的合约逻辑复杂性会大大降低,链上的代码本身不会特别的复杂,代码越简单出现漏洞可能性越小,因为漏洞往往都是很复杂的流程,把复杂过程放到链下处理,关键数据存储再用链上合约,这是一个我们能想象到的,从结构的角度来解决安全性的问题。

我最近比较关注一个叫Elastos的项目,它做区块链的操作系统,我觉得这个想法对于安全性有帮助,要基于区块链,基于Elastos创造一个未来安全互联网,这是一个小梦想,当然很难,但是从架构设计上还是有一点启发,把操作系统对于应用访问做了一个分装,所有的应用不能直接访问网络

资源,保证分装这一层安全性,这样应用对于网络不透明了,应用操作系统提供了访问机制,这也是一种新的思路。

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:http://www.fjxmta.com/zmt/32594.html

联系我们

在线咨询:点击这里给我发消息

微信号:wx123456