最近由BCH革新派所领导的BitcoinABC和BCH守旧派所领导的BitcoinSV在币圈链圈掀起了一场”腥风血雨“,两派由于理念不同而导致了一场空前的算力之战。
然而很多人并不是很理解算力战的攻击性,本文便是介绍如何本地模拟一次"51%算力攻击"。
0x1 明确概念
很多人将两者的概念混淆了,他们最大的区别是:前者的两条链是共识相同的两条链,是可以互相合并的,而分叉的两条链是共识不相同的两条链,不可以相互合并。
双花交易:即双重支付,指的是在数字货币系统中,由于数据的可复制性,使得系统可能存在同一笔数字资产因不当操作被重复使用的情况。
- 本地模拟一个主网环境,由这几个节点组成,节点 A(单核CPU)、节点 B(双核CPU) 为诚实矿工,节点C(四核CPU) 是受攻击者控制的高算力恶意矿工。
- 节点A、节点B、节点C相连,形成一个主网。
- 攻击者控制节点C,脱离主网,形成一个私网(私网算力比主网算力高)。
- 攻击者在主网上发起向交易所充值100 ETH的交易
- 攻击者在私网上发起向自己转账100 ETH的交易
- 交易所在主网上查询余额确认是否收款成功,并给攻击者标记充值余额
- 攻击者在交易所低价抛售100 ETH套现
- 攻击者抛售完ETH后将其所控制的恶意矿工并入主网,向交易所充值的交易被攻击者向自己转账的交易覆盖
- 攻击者重新获得之前所充值的100 ETH
- 攻击者完成双花交易
- 攻击者钱包余额为100ETH和大量套现现金,交易所损失100ETH
节点相连: 节点C(四核CPU) —> 节点B(双核CPU) —> 节点A(单核CPU) 形成主网,节点C的算力大于节点A、节点B的总和,掌控整个网络50%以上的算力。
节点B中生成两个账号,账号1为矿工账户,账户2为模拟交易所账户
B节点上的两个账号余额都为0
我们通过在节点B和节点C中挖矿然后转到模拟账户
节点B的B2账户已经有了450个ETH,此为模拟的交易所账户
节点C的C2账户已经有了100个ETH,此为模拟的攻击者账户
“0x1f516e2f519a6f31653486ab16450cff2ea836ce”
攻击者地址:C节点的C2账户,余额100ETH
“0xbcfa293865c39b95711429c6a9b6b182c5b22466”
攻击者脱离主网,形成自己的私网(可以删除所有节点也可以拔网线断网,不与主网相连即可)

然后在主网上广播交易
攻击者在私网中生成一个攻击者向自己钱包转账100ETH的交易签名
然后在自己的私网上进行广播
由于主网上是有矿工在挖矿的,所以我们刚刚在主网上广播的交易,会很快被确认。
交易所查询自己钱包余额是否增加了100个ETH
可以看到,交易所的钱包里面已经增加了100个eth,而攻击者的账号减少了100个ETH
,所以攻击者的这笔交易是有效被承认的。
交易所在其交易平台网站上标记充值成功
攻击者在交易所上面抛售刚刚所充值的100个ETH假如当前价格为1000 人民币一枚攻击者抛售100个ETH后获得10万人民币。
抛售完毕后攻击者便可以将自己的控制的大算力恶意节点并入主网了
此时攻击者的私网的区块高度已经达到了661块
攻击者并入主网
此时在主网上查询攻击者的钱包余额和交易所的钱包余额会发现攻击者的ETH没有减少且交易所的ETH也没有增加,一切都和原来一样。但是黑客在交易所上确确实实抛售了100个ETH,成功套现了10万人民币,而黑客的ETH却没有减少,也就是说黑客的ETH被他花了两次,形成了双花攻击。
在这次模拟攻击事件中,被黑客的攻击的交易所,损失了100ETH,而黑客在交易所中套现了自己所充值的100ETH获得10万人民币,并且自己的钱包的ETH余额没有减少。
转载自:DVP去中心化漏洞平台公众号