张绍成,张雯菲,滕玉坤,王 硕
(1.辽宁大学 创新创业学院,辽宁 沈阳110036;2.西安电子科技大学 通信工程学院,陕西 西安,710126;3.辽宁大学 商学院,辽宁 沈阳110136)
区块链(Blockchain)是一种由多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的分布式账本技术(Distributed Ledger Technology)[1].
从技术角度看,区块链是一种把数据区块以链的方式组合在一起的数据结构[2].每一个数据区块由区块头和区块体两部分组成,其中区块体用来存储自前一区块之后发生的多起交易记录,区块头则包含了前一区块的哈希值和时间戳,作为指针用于链接前一个区块,这样从创始块到当前区块构建了一个按时间顺序的块链式数据结构,即为区块链.
从应用角度看,区块链被认为是新一代的价值互联网.当前的互联网传递的是信息,我们称之为信息互联网.而区块链是在互联网的基础上实现了价值的传递,秉承了互联网的基本协议架构,也延续并对互联网安全问题提出了更高的要求.
价值互联网的核心是确权、交换和信任,而价值的权属及可信任交换,都离不开安全这个必要的前提.基于一些基本的安全需求,包括如何确保交易数据的正确性、真实性和完整性,如何对交易方身份进行验证和对交易过程的确认等内容,区块链技术实现了一个创建信任、分布式存储、防篡改、可追溯的价值交换平台.
区块链技术架构是区块链系统和平台运行的基础.很多学术界专家在区块链技术架构方面开展了一些重要的研究工作,但是因为视角的不同,区块链架构的层次划分尚缺乏统一的共识.比如,邵奇峰等认为“区块链平台整体上可划分为网络层、共识层、数据层、智能合约层和应用层五个层次”[3],张亮等认为区块链“可划分为数据层、网络层、共识层、智能合约层和应用层 5个层次”[4],而袁勇等则认为“区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成”[5].
一些行业组织、企业也在各自的区块链系统中设计和使用了不同的区块链架构.典型的区块链应用实例中,比特币、以太坊和 Hyperledger Fabric在区块链架构设计上存在着明显的不同.比如,比特币架构定义了存储层、数据层、网络层、共识层、RPC层、应用层6个层次(图1);以太坊架构定义了存储层、数据层、网络层、协议层、共识层、合约层、应用层7个层次(图2);Hyperledger Fabric架构定义了存储层、数据层、通道层、网络层、共识层、合约层、应用层7个层次(图3).
由此可见,无论在理论上还是在实践中,基于不同的区块链应用场景,对区块链架构的设计和定义还存在着或多或少的差异.
但总体上看,上述有关区块链架构的描述中显现的核心功能却是基本一致的,从中归纳其共同的核心部分和主体的功能层次,可以抽象出一个四层区块链技术参考架构,包括存储层、协议层、扩展层、应用层4个层次(图4).
该参考架构中,每一层实现具体的功能,并为上一层提供服务.考虑到数据层、网络层和共识层的功能相关紧密、相辅相成,共同构建了区块链的底层技术核心层,因此统一定义为协议层;智能合约层和激励层的功能同属于区块链可编程特性的实现,统一定义为扩展层.
存储层的主要功能是存储上一层生成的链式数据区块,通常结合文件系统、关系数据库、键值数据库等存储方式,实现 “区块+链” 数据结构的存储和检索[6].
协议层是区块链的底层技术核心,主要功能是负责为上一层构建一个分布式、安全、信任的基础网络,并实现对交易数据的记录、验证等行为.具体地,数据层封装了区块管理及相关的数据加密和时间戳等技术,实现包括收集交易数据、生成数据区块、数据校验及区块上链等功能.网络层结合密码学安全机制,为上一层构建一个对等、安全的P2P网络.共识层封装了各种共识算法,实现节点选举、账本数据同步控制和数据一致性验证等功能.
扩展层是区块链可编程特性的基础,它在上一层应用和底层技术核心之间,以可执行代码的方式,为用户提供业务流程和逻辑规则的算法实现.其中,智能合约层的功能是将区块链系统的业务逻辑以代码的形式实现、编译并部署,完成既定规则的条件触发和自动执行[7].激励层的功能是实现区块链的激励/奖罚机制,包括数字货币的发行和分配.
应用层是区块链技术在不同行业领域中各类应用场景的直接体现,主要分为价值交换、电子存证和授权管理三个大类,具体的应用场景包括数字货币、跨境支付、供应链金融、能源交易、电子发票、电子存证、防伪溯源、版权确权、社会征信等.
从上文提出的区块链技术参考架构(图4)的角度,我们将根据存储层、协议层、扩展层、应用层4个不同层面的风险因素来分析区块链应用中可能存在的安全问题.
存储层安全主要存在于可能发生的数据丢失和泄露问题,包括因系统故障、误操作,或对数据文件的破坏、窃取等情况下导致的数据丢失和泄露.
协议层结合了共识算法、P2P网络、密码学等区块链技术核心机制,该层的安全问题主要由开源的底层代码及潜在的协议漏洞引发.
区块链技术(尤其是公有链)具有开源的特点,而底层协议源代码的开放使得对区块链的攻击有了可乘之机.包括利用共识算法漏洞的算力攻击、分叉攻击、重放攻击等,以及针对P2P 协议缺陷的 DDoS 攻击等.
共识算法本身的局限导致一定的技术风险,比如众所周知的51%攻击问题.由于工作量证明算法PoW依赖于算力,当攻击者取得51%以上算力时,就会有极大的概率胜出竞选获得记账权,这时其具备了 撤销已经发生的交易的能力[8].在权益证明算法PoS 中,当攻击者持有超过51%以上的令牌数量时具有了攻击成功的可能.在拜占庭容错PBFT中,恶意节点数量超过总节点数量的1/3时系统也是有风险的.
扩展层中典型的实现是智能合约或可编程合约,其风险通常来源于合约设计和开发中可能存在的安全漏洞,包括合约代码漏洞、业务逻辑漏洞等.
由于智能合约是将系统的业务逻辑、既定规则的条件触发、自动执行以代码形式的实现,所以保证合约代码的正确性、完备性是区块链安全的基本要求.当智能合约的开发者能力、安全编码水平不足,或是意图谋求个人利益时,就会导致智能合约中可能存在一些安全漏洞或后门.
一旦智能合约的代码设计不合理,比如出现执行顺序问题、时间依赖问题等,将会导致整个区块链系统不能按照既定的逻辑安全运行.那么这个系统不仅不能提供安全的交易环境,甚至还会因此被攻击而产生重大的经济损失.2018年7月的“EOS智能合约攻击事件”是一起智能合约安全的典型案例,该事件中因游戏合约存在的严重漏洞遭到非法攻击,造成EOS DAPP游戏代币损失数量最多的一次安全事件.
应用层直接面向用户,而用户应用是整个区块链系统中安全防护能力最薄弱的环节,所以应用层成为攻击者对区块链系统实施有效攻击的首选目标.
应用层安全风险主要来自于用户安全和应用服务安全两个方面.
用户安全依赖于个人用户的安全防护意识和能力.区块链用户负责生成并管理自己的私钥文件,要防止私钥文件和账户信息的泄露或被窃取,避免威胁用户数字资产安全的风险.用户端生成的私钥及账户信息通常存储于本地,一些传统的攻击手段如木马、钓鱼等都可能被利用来窃取这些信息,造成用户数字资产的损失.粉尘攻击是指一种新型的针对区块链用户数字钱包的攻击手段,攻击者向大量的用户钱包中发送微量的粉尘资金,然后跟踪这些粉尘资金的所有交易信息,如果用户移动了“粉尘”(即发生交易),则跟踪器会连接上这些钱包地址,确定这些钱包地址的所有者,进而可能造成一系列的用户风险.
应用服务安全是指区块链应用软件可能存在的设计开发问题引发的验证码、API误用等安全漏洞,或者应用服务器系统的安全漏洞、安全管理策略配置不当等应用服务程序造成的系统风险.2018年3月的“币安攻击事件”是一起应用层安全的典型案例,该事件中的攻击者首先通过钓鱼方式窃取大量的用户账户信息,然后利用币安服务器的二次验证没有做到 OTP(One-time Password)的漏洞,在30秒内创建了API,并获得了包括查询、交易、提现等操作的用户权限.
如上文所述,根据存储层、协议层、扩展层、应用层4个层面的安全问题分析,区块链技术的安全应用需要从安全开发、代码审计、安全评估和测试[9]等3个环节实施有效的应对措施以降低风险,
首先,在区块链应用的开发过程中,应当执行严谨的技术规范,确保安全开发.程序开发人员应使用安全的开发环境,遵守规范的开发流程,编写严谨的程序代码,从各个环节降低可能产生安全风险的几率,这是区块链安全应用的首要前提.
其次,对区块链应用的核心功能模块实行必要的代码安全分析和代码审计工作,从代码架构、逻辑流程等方面检查是否存在可能的安全漏洞或隐患.尤其对智能合约,作为区块链应用的规则体现,应当实施最严格的代码审计,这是区块链安全应用的重中之重.
最后,应当对区块链应用的场景和可能的攻击风险实施有针对的安全评估和测试,包括对底层协议、智能合约、应用环境等各层面的预测可能的风险和安全漏洞,及时发现和采取必要的应对措施,以及对网络环境和存储设施的可靠性和安全性进行充分评估.
另外,区块链技术作为未来发展数字经济、构建信任经济体系的重点前沿技术,本文提出的技术安全、应用安全尚不够完善,还应该从宏观经济的角度,在更高层面上构建“监管+审计+法律”全方位模式的区块链安全.