重放也称为重播、回放,即某个消息或数据原封不动重新发送给接收方一次。如果接收方在多次接收同样数据无法进行有效识别,就会存在重放漏洞。
什么是“重放攻击”?
重放攻击是计算机世界黑客常用的攻击方式之一,是指攻击者发送一个目的主机已接收过的信息欺骗系统,从而达到多次欺诈的目的。
区块链世界中,重放攻击是发生在区块链硬分叉之时的一种独特现象。进行硬分叉之后,区块链发生永久性分歧并产生两条历史交易、地址、私钥以及余额等完全对应的链,导致在其中一条链上的交易在另一条链上很可能是完全合法的。你在其中一条链上发起的交易,可以到另一条链上去重新广播,也可能会得到确认,这就是“重放攻击”。可以将其通俗理解为,使用同一付款信息多次购买商品的过程。
举例:聪聪向某个不能有效分辨是哪一笔付款信息的早餐店买豆浆,当他把成功付款的信息出示给服务员后,服务员把豆浆给他。聪聪再把该付款信息出示给另一个服务员,又得到一份豆浆。不断重复,就可以源源不断骗得豆浆,对于早餐店来说就是被重放攻击了。
以太坊重放攻击事件
当年以太坊硬分叉后出现了ETH和ETC两条链,有人发现在ETH链上的交易拿到ETC链继续重放仍然是有效的。
因为没经验,当时几乎所有交易所都没提前意识到“重放攻击”这个问题,没有提前做重放保护,许多人利用这个漏洞,不断在交易所充提ETH,从而获取额外的ETC。事后,云币、BTC-e等交易所公告说自己被重放攻击骗取了几乎所有ETC。“重放攻击”也就此闻名于世。
什么是区块链独有的“重放保护”?
通俗来讲,重放保护在区块链硬分叉中起到了有效识别以及拒绝重放信息的作用。该解决方案通过添加随机数、时间戳,或者流水号等等方法,在两条链间形成保护,让一条链上的事务在另一条链上无效被识别,以确保两条链独立运行,防止两链间出现相互多次识别的情况。
举例:BTC分叉出BCH时的重放保护。当时,BCH的做法是在做签名的时候,在SIGHASH_TYPE上增加了一个FORK_ID位,并将自己的FORK_ID设置为0x40。也就是说BCH网络使用了区别于BTC网络的SIGHASH_TYPE。因此BCH交易的签名结果在BTC网络上验证不会通过,反之亦然。这样便实现了BCH/BTC网络的双向重放保护。
领取专属 10元无门槛券
私享最新 技术干货