付 俊 中国移动通信研究院安全技术研究所副主任研究员
彭 晋 中国移动通信研究院安全技术研究所所长
杜跃进 阿里巴巴集团安全部副总裁
随着网络和计算机等技术的迅速发展,区块链已成为当今的新技术和新热点之一。区块链目前已成为各个行业、各个领域的研究及应用的热点技术。区块链除了应用规模最大的比特币以外,也不断形成一定规模的其他领域应用,包括供应链金融、物流、信用和借贷、溯源等。但是,伴随着区块链的快速发展,其对应的安全问题日益突出。例如,2018年4月25日,SMT智能合约整型溢出漏洞,导致在转账操作中,攻击者可以在无实际支出的情况下获得大额转账。各类安全事件层出不穷。因此,区块链的安全问题逐渐成为关注的热点。本文拟研究区块链面临的安全风险,并提出应对策略。
区块链技术起源于化名为中本聪(Satoshi Nakamoto)的学者在2008年发表的奠基性论文《比特币:一种点对点电子的现金系统(Bitcoin:APeer-to-PeerElectronicCashSystem)》。
区块链是支撑比特币的底层关键技术。比特币具有区块链的特点,开放自治、安全可信,集体共识、公开透明。比特币是一种数字货币,由计算机生成的一串串复杂代码组成,且随着比特币总量地址的增加,新币制造的速度会逐渐减慢。任何人都可以参与制造比特币,以及在任意一台接入互联网的电脑上买卖比特币。从技术角度来看,比特币系统包括3层:上层为货币;中层链接为协议,即基于区块链的资金转账系统;底层技术是区块链,去中心化、分布式记录的公开透明的交易记录总账,其交易数据全网节点共享,矿工负责记录,全网进行监督。
区块链技术提供了一种新型信息分布式处理架构和计算范式:多个节点共同存储数据,以保证数据不可篡改和最终一致性;且节点可不受干预地执行预先提交的智能合约。区块链利用区块数据结构存储数据并将这些区块以链的方式连接起来,利用节点上的共识算法来生成和更新数据,利用密码学的方式保证数据存储和传输的安全,利用脚本代码组成的智能合约来编程和操作数据。
区块链的技术特点包括:
(1)地位对等节点共同维护数据、建立信任:在区块链系统中,通常没有具备特权的集中控制节点;各节点地位平等、遵守共同的规则,共同建立、验证、存储和处理数据,保证数据不会丢失、不被篡改,并基于此形成信任关系。
(2)数据可靠性高,但处理效率低:区块链依靠多复本保证系统的高可靠性,使用共识机制在大多数节点之间保证数据一致。
(3)适用于非实时记账类场景,不适用于实时交易类应用:共识过程中需要与其它节点通信和确认交易,而且单个区块的数据表示能力弱、存储空间较小,无法支持秒级的实时交易确认和事务处理;但区块链的防篡改和共识机制非常适合于允许分钟/小时级时延的记账类应用。
(4)使用密码学技术提供安全保障:安全性是区块链技术在各领域应用的前提,数据防篡改、共识机制、轻量级验证、用户隐私保护、用户权益认定等方面都需要现代密码学技术提供保障。
(5)资源利用率较低:由于P2P通信、多点存储数据,系统的存储效率、网络带宽利用率较集中式系统低。
区块链是一种机制创新,是构建信任体系的基础设施:通过算法和机制,为本来缺乏信任又需要合作的实体之间建立信任关系。这是区块链与传统的分布式系统、数据库系统的本质差别。就像互联网实现了信息连接和交换一样,区块链有望实现价值连接和交换。因此,区块链技术被认为是“价值互联网”的基础,受到了国家和产业界的热切关注。
在技术方面,区块链并没有发明新的技术,而是恰当地改造和巧妙运用多种技术,形成组合创新。关键技术包括智能合约、共识机制、分布式存储、安全技术等。
正是把这些合适的技术与全新的处理机制结合,区块链技术适应了新的社会协作需要,催生了区块链产业的不断发展。
随着区块链技术的运用和发展,在全球掀起一股区块链风暴,作为区块链的典型项目——加密数字货币更是充斥着互联网的每一个角落。据统计,目前市场上已有1597种数字货币(统计数据来源于加密货币市值统计站点coinmarketcap.com),如比特币、以太坊、比特币现金、瑞波币、莱特币等。有的币种已有广泛的用户基础,而有的币种因用户数少而濒临消亡。
根据加密货币市值统计站点,目前市值排名前20的币种如表1所示。
表1 区块链加密货币市值top20的币种
区块链的安全风险包括算法安全风险、协议安全风险、实现安全风险、使用安全风险、传统网络安全风险五大类。其中,前4类是由于区块链特性而面临的独有的安全风险,最后一类是传统的通常的安全风险。
算法安全风险包括随机数算法漏洞风险和量子计算抵抗风险。
(1)随机数算法漏洞
区块链中的算法曾经出现过随机数漏洞。对于区块链而言,随机算法十分重要,使用密码学安全的随机数(甚至是真随机)来生成私钥,对于大额资产来说,甚至应考虑冷存储的方式来离线、断网的保管私钥,但即便这样还不够,因为签名也需要安全,签名交易时同样需要随机数,该随机数的品质决定了私钥的安全。但是,不同的币种在实现各自随机算法的过程不同,有的采用了浏览器服务器端随机数函数Math.Random,有的采用键盘输入或者鼠标点击生成对应函数,有的采用了单词语句的方式等,进而导致随机数算法漏洞,发生被攻击事件。同时,区块链中采用的非对称加密算法可能会随着数学、密码学和计算技术的发展而变得越来越脆弱,进而导致算法本身的安全风险。此外,区块链中的密码算法在使用及实现过程中存在安全风险。由于区块链大量应用了各种密码学技术,属于算法高度密集工程,在实现上较容易出现问题。例如,NSA对RSA算法事先埋入后门漏洞,使其能够轻松破解别人的加密信息。一旦爆发这种级别的漏洞,区块链的基础都将不再安全,后果极其可怕。另外,根据理论分析,如果在签名过程中两次使用同一个随机数,就能推导出私钥。
(2)量子计算抵抗
量子计算对现有公钥密码带来了颠覆性的影响,将带来算法安全风险。2017年,IBM宣布成功搭建和测试了两种新机器,进行量子计算。
协议安全风险包括共识机制协议攻击风险和共识机制安全性证明。当前的区块链技术中已经出现了多种共识算法机制,最常见的有PoW、PoS、DPoS。其安全风险如下:
(1)共识机制协议攻击
区块链无论使用何种共识机制,都面临着一定程度的协议攻击问题,导致一定的安全风险。当区块链的底层协议需要更新时,会出现某些节点无法获取新版本或无法及时获取新版本的问题,导致不同节点运行的协议版本不一致,进而带来硬分叉与软分叉的问题。分叉可能会影响整个区块链系统的一致性,违背区块链的防篡改性。
(2)共识机制安全性证明
区块链中的共识机制是否能实现并保障真正的安全,需要更严格的证明和时间的考验。
实现安全风险包括:系统实现代码漏洞带来的安全风险;智能合约语言自身与合约设计,以及智能合约代码都可能存在漏洞,带来一定的安全风险;系统实现的业务设计缺陷导致的安全风险。具体包括如下27类:
(1)以太坊编程语言Solidity漏洞;(2)以太坊短地址漏洞;(3)交易顺序依赖性;(4)时间戳依赖性;(5)可重入性攻击;(6)TheDAO漏洞;(7)Parity多重签名钱包合约漏洞;(8)Parity多重签名钱包提款漏洞;(9)太阳风暴;(10)智能合约fallback函数;(11)智能合约递归函数(recursive);(12)调用深度限制(calldepth);(13)以太坊浏览器Mist;(14)区块链节点漏洞;(15)日食攻击(eclipse attack);(16)Geth客户端DoS攻击漏洞;(17)浪子合约漏洞;(18)自杀合约漏洞;(19)贪婪合约漏洞;(20)遗嘱合约漏洞;(21)挖矿中心化;(22)冷热存储误用;(23)BEC智能合约batchTransfer函数漏洞;(24)智能合约proxytransfer函数整数溢出漏洞;(25)Equihash漏洞;(26)系统实现代码漏洞;(27)系统业务设计缺陷。
区块链使用过程中,私钥的生产、存储、保管等带来的安全风险。区块链上的信息具有不可篡改性,其前提是私钥是安全的。但是私钥的保护存在一系列的安全风险,如私钥托管容易造成监守自盗以及黑客盗取;区块链钱包的口令存在被恢复的危险;私钥一旦丢失,便无法对账户的资产做任何操作;私钥一旦被黑客拿到,就能转移数字货币。
目前,普遍采用的私钥存储方案是由区块链系统中每个用户自行将私钥加密后保管在用户设备上,但无法抵抗攻击者在获取用户设备后对其使用的离线字典攻击,因此区块链面临私钥被窃取的风险。私钥一旦丢失即无法找回,用户将无法对账户资产做任何操作,导致资产被盗。
区块链系统本身还面临着病毒、木马等恶意程序的威胁,大规模DDoS攻击、DNS污染、路由广播劫持等传统网络安全风险。具体地,攻击者为了窃取数字货币可以采用BGP路由广播劫持方法。另外,区块链系统被攻击者作为攻击目标,通过发起DDoS攻击导致区块链系统暂时无法提供服务。可分为BGP路由广播劫持风险和伪造数字签名风险。
(1)BGP路由广播劫持
攻击者在入侵云服务之后,向其对等网络发出了假的路由广播,对等网络不疑有假,接受了路由通知,导致数字货币网站域名的一部分流量重定向到钓鱼网站,导致安全风险。
(2)伪造数字签名
攻击者通过病毒伪造企业的数字签名,避开软件查杀,同时窃取用户比特币、门罗币等主流虚拟货币的数据信息,并利用用户电脑疯狂挖矿,生产门罗币,而且还会通过远程操控伺机对用户进行勒索,导致安全风险。
面对区块链的安全风险,亟需采取有针对性的手段措施,构建区块链安全保障体系,为区块链健康发展做出保证。基于以上区块链安全风险分析,提出以下应对策略:
(1)算法方面。应尽可能的使用密码学安全的随机数生成器来生成随机数,从安全级别的角度上讲:内核态(/dev/urandom)优于应用态(各种高级语言或库中自行实现的SecureRandom),更优于各种浏览器中自行封装的SecureRandom解决方案(浏览器提供密码学安全的随机数由谷歌在2011年发起,并未久经考验,并且浏览器厂商太多,各自的实现方式不一定足够安全);可使用RFC6979规范来生成随机数;加强智能合约算法的形式化验证过程。
(2)实现方面。业务设计方面,加强区块链系统实现的业务逻辑设计安全性;代码层面,加强实现代码的安全审计,避免不安全的JNI、空指针解引用、反射性跨站脚本、流资源未释放、类的构造函数未对成员进行初始化、易误用的身份认证等代码漏洞;针对智能合约和区块链系统的漏洞,应增强智能合约业务的实现逻辑的安全审计,同时对智能合约业务及区块链系统的实现代码进行安全审计。
(3)使用方面。提高区块链使用过程中私钥的生产、存储、保管的安全性,如可以加强私钥产生的算法,来提高私钥自身的安全性;可以采用高安全性的存储方式,来降低私钥被泄露的风险。
(4)网络方面。对网络传输过程进行加密,防止流量窃取或劫持,如强制使用https传输,而不是http协议进行传输;加强网络数据中传输的有效性、合理性、安全性进行验证,减少某些漏洞利用导致的数据错误;每个节点加强网络安全性,对于重要操作和信息做必要的验证。
(5)管理方面。除了以上技术方面要进行安全加强以外,同时要管理好人,防止人为因素导致的泄露、内部威胁等。
本文阐述了区块链的概念和技术特点以及区块链币种,重点梳理分析了算法安全风险、协议安全风险、实现安全风险、使用安全风险、传统网络安全风险5个方面的区块链安全风险,并从技术和管理等方面提出了区块链安全应对策略,为区块链健康安全发展提供解决思路。