Page 279 - 《软件学报》2021年第5期
P. 279
田国华 等:区块链系统攻击与防御技术研究进展 1503
4 区块链共识层攻击
共识层是区块链技术体系的灵魂,主要封装了区块链的各类共识算法,是保证区块链全网节点达成正确共
识的关键.本节将从授权共识机制和非授权共识机制两个方面对共识层存在的安全威胁进行分析评估,并尝试
给出一些解决思路.
4.1 针对授权共识机制的攻击
授权共识机制是指在授权网络(联盟链、私有链)中,节点须通过身份认证才能加入网络,与其他节点为达成
某种共识而共同运行的特定分布式一致性算法.经典的授权共识算法包括拜占庭容错机制(Byzantine fault
tolerance,简称 BFT) [70] 、实用拜占庭(practical Byzantine fault tolerance,简称 PBFT) [71] 以及权威证明算法(proof of
authority,简称 PoA) [72] 等.BFT 系列共识算法可以在总节点数为 N=3f+1、恶意节点数不超过 f 的情况下确保全
网节点达成正确的共识(即容错率为 1/3).
(1) 女巫攻击(sybil attack) [26] :泛指网络中攻击者通过操作多个不同身份,以实现特定目标的攻击行为.在
区块链网络中,攻击者可能通过发起女巫攻击以实现恶意刷票、刷排名、刷信誉等攻击目的.在 BFT
算法中,假设 A,B,C,D 中点 C 是攻击者,可以获得多个伪装身份 C 1 ,C 2 ,C 3 ,使得攻击者持有的节点数量
超过总节点数的 1/3.此时,C 操纵 C,C 1 ,C 2 ,C 3 不断发出错误指令,则共有 7 个节点(A,B,C,C 1 ,C 2 ,C 3 ,D)运
行 BFT 算法,最终会导致全网达成一个错误的共识.
(2) 克隆攻击(Cloning attack) [73] :在 PoA 系统中,攻击者利用系统中记账节点集合固定的缺点,通过 BGP
劫持、分割攻击等手段将区块链网络视图分为两个,然后克隆得到两个使用相同地址或公私钥对的
克隆体,并分别部署至两个视图独立的支链.此时,攻击者可以就同一笔代币在两个网络中进行交易,
待交易结束后,攻击者解除路由劫持,区块链网络节点通过最长链或最大权重原则统一区块链主链,
攻击者实现了双花攻击.
4.2 针对非授权共识机制的攻击
非授权共识机制是指在非授权网络(公有链)中,节点无需身份认证,即可加入网络与其他节点为达成某种
共识而共同运行的特定共识算法.经典非授权共识算法包括工作量证明机制(proof of work,简称 PoW) [12] 、权益
证明机制(proof of stake,简称 PoS) [28] 、信誉证明机制(proof of reputation,简称 PoR) [74] 及其衍生算法:委托权益证
明机制(delegated proof of stake,简称 DPoS) [75] 、评价证明机制(proof of review,简称 PoR) [76] 、PoR/PoS 混合共识
机制(PoR/PoS-hybrid) [77] 等.授权共识算法中,各节点达成共识消耗的是等价的参与权,即节点共识权重相等.而
在非授权共识机制中,各节点通过消耗自身持有的“筹码”(PoW 中代表算力 Work,PoS 中代表权益 Stake)竞争记
账权,进而达成共识,即节点共识权重不相等.非授权共识机制可以在本轮竞争“总筹码”为 N=2n+1、恶意节点持
有“筹码”不超过 n 的情况下,确保全网节点达成正确共识(容错率为 1/2).
4.2.1 恶意筹码获取
在非授权的共识机制中,节点持有的“筹码”越多,则其获得记账权的可能性越大.所以节点可能通过傀儡挖
矿、贿赂攻击、币龄累计攻击等方式获取“筹码”,以提高自己获得记账权的成功率.
(1) 傀儡挖矿攻击(puppet attack) [39] :攻击者通过植入木马入侵大量网络节点,部署挖矿程序,盗用被入侵
主机的电力、算力等资源挖矿获利.2018 年初,上百款《荒野行动》游戏辅助被植入挖矿木马,利用游
戏主机显卡的高性能来挖矿获利.同年,攻击者在大量网站的首页植入 Coinhive 平台的门罗币
(Monero)的挖矿代码 [78] ,通过网页端盗用网络节点资源挖矿获利,导致该网站用户的系统运行变慢.
(2) 币龄累计攻击(coin age accumulation attack) [28] :在基于“POW+POS”混合共识机制的区块链中,节点持
有的“筹码”不仅与其算力有关,还与其持有的币龄有关.持币量越多、持币时间越长,则节点持有的币
龄越多.因此,节点可以通过币龄累计攻击来获取更多的“筹码”:买入一定数量代币后,持有足够长时
间后,就可以获得足够多的币龄用于竞争记账权.
(3) 贿赂攻击(the bribing attack) [27] :攻击者通过“恶意悬赏”,鼓励矿工在攻击者指定的支链上进行挖矿,当