重放(Replay)也称为重播、回放,即某个消息或数据原封不动的重新发送给接收方一次,而接收方会接受这消息或数据,当这个动作是成立时,表示接收方无法有效辨识该数据是已经收过,这将会是重放漏洞。
重放攻击主要是在有区块链发生分叉之后,因为分叉后之两方都共同还保有分叉之前的数据,因此分叉之后在两边都可以做一样的交易。例如有一间蛋糕店A但是因为理念不同而分家成蛋糕店B和蛋糕店C,分家之后两家共同拥有之前客户资料与交易信息且用的系统还是一样的包含验证付款信息系统,接着各自经营客户与交易并不会互相交换信息。
现在Alice拿着付款信息给蛋糕店B的服务员后,蛋糕店C的服务员用电脑确认信息后将蛋糕给Alice。拿到之后Alice又拿相同付款信息给蛋糕店C的服务员后,蛋糕店C的服务员用电脑确认信息后又将蛋糕给Alice,因此Alice得到两个蛋糕,如果蛋糕店B和蛋糕店C能够有确认付款信息,就不会发生重放漏洞,没有漏洞就没有被攻击的可能,也就不会损失蛋糕了。
而在区块链上就是分叉之后,就可以做重放攻击,以比特币(BTC)和比特币现金(BCH)为例,BCH是从BTC中分叉出来的,但是两者在所有基本的功能上是一样的,只有BCH比BTC增大了区块大小。这个时候Alice从B处购买了10BTC,Alice把这交易信息交给BTC的矿工,获取10BTC,但是Alice复制了交易信息交给了BCH的矿工,这样下矿工在验证签名之后放在BTC又放到BCH里,最后Alice就可以获得到10BTC也拥有10BCH。
最佳案子:以太坊重放攻击
重放攻击最佳的案例就是以太坊硬分叉的时候。以太坊硬分叉出现了ETH和ETC两条链,两条链上的交易数据结构是完全一样的,因此一笔交易在ETH上是有效的,那它在ETC上同样会被接受,反之亦然。因为当时所有人都认为ETC将不会再存在,所以分叉前没人意识到两条链会产生相互重放问题。后来还有许多矿工继续在维持ETC链时,大家发现在ETH链上的交易拿到ETC链继续重放仍然是有效的。
以太坊分叉时几乎所有交易所也都没发现到这个问题,这时候只要有人从交易所提取ETH币,就有可能得到同等数量的ETC币。许多人利用这个漏洞,不断在交易所充币和提币(ETH),从而获取額外的ETC。这就是云币、BTC-e等交易所发布说自己被重放攻击了,被骗取了几乎所有ETC。“重放攻击”也就此闻名于币圈。
打开APP阅读更多精彩内容
点击阅读全文