时间:2023-06-13|浏览:193
加密猫Kitty 2022-05-02 11:52 重庆关注
针对所有的支付系统,有一种攻击方式叫作“双花攻击”。所谓双花攻击就是指一笔资金被花费多次,攻击者先将资金转出,获得收益后通过攻击的手段撤销该笔转账,让资金最长链原则
刚才我们说谁先算出答案谁负责打包区块,那如果有两个节点同时做出了同一个区块的答案该怎么办呢?为了解决这个问题,比特币系统设计了一个特殊的机制,叫作最长链原则。
现在假设有两个节点A和B同时计算出了区块N的答案,那么他们就会同时把自己的答案向外广播。由于网络传输的问题,离节点A比较近的节点就会先收到A的答案,验证后发现A的结果是正确的,然后就会在A的基础上继续计算区块N+1的答案。离节点B比较近的节点会优先收到B的答案,验证后发现B的结果也是正确的,然后就会在B的基础上继续计算区块N+1的答案。此时区块链有两个尾巴,分别是A打包的区块和B打包的区块,我们把这种情况叫作区块链分叉。但是由于区块答案的计算量很大,下一个区块几乎不会同时被计算出来。
此时如果区块N+1的答案是在A的基础上计算出来的,那么A的这个分叉就要长一些,在B的基础上计算区块N+1答案的节点就会停止作答,而是在新区块的基础上开始计算区块N+2的答案。此时所有节点都回到了A的那个分叉上继续向下计算,B之前计算出来的区块N就被废弃了。通过上面的描述我们可以看出,比特币的这条链是有可能分叉的,分叉以后会以最长的链为准,那么在较短的分叉上的区块就被废弃了。这不正为我们攻击比特币系统带来了可能性吗!
对比特币发起攻击
你可能已经想到了,既然比特币系统只认最长的那条链,我们是不是可以通过这样的方式对比特币进行双花攻击:
首先发起一笔正常的比特币转账交易,用来和对方交换其他的东西。
交易在区块N中被打包后,对方就收到了你的转账,然后将东西给你。
你在得到自己想要的东西后,开始收买节点重新创造一个区块N,把你之前发的转账交易删除掉,此时你成功地将比特币进行了分叉。
由于比特币系统只认最长链,所以你收买节点一直在你的分叉上继续工作,直到让你的分叉的区块长度超过正常区块的长度,那么系统中所有节点就会在你的分叉上继续工作。
包含你转账的区块N及其后面一直到N+n的区块都被你的新分叉废弃了,你的分叉成为了主链,在这条链上没有你的转账记录。
至此,你之前转出的比特币还在你的账户上,并且得到了你想要的东西,所以你的攻击成功了。
比特币中的博弈论
对比特币的攻击真的这么简单吗?答案当然是否定的!虽然我们说可以通过上述方法对比特币发起