1. 首页 > 娱乐生活

重庆公安局正式投入使用区块链“社区民警智能名片”

智能合约漏洞,如何应对?

在一些联盟链中,智能合约的设计是可以在部署之后更新的,当然这种更新需要一定的线下协商流程。要应对区块链智能合约的安全漏洞问题,未来需要普遍考虑设计相应的智能合约协商更新机制,降低漏洞修复的成本。

但现在,我们需要面对现实,做出几乎唯一可行的、切实有效的努力——在智能合约上线之前,对其进行全面深入的代码安全审计,尽可能的消除漏洞,降低安全风险。

360代码卫士团队安全专家表示,当前区块链智能合约中可能出现的漏洞至少有20余种。以下列举一些常见的区块链智能合约的漏洞类型及其可能造成的风险,这些漏洞在智能合约上线之前,都应该进行详细的排查。

整数溢出

◆智能合约中危险的数值操作

◆可能导致合约失效、无限发币等风险

越权访问

◆智能合约中对访问控制处理不当

◆可能导致越权发币风险

信息泄露

◆硬编码地址等

◆ü可能导致重要信息的泄露

逻辑错误

◆代理转账函数缺失必要校验

◆可能导致基于重入漏洞的恶意转账等风险

拒绝服务

◆循环语句、递归函数、外部合约调用等处理不当

◆可能导致无限循环、递归栈耗尽等拒绝服务风险

函数误用

◆伪随机函数调用和接口函数实现问题

◆可能导致可预测随机数、接口函数返回异常等风险

漏洞永远都会存在。未来区块链行业一定会出现更多的安全问题,之前传统互联网领域里面遇到的安全问题,区块链行业里面一定也会遇到。区块链行业要能够与网络安全行业做到协同开放,才能使行业更加健康稳定安全的发展

解析:智能合约与以太坊还有区块链的关系,具体请看下文,智能合约是运行在计算机里面的,用于保证让参与方执行承诺的代码。之所以目前都是基于区块链的智能合约,是因为区块链的几大特性:去中心化、不可篡改、高可用性。区块链的智能合约,你也可以理解为,双方在区块链资产上交易转账时,触发执行的一段代码(合同),我们称它为智能合约(这是目前最常见的)。

区块链的好处就是透明,所有信息对外披露,目前基于以太坊的智能合约是全球最主流的智能合约,以太坊上部署的合约,可以选择开源代码,这意味着,所有人都可以知道这个合约的内容及作用,而且无法修改。

传统的合约,我们一般需要双方签署合同进行执行,还需要法律的保护,需要咬文嚼字...智能合约把它融入到区块链当中,避免了一些问题。

传统合约一旦出现了问题,需要很多机构来介入仲裁,而基于区块链的智能合约,会编写一个图灵完备完全无须第三方信任的代码让用户来构建智能合约,而根链则是需要一个叫50%信任制的仲裁联邦。这个仲裁依然不是活人去仲裁,也是代码。这个仲裁平台的概念就和我们现行的经济活动里的法庭类似。

举个例子:我们拿今年最流行的ICO举例(目前国内禁止ICO),ICO

的项目发起方发起了一次代币众筹募资活动,也叫ICO,筹集的是虚拟货币以太坊,项目方会根据投资的以太坊来兑换相应的公司权益代币(以太坊ERC20代币,对应着这个项目的价值),我们普通人把以太坊转账给项目方后,如何保证项目方一定会把他们的权益代币给我?这里就用到了智能合约。当你把你自己的以太坊转移到项目方的合约账户地址后,会执行一段开源的合约,里面规定了一系列信息,比如我们筹集资金多少时间,筹集多少个以太坊,兑换比例等等,这些一目了然,有了这个,你投资出去的以太坊,会自动收到项目方发来的代币。

换到线下,这种问题相当于,我把钱给你了,你什么时候给我货呢?得签个合同吧,合同谁来保证有效呢,各大法律政府机构吧。换做线上就是智能合约的仲裁机构,保证合约的执行,而且你们的这笔交易以及合同内容,都是完全暴露在大庭广众之下的,任何人可查,无法作假。

 

信任问题就是这么解决的。当然,智能合约也是有缺陷的,因为有许多问题智能合约还是无法解决的。

比如:

第一,智能合约在线上交易时涉及到了法币的交易,比如人民币、美元的交易时,就稍微麻烦了一些,我们知道,区块链一直是标榜去中心化的,可是,一旦涉及到法币相关的交易,我们还是不得不引入一个权威的第三方,比如有一个强大的第三方做为信用保证发行了人民币的代币,另一方发行了美元的代币,那么任何人就可以在此基础上无忧无虑的进行法币的交易以及执行智能合约了,交易完成之后在第三方在兑换回法币即可,前提是我们都信任这个第三方。

