1
中国区块链产业发展报告.2018
1.5.3.1 1.区块链面临的安全问题与应对措施
1.区块链面临的安全问题与应对措施

(1)底层代码的安全性

区块链项目(尤其是公有链)的一个特点是开源。通过开放源代码,来提高项目的可信性,也使更多的人可以参与进来。但源代码的开放也使得攻击者对于区块链系统的攻击变得更加容易。2016年10月,国家互联网应急中心发布《开源软件源代码安全漏洞分析报告——区块链专题》,针对区块链领域的知名开源软件,结合漏洞扫描工具和人工审计的方式,在代码层面发现高危安全漏洞746个,中危漏洞3497个,数量较多的高危漏洞有不安全的随机数、不安全的JNI、空指针解引用等。2018年3月,慢雾安全团队披露了一起由于以太坊生态缺陷导致的亿级数字资产盗窃事件。攻击者利用以太坊节点Geth/Parity RPC API 鉴权缺陷,恶意调用 eth_sendTransaction 盗取数字资产,持续时间长达两年。应对措施主要有两方面:一是使用专业的代码审计服务,二是了解安全编码规范,防患于未然。

(2)密码算法的安全性

以比特币为例,每个区块都对应一个散列值,采用SHA256算法计算得到。在现阶段,该算法依旧满足散列函数的三个特性,单向性、弱无碰撞性和强无碰撞性,是安全的。由于SHA1和MD5已经被密码学者找到碰撞,所以,不应选取这两个算法作为区块链中的散列算法。

比特币中的交易采用了椭圆曲线数字签名算法ECDSA,确保了交易的完整性。比特币中的椭圆曲线采用的是Koblitz曲线(secp256k1)而非美国国家标准与技术研究院(NIST)推荐的secp256r1。虽然当前并无证据,但有分析认为secp256r1有可能是被NIST选取的带后门的椭圆曲线,而比特币在无形中避开了这一风险[3]

随着量子计算机的发展,越来越多的研究人员开始关注能够抵抗量子攻击的密码算法,如基于格的密码算法等。椭圆曲线密码并不能抵抗量子攻击,当对于密码的量子攻击在未来成为现实时,所有不能够抵抗量子攻击的密码算法都存在较大风险,需要被替换。不过,在比特币中,比特币地址是对公钥进行散列并使用base58编码后的结果,如果比特币资金存放在一个没有支出过的地址里,这意味着公钥尚未公开,则它们在量子计算机面前是安全的。

应对措施有:作为设计者,一是在设计时采用现阶段安全的密码算法,同时关注抗量子攻击的密码研究的进展,在其成熟后优先考虑使用;二是参考比特币对于公钥地址的处理方式,降低公钥泄露所带来的潜在的风险。作为用户,尤其是比特币用户,每次交易后的余额都采用新的地址进行存储,确保有比特币资金存储的地址的公钥不外泄。

(3)共识机制的安全性

当前的共识机制有工作量证明(Proof of Work,PoW)、权益证明(Proof of Stake,PoS)、授权权益证明(Delegated Proof of Stake,DPoS)、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等。PoW面临51%攻击问题。由于PoW依赖于算力,当攻击者具备算力优势时,找到新的区块的概率将会大于其他节点,这时其具备了撤销已经发生的交易的能力。需要说明的是,即便在这种情况下,攻击者也只能修改自己的交易而不能修改其他用户的交易(攻击者没有其他用户的私钥)。在PoS中,攻击者在持有超过51%的Token量时才能够攻击成功,这相对于PoW中的51%算力来说,更加困难。在PBFT中,恶意节点小于总节点的1/3时系统是安全的。

总的来说,任何共识机制都有其成立的条件,作为攻击者,还需要考虑的是,一旦攻击成功,将会造成该系统的价值归零,这时攻击者除了破坏之外,并没有得到其他有价值的回报。对于区块链项目的设计者而言,应该了解清楚各个共识机制的优劣,从而选择出合适的共识机制或者根据场景需要,设计新的共识机制。

(4)智能合约的安全性

智能合约具备运行成本低、人为干预风险小等优势,但如果智能合约的设计存在问题,将有可能带来较大的损失。2016年6月,以太坊最大众筹项目The DAO被攻击,黑客获得超过350万个以太币,后来导致以太坊分叉为ETH和ETC。2017年11月7日Parity多重签名合约漏洞导致93万个以太币永久丢失。

应对措施主要有两方面:一是对智能合约进行安全审计,二是遵循智能合约安全开发原则[4]。智能合约的安全开发原则有:对可能的错误有所准备,确保代码能够正确地处理出现的bug和漏洞;谨慎发布智能合约,做好功能测试与安全测试,充分考虑边界;保持智能合约的简洁;关注区块链威胁情报,并及时检查更新;清楚区块链的特性,如谨慎调用外部合约等。

(5)数字钱包的安全性

数字钱包主要存在三方面的安全隐患:第一,设计缺陷。2014年底,某签报因一个严重的随机数问题(R值重复)造成用户丢失数百枚数字资产。第二,数字钱包中包含恶意代码。2017年,有网友使用某投资微信群推荐的钱包软件,导致数字资产丢失[5]。第三,电脑、手机丢失或损坏导致的丢失资产。应对措施主要有四个方面:一是确保私钥的随机性;二是在软件安装前进行散列值校验,确保数字钱包软件没有被篡改过;三是使用冷钱包;四是对私钥进行备份。