传统的 计算机 程序一般运行在某个节点或集群上,为某个机构或个人拥有和控制。这样的计算机程序可以随时施加人工干预,可以随时控制。然而,区块链上的智能合约则是一种全新的计算范式。智能合约一经部署就难以修改,其执行也是自动执行,不受人为干预。因此,如果智能合约有安全漏洞,就很难防范黑客的攻击。当下,专业技术人员都在努力寻找合适的方式,提高智能合约的安全性和可靠性,帮助保障大家的资金安全。根据一份针对以太坊智能合约的最新调查研究显示,在安全问题研究人员看来,智能合约属于新兴事物,所以缺陷和漏洞还是非常多的。
所谓“智能合约”,其基本内涵就是指可以将一些带有合约性质的条款嵌于我们日常使用的硬件和软件当中,目的是让那些违约者在违反合同时付出一定代价。Szabo将实体售货机称为“智能合约的原型”,因为实体售货机就是根据屏幕上所显示的价格,收取用户投进来的硬币,掉出用户所选中的商品并且正确找零。
以以太坊为例。以太坊是一个开源的有智能合约功能的公共区块链平台。区块链上的所有用户都可以看到基于区块链的智能合约。但是,这会导致包括安全漏洞在内的所有漏洞都可见。如果智能合约开发者疏忽或者 测试 不充分,而造成智能合约的代码有漏洞的话,就非常容易被黑客利用并攻击。并且越是功能强大的智能合约,逻辑就越复杂,也越容易出现逻辑上的漏洞。同时,智能合约语言Solidity自身与合约设计都可能存在漏洞。
以太坊开源软件主要是由社区的极客共同编写的,目前已知存在Solidity漏洞、短地址漏洞、交易顺序依赖、时间戳依赖、可重入攻击等漏洞。在调用合约时漏洞可能被利用,而智能合约部署后难以更新的特性也让漏洞的影响更加广泛持久。
另外,以太坊虚拟机(EVM)对于智能合约能够做的事情存在很多硬性限制。这些都牵扯到平台级的安全,甚至可能会威胁到用户特定合约的安全。
伦敦大学学院(Unive rs ity College London)的计算机科学家Ilya Sergey表示,目前专业技术人士还没有完全搞清楚智能合约中存在的安全漏洞和潜在风险。他曾经参与过一项针对智能合约的调查研究。Sergey及其同事借助一款创新工具,对将近100万份的以太坊智能合约样本进行了分析。结果发现,其中约有3.4万份都是存在安全隐患的,包括导致Parity事件的那一份。Sergey介绍说,自己和团队其他成员的分析工作,就好比是与自动售货机互动。研究人员随机按下某个按钮,接着记录机器在运行过程中出现意外事故时的相关状况。用他的话说:“我认为,目前我们没有发现的安全漏洞还有很多,需要继续分析并且进行分类。”
在实践中如何提高智能合约的安全性?给出以下建议,在实际编程中尽量遵守,你的合约将更具安全因素。
更完善的编写测试。
建议提供容错和自动错误赏金。
为最糟糕的情况做准备。智能合同中的漏洞,应该尽可能让它安全地恢复。
添加额外的安全机制。合同的管理者可应急性地冻结合约。
限制合约资金存放金额,提高攻击者成功的门槛。
不要从零开始编写你所有的代码,尽可能参考成功者的合约。
注意开发平台的限制。