近年来,区块链技术被广泛关注。很多金融企业已经开始探究将区块链技术应用在跨国转账、证券交易、智能资产等领域。将区块链技术应用到金融行业,应该认清其特殊的安全需求,以准确把握其安全风险并设计完备的应对方案。
区块链是一种按照时间顺序将数据块链接起来的数据结构,也称哈希指针链表。每个数据块中存储了上一个数据块所有数据的哈希值,与上一个块链接。这种数据结构天然具备防篡改、防抵赖、防伪造的特性。区块链技术是利用分布式共识协议将数据记录到这种哈希指针链表中,同时其广泛地使用密码学技术保证数据存储和访问安全。在区块链2.0 版本中(见图1),引入了自动化脚本代码来编程和操作数据。
图1 区块链2.0 技术架构
金融业区块链面临的安全威胁和应对策略如下:
数据安全
区块链中的数据
区块链是一个公开的链式账本,其中存储的数据向网络中所有用户公开。而在金融业务场景中,业务规则和监管机构要求保护相关数据的隐私性、完整性等。在存储、传输相应数据时,应该使用哈希函数、同态加密、数字签名等技术保护数据。
用户私钥
在区块链中,用户的资金安全完全依赖于私钥的安全,无论是私钥泄漏还是丢失,都将给用户带来财产损失。为了保护用户的账户与资金安全,应该对私钥文件进行加密存储。同时,应该使用“秘密共享协议”等方法安全地备份私钥文件。
密码算法安全
保护区块链数据安全的前提是密码算法的安全。在设计应用时,应该选择安全性更高的密码算法;应用投入使用后还要及时替换掉不再安全的密码算法。
网络层访问控制
公有链允许节点*进出网络,且区块链的网络层没有登记用户身份。金融行业的风险和安全性相对更高,未登记身份的节点*进出网络为系统安全带来很多不可控性。区块链技术在金融行业应用时,应结合业务需求,分析是否有必要使用公有链,并登记网络中节点的身份。对于联盟链和私有链,建议采用专线来接入区块链网络。此外,还应采用v*n专网、防火墙、物理隔离等技术对节点,特别是矿工节点的物理网络和主机进行保护。
共识层安全
共识协议应具备的基本属性:区块链使用分布式共识协议(见图1)来防止单点故障等问题,有效防范了双重花费、矿工恶意*某个用户的交易等攻击。但这都建立在区块链网络节点的权利分布均匀、不存在51%攻击的前提下。很大程度上取决于区块链的一致性不被破坏。因此,设计合适的共识算法对于区块链应用的安全性至关重要。
一般来说,要求共识算法具有以下几个基本属性。
公平性
无论是算力高的大矿工还是算力低的小矿工都有几率挖到矿,且几率与之前的挖矿结果无关。
快速验证
确保挖矿难题验证简单、快速、开销小。保证遍历所有可能的nonce值是解决难题最快方案。
难度可调整
挖矿的难度可以调整,以保证挖矿速度平稳。
此外,还应该使用资产抵押、法律和监管的形式对矿工节点进行联合管控。对于不诚实、有不当行为的矿工节点进行惩罚。
软分叉和硬分叉
分叉是指对区块链的规则做一些改变。由于软件更新,不同节点上运行的软件版本不同,导致其执行规则不同,从而导致分叉(软分叉和硬分叉)。软分叉是让原来可以被接受的交易或区块不可以被接受,例如:比特币中使用的P2PKH脚本。与之相反,硬分叉是使原来不可以被接受的规则可以被接受,例如:增加区块大小。这两种分叉作用在区块链中时,软分叉可以很好地被老版本软件的节点兼容,并促进其更新软件,但硬分叉会受到排斥。图2 是有60%算力占比的节点更新软件时,硬分叉和软分叉对新规则和旧规则支持情况。在更新区块链应用时,应该尽可能使用软分叉完成,避免硬分叉。
图2 软分叉和硬分叉示意图
激励层安全
目前已提出的大多数数字货币系统都是去中心化的,它允许节点自行记录数据、发行货币。区块链中的节点都是匿名的,用户在使用系统时,并不需要注册自己的真实身份。这样的机制为设计法定数字货币带来了一定的威胁。
坏账
如果一个法定数字货币系统是匿名的,且支持借贷业务,则该系统无法有效地对坏账进行管控。由于系统并没有登记用户的真实身份,用户完全可以在花完借贷的款项后抛弃当前账户,重新注册一个新账户。如此一来,借款人或银行将无法收回应收款项。
洗钱
由于系统的参与节点都是匿名的,系统不知道资金流向账户的真实身份。系统的去中心化导致在洗钱事件发生后,系统不能像传统银行一样冻结账户。
货币发行不可控
出于国家安全考虑,法定货币的发行应该由国家发行。而区块链的去中心化、矿工节点的*进出导致货币发行不可控。因此,在设计法定数字货币时,需要重新设计货币的发行机制,使货币发行中心化,结合匿名认证等技术,使系统中的资金流向可控。
智能合约层安全
区块链2.0版本中引入智能合约层,提出区块链即服务(BaaS)的概念。智能合约层提供了自动化脚本代码组成的智能合约来开发应用、操作数据。
智能合约本质上而言仍然是编程语言,如果它是图灵完备的,支持循环指令,攻击者就可能构造带有死循环代码的交易对网络中的矿工发起DoS攻击。
在区块链中设计验证脚本或智能合约时,应预防死循环导致的DoS攻击。可以在设计脚本语言时禁止使用循环指令,也可以要求程序的创建人为程序执行按照执行步数支付费用,并设置费用限额。超过限额后,停止执行且不归还费用。其次,做好充分的容错机制,通过系统化手段,结合运行环境隔离等机制,确保代码在有限时间内按预期执行。
其他
除了前面提到的防范措施外,还要有相应的风险控制手段,对系统的数据访问、交易频度以及记录到区块中的交易进行监控和检测,对可疑操作和不当行为进行告警、合成和记录,并评估损失,进行补救,防止再次出现。
此外,为了提高开发效率和安全性,还可以将一些重要模块(例如:私钥的存储与保护、共识协议等)剥离出来,开发统一的安全组件、接口,以解决开发人员安全意识不足的问题。
小结
区块链技术为金融行业的业务和机构运作方式带来新的转变机遇的同时,也带来了新的安全挑战。民生银行将以支持业务和技术创新为目标,继续深入研究区块链的应用安全,在应用区块链为业务带来转变的基础上,保证业务系统的安全性。
作者
中国民生银行信息科技部总经理助理 吕晓强
中国民生银行信息科技部 张磊 黄吉鲲
文章来源于金融电子化微信公众号