第二,智能合约对于线下(日常生活)当中的帮助目前是不大的。有很多线下应用的例子:比如租房,房东可以发布这样的智能合约,访客必须支付对应的价值资产就可以根据合约自动获得房子密钥(钥匙)。比如,购买二手车时,我们都知道可能会存在很多问题,商家会故意不说,倘若我们在每辆车身上都装有问题记录仪,运行在区块链上面,那么二手车,问题车的问题就迎刃而解了,除非他把所有区块链记录仪配件都换掉,不然我们还是可以根据区块链上的信息查询到车子的真实情况。不过这些应用现在来说为时过早,一是技术上有难度,二是法律对此目前也没有保护。

第三,智能合约的编写者必须非常严谨,如果出现漏洞,容易被黑客利用,就很惨了,比如著名的DAO事件,导致用户丢失了大量的以太币。

智能合约是什么

从用户角度来讲,智能合约通常被认为是一个自动担保账户,例如,当特定的条件满足时,程序就会释放和转移资金。

从技术角度来讲,智能合约被认为是网络服务器,只是这些服务器并不是使用IP地址架设在互联网上,而是架设在区块链上。从而可以在其上面运行特定的合约程序。

但是与网络服务器不同的是,所有人都可以看到智能合约,因为这些智能合约的代码和状态都在区块链上(假设区块链是公开的)。而且,与网络服务器不同的是,智能合约不依赖某个特定的硬件设备,事实上,智能合约的代码由所有参与挖矿的设备来执行(这也意味着进入单个合约的算力是有限的,尽管挖矿难度的自动调整会调节这种影响)。

智能合约是编程在区块链上的汇编语言。通常人们不会自己写字节码,但是会从更高级的语言来编译它,例如用Solidity,与Javascript类似的专用语言。这些字节码确实给区块链的功能性提供了指引,因此代码可以很容易与它进行交互,例如转移密码学货币和记录事件。

代码的执行是自动的:要么成功执行,或者所有的状态变化都撤消(包括从当前失败的合约中已经送或接收的信息。)这是很重要的,因为它避免了合约部分执行的情况(例如,在证券购买交易中,证券所有者已经转移发送了证券,但是密码学货币的支付转移却失败了)。在区块链环境中,这尤为重要,因为没有办法来撤消执行错误所带来的不好的后果(而且如果对手不配合的话,根本就没有办法逆转交易)。

智能合约面临的问题

智能合约目前还处在初级阶段,尚未有任何实质进展。关键问题是信任度的问题,这与影响区块链实施的问题类似:这些系统都设计成了无需信任的环境,这意味着无法改正出现的错误。例如,在区块链中,如果你将货币发送给某个地址,这个操作是无法撤销的。因此,如果你与欺诈者进行交易 – 或者你已经将货币发送到错误的地址中 – 那么金钱损失是无法挽回的。

智能合约能够转移欺诈对手的问题 – 事实上,这就是智能合约设计的原因之一:无论何时,合约都能能够可靠地监控合约中参与方的执行情况,参与方是无法进行欺骗的。

然而,问题并没有解决,只不过是出现在了新的层级:例如,合约可能有漏洞,能够转移证券,但却无法转移货币。

在现实生活中,这些事情可以通过中心化的系统来撤消。但是如果是去中心化的系统,则只能自己承担风险。

同样地,也有欺诈的问题:某人需要设计(编程)合约,在合约设计时就会需要确保没有欺诈的问题。至少参与者要确保:

高层级(例如Solidity)的代码中需要充分描述合约参与方的目的

代码中的字节码实际上相当于高层级的代码,需要在进入合约之前进行审核

合约信息需要很好地理解,以避免出现乌龙指操作(例如,人们用错误的报价方式-例如USD/ERU而不是EUR/USD-这会导致严重损失。

在现实生活中,上述的这些问题原则上都可以在事后进行处理解决,如果需要的话,还可以通过法院,但是在无需信任的工作量证明区块链中这是不可能的:问题

是为什么人们想要依赖一个工作量证明系统(背后的原理是浪费大量的能源来挖矿,这样的话攻击这个系统在经济上是不划算的)而不是使用一个中心化运行的公开账本和依赖中心化的权力机构 – 政府、法院等 – 来执行合约。

 3/3   首页 上一页 1 2 3

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

联系我们

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

微信号:wx123456