随着区块链技术应用的日益深入,安全问题越来越显得重要。但现实是,目前整个区块链行业的安全性并不乐观,据粗略统计,2018年全年已有近百起安全事故发生。仅2018年上半年,区块链领域因安全问题产生的损失就超过27亿美元。
如果区块链技术想要得到更大范围的应用,安全问题必须首先得到解决。那到底有哪些安全漏洞?又该怎么去解决应对呢?
区块链安全问题的产生
按照解放军信息工程大学斯雪明教授的看法,区块链安全问题的产生,主要来自于私钥的生成与保护、共识过程的中心化、智能合约代码漏洞、签名过程算法漏洞、系统实现代码漏洞等。
迅雷链底层开发工程师张骁从密码学的角度分析“安全”的含义,他将其总结为三个方面。
1.机密性。信息数据在传输的时候,会进行加密处理。如果信息被未获授权或者不拥有相应密钥的人拿到,是无法读取信息原文的,这就是信息的加密性。
2.完整性。即所传输的信息要保证是完整状态,不能在中间被恶意篡改或者增添、删除一些信息。比如一张欠条,其中的金额数字、归还日期以及欠款人等关键信息,不能够被涂改,否则就认为是完整性遭到破坏,直接作废,这就是最常见的一种对信息完整性的要求。
3.可用性。指相应的密码学的信息,在任何一个时间下都应该可以被外界所用。如前文所述的欠条,它应该保证在任何时候都能被拿出来、被展示出来,而不应该遗失、损毁。这就是信息安全中的可用性,也是信息安全保护的重要范畴。
在张骁看来,区块链安全问题有着自己的特性。区块链自身的不可篡改、公开透明等特性,既是早就区块链价值的基石,但同时也因此给安全性带来更大的挑战。
一方面,因为数据不可篡改,所以一旦链上出现了安全漏洞,就很难消除,甚至根本就无法处理,或者是需要付出非常大的代价。比如当年的DAO事件,最终就导致以太坊最终产生了硬分叉,这对一条公链来说,基本是致命性的伤害。
另一方面,因为区块链数据要公开透明,特别是链上的智能合约,必须对代码进行开源才能达成信任,如此一来,因为源码公开,再加上虚拟机以及编译器都是公开的,一旦有安全漏洞,就很容易被有心人发觉。这两点综合在一起,给区块链的安全性带来了更高的要求。
处理方案:测试先行,预防为主
针对这些安全问题,目前各大公链都推出了相应的解决措施,很多机构、实验室也开始相关研究。目前来看,主要是以预防为主,具体手段在代码上线前进行全面、完善的测试,这是区块链开发中的重要环节。
之所以以预防为主,是因为区块链作为去中心化系统,代码一旦上线运行,就不再受任何人控制,无法停止,硬性干预的后果非常严重,往往会导致分叉或者回滚。因此做好前期的测试工作,才是杜绝安全问题的根本。
目前常见的测试手段有共识机制安全测试,主要测试采用的共识机制能否抵御双花攻击、重放攻击等常见的攻击手段,以及是否有良好的容错能力。
此外,智能合约安全测试也很重要,主要检查智能合约是否存在常见的安全漏洞、是否可信以及是否符合规范和流程。此外,还可进行代码审计工作,在代码层次寻找可能存在的漏洞。
从底层架构上设计好安全系统
一些技术水平较高的公链,也在开始探索从底层架构上解决安全问题。比如屡遭安全问题的以太坊,就有开发团队开始审视其安全制度,认为现行智能合约架构中存在的多项漏洞,是以太坊安全问题频发的根本原因。该团队建议,未来对以太坊上智能合约添加相应的限制条款,如限制在智能合约中存储以太坊的数量,限制代码中函数的长度,要求每份合约程序都要有完整的注释,以及限制交易gas,强制添加自检程序等。
如果这一建议能够得到实施,将大幅提高以太坊上智能合约的安全性,只是目前推进得并不理想。
而今年闹出27起安全问题的EOS也似乎在考虑更改安全架构,其灵魂人物BM前段时间一连串反问中透露出的信息表明,未来EOS或许不排除抛弃DPOS架构,正是这种架构让EOS抗攻击的能力偏弱。
据迅雷链开放平台负责人张慧勇介绍,目前迅雷链已经把安全问题做到了共识机制的层面。
迅雷链采用的的共识机制是知名的DPoA+PBFT双重算法。其中,PBFT算法来实现秒级确认,以及确认结果的一致性,因为PBFT算法的特性就是所有结果都需经超过2/3的节点确认,由此确保了结果一旦产生,就不会产生回滚,也不会产生分叉。
不过PBFT算法通信量大,不适用于节点特别多的公链,而迅雷链有150万+个共享节点,同时PBFT防非法节点作恶的能力也比较差,因此迅雷链又用DPoA算法来加以弥补。
这种算法是从总节点中筛选出可用的优秀节点,建立备用节点池,再从中随机选择节点加入共识。既可保证共识节点总数不会过多,控制总体通信量,同时更重要的是,这样让所有节点都处于一种随机动态中,由此避免了非法节点作恶,以此可保证整个系统的稳定性和可用性。
除算法之外,迅雷链还希望通过接口级的管控达到整个链的安全。在迅雷链上,所有Dapp的开发者都需要实名制,如果是企业则需要预先通过企业级认证,此举目的在于,保证链上发布的合约,都能找到负责人,一旦发现有恶意合约,可以快速追责到人,由此震慑一些不法分子。
另外,迅雷链还有合约上链的审核机制,通过这种审核机制能够前置发现一些问题。迅雷链保留了合约的紧急避险能力,当发现合约出现安全问题时,可以暂时把合约关闭掉,以便彻查并修复。同时,万一出现了非法合约或者非法应用,能够有效加以制止,而不影响整条链的生态。
总的来说,目前区块链的安全形势还是比较严峻的,不过需要注意的是,这并不意味着区块链技术的失败,事实上任何一种技术都不可避免地存在安全上漏洞。目前,分布式系统在安全性上的优势已经得到初步展现,未来在技术进一步成熟之后,完全有信心在安全性上得到更高水平的加强。总之,区块链作为一种还很年轻的技术,还有很多需要完善的地方,这有赖于所有区块链技术信仰者的共同努力。
领取专属 10元无门槛券
私享最新 技术干货