什么是区块链上的重放攻击?
区块链中的重放攻击
重放攻击剖析
我们假设分叉前用户A的地址上有10个以太坊,用户B的地址上有20个以太坊,分叉后用户A的地址上有10个ETH和ETC,用户B则有20个ETH和ETC。如果用户A在分叉后向用户B发起10ETH的交易,之后用户B再向用户A发起15ETH的交易,那么这两笔交易将会原封不动地呈现在ETC区块链上,表现为A向B发送10ETC,B向A发送15ETC,看起来似乎是没有问题的。
重放攻击图解
然而如果ETC区块链上的用户A没有ETC,那么上述交易将会让用户B在没有收到A发送的ETC的情况下向A发送15ETC,白白损失了自己的资金。这就是区块链上的重放攻击,而这常常发生在交易所中。恶意用户可以通过监听用户A和用户B的交易情况来猜测二者身份,如果两位用户均没有防范重放攻击的意识或者分叉链本身不具备防重放攻击能力,恶意用户就可以通过映射交易窃取通常用户的账户资金。
形象地说,就像故宫博物馆一般。蒋介石撤回台湾时在台北设立了一个故宫博物馆——台北故宫博物馆。由于北京也有北京故宫博物馆,如果你仅仅向”故宫博物馆“邮寄信件的话,很明显邮递员会感到烦恼,为了解决这个问题便将你的信件复印一份,给北京和台北两地故宫博物馆各寄出一份,这种情况下我们可以说你的信件遭受了"重放攻击"。
除了对分叉链条发起的重放攻击外,对智能合约也可发起重放攻击,其形式更类似传统的重放攻击定义——恶意者窃听了某一智能合约的交易请求,不断向该智能合约发送窃听到的交易信息(哪怕不知道交易情况也不重要),直到智能合约中预存的用于执行的Gas被消耗殆尽,智能合约被迫暂停。
防止重放攻击
重放攻击经过The DAO事件和BCH硬分叉事件后已经被广大开发者所了解到,目前主流的区块链项目都包含了对重放攻击的防御手段。但防范重放攻击的意识仍需要留存于脑海中,对于开发者而言,防范重放攻击仍然是需要考虑的一点,毕竟会有让事务无法正常运行的风险;对于用户而言,防范重放攻击可以避免自己的合法资产被窃取。