所以,尽管区块链的防篡改、分布式存储、用户匿名等技术优势为其发展应用提供了大量的创新空间,但目前区块链技术在各领域的应用模式仍处于大量探索阶段,其深入应用仍需漫长的整合和发展过程;在《信通院区块链安全白皮书》中,就对区块链技术在应用中的安全问题进行了描述,总结后如下所示:
▲区块链典型应用架构对应的安全风险▲
上图中,对于四个层级的安全风险归纳如下:
存储层:主要风险来源于环境的安全威胁,如基础设施的安全风险、网络攻击威胁、数据丢失和泄露等,最终影响区块链数据文件的可靠性、完整性及存储数据的安全性,具体包括以下三点:基础设施安全风险、网络攻击威胁、数据丢失和泄露。
协议层:主要风险来源于核心机制(共识机制、P2P网络机制、密码学技术)的设计缺陷,前两章我们对这些核心机制做过介绍,当这些核心机制的规则设计被恶意节点利用,则很容易使系统的自身安全和交易安全遭到破坏,具体包括以下三点:协议漏洞、流量攻击以及恶意节点的威胁。
扩展层:主要风险来源于代码实现中的安全漏洞,由于这一层较典型的实现是智能合约(或称可编程合约),但智能合约的应用起步相对较晚,很多开发人员尚缺乏对智能合约的安全编码能力,从而造成代码中存在大量的安全漏洞,具体包括以下两点:合约开发漏洞、合约运行安全。
应用层:这一层由于直接面向用户,涉及不同行业领域的应用场景和用户交互,因此也成为攻击者实施攻击、破坏系统的重点目标层,具体包括以下5点:私钥管理安全、账户窃取、应用软件漏洞、DDoS攻击、环境漏洞。
而综上所述,目前应对以上风险的措施简单总结如下图所示:
▲区块链风险应对框架▲
这里我们列出几个具体方法作为参考:
(一)提升参与同步与验证节点的数量:在区块链公链系统中,公链网络的正确性与安全性依赖于一些节点的背书。例如,在比特币或以太坊中,根据协议,每一个矿工挖出区块时,要保证新区块和历史上的每一个区块每笔交易都是正确的。也就是说,比特币矿工出块时,在为之前所有的区块进行正确性背书;在 EOS 中,超级节点通过签名对区块的正确性背书。我们这里称为“参与共识的节点”。所以,如果每一个被确认的交易,都得到过更多参与共识节点(攻击者除外)的同步与验证,这样就能够提高系统整体的安全性。
(二)提高节点参与系统的门槛:上一篇我们讲到,降低用户参与门槛即可提升系统去中心化程度,所以,当提升系统参与门槛时,就可以相应的提升系统的安全性以及可扩展性;在一些共识机制中,普通用户不参与对交易的同步与验证,而是通过一些方式选出少数特殊的节点来进行共识;这时,我们可以假设每一个参选的节点都准备了足够的计算机资源,例如更好的 CPU, 更大的硬盘, 更大的网络带宽;这时,也就没必要将“最低配置要求”设的很低了;相应的,系统整体安全性就会高一些。
(三)攻击应对监测:在区块链中创建某种“交易配置文件”,监控特定区块链上的交易,检测包括51%攻击,Sybil攻击等恶意攻击。
(四)项目安全管理:智能合约代码的安全审计和法律合规方案的制定。
总之,区块链系统安全设计的挑战,是保障该系统不能被坏人破坏;在一个开放并与经济利益挂钩的区块链系统中,不仅会有好人加入这个系统,也会有更多的坏人企图希望通过破坏该系统获利;那么,如何在系统内部存在坏人的情况下,保证系统的安全性,这已不仅是传统意义上安全架构的技术挑战,也是安全机制设计的挑战。