什么是重放攻擊Replay attack
重放(Replay)也稱為重播、回放,即某個(gè)消息或數(shù)據(jù)原封不動(dòng)的重新發(fā)送給接收方一次,而接收方會(huì)接受這消息或數(shù)據(jù),當(dāng)這個(gè)動(dòng)作是成立時(shí),表示接收方無法有效辨識(shí)該數(shù)據(jù)是已經(jīng)收過,這將會(huì)是重放漏洞。
重放攻擊主要是在有區(qū)塊鏈發(fā)生分叉之后,因?yàn)榉植婧笾畠煞蕉脊餐€保有分叉之前的數(shù)據(jù),因此分叉之后在兩邊都可以做一樣的交易。例如有一間蛋糕店A但是因?yàn)槔砟畈煌旨页傻案獾闎和蛋糕店C,分家之后兩家共同擁有之前客戶資料與交易信息且用的系統(tǒng)還是一樣的包含驗(yàn)證付款信息系統(tǒng),接著各自經(jīng)營客戶與交易并不會(huì)互相交換信息。
現(xiàn)在Alice拿著付款信息給蛋糕店B的服務(wù)員后,蛋糕店C的服務(wù)員用電腦確認(rèn)信息后將蛋糕給Alice。拿到之后Alice又拿相同付款信息給蛋糕店C的服務(wù)員后,蛋糕店C的服務(wù)員用電腦確認(rèn)信息后又將蛋糕給Alice,因此Alice得到兩個(gè)蛋糕,如果蛋糕店B和蛋糕店C能夠有確認(rèn)付款信息,就不會(huì)發(fā)生重放漏洞,沒有漏洞就沒有被攻擊的可能,也就不會(huì)損失蛋糕了。
而在區(qū)塊鏈上就是分叉之后,就可以做重放攻擊,以比特幣(BTC)和比特幣現(xiàn)金(BCH)為例,BCH是從BTC中分叉出來的,但是兩者在所有基本的功能上是一樣的,只有BCH比BTC增大了區(qū)塊大小。這個(gè)時(shí)候Alice從B處購買了10BTC,Alice把這交易信息交給BTC的礦工,獲取10BTC,但是Alice復(fù)制了交易信息交給了BCH的礦工,這樣下礦工在驗(yàn)證簽名之后放在BTC又放到BCH里,最后Alice就可以獲得到10BTC也擁有10BCH。
最佳案子:以太坊重放攻擊
重放攻擊最佳的案例就是以太坊硬分叉的時(shí)候。以太坊硬分叉出現(xiàn)了ETH和ETC兩條鏈,兩條鏈上的交易數(shù)據(jù)結(jié)構(gòu)是完全一樣的,因此一筆交易在ETH上是有效的,那它在ETC上同樣會(huì)被接受,反之亦然。因?yàn)楫?dāng)時(shí)所有人都認(rèn)為ETC將不會(huì)再存在,所以分叉前沒人意識(shí)到兩條鏈會(huì)產(chǎn)生相互重放問題。后來還有許多礦工繼續(xù)在維持ETC鏈時(shí),大家發(fā)現(xiàn)在ETH鏈上的交易拿到ETC鏈繼續(xù)重放仍然是有效的。
以太坊分叉時(shí)幾乎所有交易所也都沒發(fā)現(xiàn)到這個(gè)問題,這時(shí)候只要有人從交易所提取ETH幣,就有可能得到同等數(shù)量的ETC幣。許多人利用這個(gè)漏洞,不斷在交易所充幣和提幣(ETH),從而獲取額外的ETC。這就是云幣、BTC-e等交易所發(fā)布說自己被重放攻擊了,被騙取了幾乎所有ETC?!爸胤殴簟币簿痛寺劽趲湃?。