以比特币为首的区块链技术将智能合约的构想落地,随之以太坊将智能合约发扬光大。以太坊将比特币交易中的脚本变成了一种通用的图灵完备的编程语言。但是过于自由的以太坊智能合约编程语言也使智能合约会和传统软件一样,被无处不在的安全漏洞和Bug所困扰。自从以太坊正式上线以来,由于智能合约漏洞/缺陷所带来的经济损失数以亿计。
北京景蓝团队在审计大量智能合约时,发现相比传统软件,智能合约存在的安全问题更加严峻,也更为棘手:
1.智能合约的可信度是来源于不可篡改性,以太坊的智能合约一旦部署上线后就无法再修改。一旦合约存在安全漏洞,任何人都可以发起攻击,并且在攻击发生后,假如合约没有一定的防御措施,将会无法阻止安全问题的进一步恶化。这无论是对合约本身的经济价值(如Token)还是公众对项目的信任,都会造成严重的损害。
2.智能合约部署上线后,一部分项目会公开合约源码。源码的公开一方面是增强用户对合约的信任度,但是另一方面也大幅度降低了黑客攻击的成本,代码中的任何一个小问题都有可能被黑客捕捉到并且加以利用。
3.智能合约开发过程涉及的问题更是方方面面,而智能合约发展时间比较短其本身还存在很多的不足;同时市面上专业的技术人员严重缺乏,无法避免人为因素引起的漏洞,因此稍有不慎就有可能留下致命的安全隐患。
在目前针对智能合约安全监测的办法中,无论是代码测试和审计,都存在很大局限性,在逻辑上,响应很慢,必须在安全风险已形成后才能被加以确认和辨别。因此,形式化验证成为甄别智能合约安全性能的一把利剑,相比传统验证方式,形式化验证具有极高的安全有效性。
我们可以把形式化验证当做一个基于数学模型的验证,而验证通过的条件是必须满足该数学模型具有的性质,这种数学模型的性质约定,主要是下面三点:
1.任何证明都是在一定的前提假设下的证明;
2.证明过程是依赖形式化逻辑理论的正确推理;
3.证明的最终结果(定理)是大家能够取得共识的结论;
这三条是形式化验证智能合约的基本条件,是信任基础。形式化证明是通过形式化逻辑的方式来表示合约代码,并加以严格地推理证明。这个过程依赖于数学逻辑推理的严密性,保证100%覆盖到到代码的运行期行为,可以明确保证在一定范围内的绝对正确,能弥补以上两种传统方式的局限。因此形式化证明在一些安全攸关的领域,如航天、高铁、核电、航空,已经逐步得到应用,并且取得了非常好的效果。
而智能合约代码,同样也是对安全要求极高,一旦出现问题,造成的经济损失更是不可估量。另外一些较为复杂的业务逻辑以及更高阶的性质,如经济学,博弈论范畴的问题,通过测试或者审计的方式更是难以有效验证。因而对于规模相对较小而设计复杂的智能合约而言,形式化程序验证无疑是保证其安全可靠的有效方法之一。
在一定的边界条件内,形式化验证可以保证代码的绝对安全可信,根本上杜绝了某一类漏洞问题。但随着智能合约应用范围的扩大,业务逻辑复杂度进一步增加,更甚者当涉及更深层次的经济学,博弈论问题,借助于形式化验证背后完备的数学理论和哲学思想,加以验证和证明,必将带来更多的惊喜。
e
网友评论