女巫攻击---针对联盟链的攻击
对于区块链这种新型的技术体系,在使用它的时候,需要从技术、经济模型等多种角度去考虑系统的安全性。
曾经提过非公有链中的共识算法原则:“对于非公有链来说,情况简单了很多:每个节点都知道总共的节点数,我们只要简单投票就可以了。”共识机制变简单了,攻击也变得简单了。在联盟链中有一种特有的攻击方式——女巫攻击(Sybil Attack来源是70年代的一部叫做《Sybil》的美国系列片。片中的女主角人格混乱,扮演着16个角色)。女巫攻击是在传统P2P系统中一直存在的一种威胁。
在拜占庭容错算法中,我们知道,PBFT算法能够抵抗的拜占庭节点数是N≥3f+1。因此,在具有身份认证的区块链中,节点的数量的比例是非常重要的。而女巫攻击就是直接针对这种特性——直接在节点的数量上做文章。
在绝对去中心化的系统中,是没有上帝视角的。因此,任何节点都不能天然的知道在系统中到底有多少个节点参与进来:他们只能通过自己接收到的数据,来判断全局的情况。于是,攻击的节点就利用到了这个特性。它把自己伪装成多个节点,在P2P网络中广播。(怎样伪装?想象上课老师点名时一个同学帮助一个寝室的全部同学答到)
例如,在一个4节点的区块链系统中,在有1个坏节点,剩余3个仍然能够达成一致。但是如果这1个节点把自己伪装成了4个节点,那么好节点会认为整个系统中有7个节点,然后通过消息交叉验证机制,对于1个好节点来说,它接收到的消息中,有2个是来自好节点,4个来自坏节点。根据PBFT原则,坏节点就可以精确控制好节点的数据了。坏节点可以精确控制3个好节点的区块的内容了。
这种情况是非常危险的。坏节点相当于可以直接的把好节点给分叉了,坏节点可以直接对好节点双花自己的代币。例如在供应链金融区块链中,我们通过区块链技术来防止企业用一份数字资产(例如海关的电子关单)在不同的机构进行多次抵押。但是如果这家企业利用女巫攻击,就可以实现把这一份数字资产在不同的银行进行多次抵押,从而实现盈利。
可以看出,在公有链中的共识机制,由于其不依赖于节点数量,因此公有链中不存在女巫攻击的风险。而联盟链中应对女巫风险的办法,除了更换为公有链中的共识机制这种得不偿失的办法外,常用有几种策略都是要重点保护身份认证服务本身,确保“女巫的分身”不会被好节点认为是区块链中正常的节点,确保身份认证服务能够真的把现实世界中的实体与区块链中的节点对应起来。
除了这种通用型的策略外,我们还有一些针对垂直行业的解决方案:例如在防止企业用一份数字资产在不同金融机构间进行多次抵押的业务场景,我们可以在智能合约中规定好:每个抵押必须有其他所有区块链上的金融机构的数字签名,我们才认为该抵押真正生效。利用智能合约的特性,在“平等的区块链网络中”建立“不平等的业务权限”,从而确保攻击者无法通过攻击获利,最终保护整个联盟链的安全。
从上面这个例子,我们可以看出,对于区块链这种新型的技术体系,在使用它的时候,需要从技术、经济模型等多种角度去考虑系统的安全性。因此,相比于传统的信息安全领域,区块链安全由于系统的节点控制权分布在不同主体中,其安全策略是需要引入一些新的思想来进行设计的。当然,还有最简单的解决方式就是:使用区块链云服务。区块链云服务拥有完善的智能合约市场,事先已经对很多安全威胁进行了业务蹭的预防。同时云服务,可以提供完善的身份认证机制,确保“女巫的分身”不会出现,另外也由于云计算平台账号的统一性,在一定程度上防止企业出借(或者卖掉)账号。