“黑客”这个词,相信大家再熟悉不过了。自从互联网诞生以来,黑客就成了以高超手段盗取用户信息的代名词。
然而,现在黑客也越来越与时俱进了:美国甲骨文公司旗下的 PeopleSoft 软件公司,不久前就发生了黑客袭击事件。按照常理来说,一般用户系统被侵入后,都会发生数据泄露。
数据泄露……咦,这怎么听起来有点像Facebook?
小扎:老子国会都道完歉了好吗!你还有完没完!
话说这黑客侵入系统以后,转了一圈,竟然没动数据!
啥情况?
紧接着,这个叫 PeopleSoft 的公司发现自己的电费突然开始猛增。原来,这名黑客利用这家公司的CPU挖了611 个门罗币,价值22多万美元!
这个“笑话”似乎告诉我们,未来世界最值钱的可能不是数据,而是算力哦!
看来,这传统意义上的数据安全,在区块链的世界要被重新定义了。那么针对于区块链,会存在哪些层面的安全问题?目前又有哪些可以解决得措施?
今天,小探请到了位于硅谷的丹华资本董事总经理 Judy Yan, 来给大家讲讲区块链世界的安全问题。
区块链:我招谁惹谁了?
话说区块链自从出现以来,关于区块链安全问题产生的奇葩故事就不少。除了交易所被盗,许多区块链项目自身的 Bug 也层出不穷。作为区块链投资人的 Judy,对这些故事可谓如数家珍。
最著名的黑客攻击事件要数The DAO。早在2016年,这个平台被盗了高达1.5个亿美金的ETH。攻击者利用了递归调用 splitDAO 函数这一技术层面的漏洞,这起事件同时也暴露了智能合约安全性的早期缺陷。
而去年 Parity Multisig 电子钱包版本1.5+的漏洞被发现,使得攻击者从三个高安全的多重签名合约中窃取到超过15万ETH(约3000万美元)。而这个漏洞竟然是工程师一不小心在编程时写了一个不闭合的函数。
而另一个项目 IOTA 前一阶段被诟病大跌的原因是底层最关键的哈希加密函数不工作。
就在今年三月,BEC(美链)爆出 ERC20 协议安全漏洞,攻击者利用整数溢出BUG,可无限生成代币,直接导致BEC币值跳水,几乎归零。
如此种种的事件的发生,让人们不得不重新面对区块链的安全问题。
据 Judy 回忆,菩提去年在 Qtum 上进行合约部署时,虽然当时有很多人质疑Qtum能不能上线(后来上线成功),合约部署是否会使得运行机制瘫痪等问题,但是Judy只问了菩提和量子一个最简单问题:
用户会不会丢币?
这个问题听着很简单,实际上反映了所有区块链都是建立在安全信任的基础上,吞吐量等问题都可以被牺牲,慢慢改进;但如果丢币,整个系统就不会再有人使用。
“安全,是唯一不能牺牲的因素。”
在Judy看来,公链的安全、智能合约的安全、云安全这三个层面都是未来最值得关注的区块链安全层面。
其实在做区块链安全的项目有很多。比如:Zeppelin 是一个社区驱动项目,它构建了安全智能合约的开源架构,目的在于实现安全智能合约的开发。目前有很多优质的海外区块链项目都采用了 Zeppelin 的智能合约安全服务。
Quantstamp 是一家智能合约的安全审计平台,而且还是为数不多的、被 YC 录取的区块链公司哦!小探也在之前名为《错过了区块链第一波淘金热?这家公司“卖铲子”被YC相中》的文章中介绍过。
区块链公司 Axoni 不是一家专门做智能合约安全的公司。但他们最近也在专注与形式化验证技术。开发了专门服务于形式化验证的智能合约语言 Axlong。
其中,Certik 是一家用形式化验证为智能合约和区块链应用提供安全性服务的公司。形式化应用?这个听起来好像很有故事!在讲故事之前,咱们先看看为什么智能合约和公链容易出现安全问题?
公链、智能合约的安全谁能承包?
我们先来看智能合约为什么容易出现安全问题。
第一,不可逆性:智能合约一旦发布在区块链上,合约的源代码是无法被修改的。
第二,代码开源:在平时不公开源代码的情况下都能被黑客攻击,更何况大多数区块链项目的代码都是开源的。开源只会让黑客的攻击将变得更加容易。
第三,成本高:如果将智能合约放在区块链上进行不断的安全测试,资产的不断转换会是一笔很大的开销。
第四,思维设限:即使开发者会预想智能合约在哪些情况下会遭攻击,再针对这些情景测试,但黑客的厉害之处在于,可以从程序员预想之外的路径下手。
由于智能合约在安全上存在的这四个方面问题,从而导致区块链上的数字资产很容易被黑客掠夺。
对于公链上产生的问题,Judy 用了一个清晰明了的比方来说明。
Judy 认为,区块链,尤其是在智能合约出现之后,是个两层的结构。其中一层为公链,在其上运行智能合约。 由于公链是一种开源的架构,智能合约的开发者每个人都可以在上面可以写一段脚本。
然而,这也是问题存在的根源:由于每个开发者动能用,所以在公链上书写脚本时,往往会带来意想不到的“副作用”。
这是什么意思呢?Judy 给小探举了个例子:
“假如我要在以太坊上写一个智能合约,我写这段智能合约的目的是A,但是我并不会预料出当A完成时,同时会出现副作用B,而B很有可能会使得公链系统瘫痪掉。”
那有没有办法提前得知是否会出现副作用B而避免悲剧的发生呢?
还真有!Certik使用的形式化验证就是目前解决这一问题的最佳方式。
什么是形式化验证呢?
根据 CertiK 联合创始人顾荣辉教授的讲述,形式化验证(Formal Verification)就是:用逻辑语言来描述规范,通过严谨的数学推演来检查给定的系统是否满足要求。
简而言之,形式化验证的作用就是让你只完成A的目的,而不会产生副作用B。
Judy认为,对于形式化验证,我们要从两个维度来看。
在传统维度上,形式化验证是一个统计学的概率问题。
比如说,如果你能计算出在执行A目的时90%的可能性系统不会出问题,那么对于一个手机应用APP的研发可能就足够了。换句话说,传统维度上大家只需要做“计算题”算出安全运行的概率就可以了。
但是在区块链的世界,我们需要的,是确确实实 100% 地确定我们在执行A目的时,不会有副作用B产生,底层系统不会受到任何因素的影响。那么显然需要我们进行完备性验证。