什麼是重放攻擊 ( Replay attack)

重放(Replay)也稱為重播、回放, 即某個消息或數據原封不動的重新發送給接收方一次,而接收方會接受這消息或數據,當這個動作是成立時,表示接收方無法有效辨識該數據是已經收過,這將會是重放漏洞

重放攻擊主要是在有區塊鏈發生分叉之後,因為分家後之兩方都共同還保有分家之前的資料,因此分家之後在兩邊都可以做一樣的交易。 例如有一間蛋糕店A但是因為理念不同而分家成蛋糕店B和蛋糕店C,分家之後兩家共同擁有之前客戶資料與交易訊息且用的系統還是一樣的包含驗證付款訊息系統,接著各自經營客戶與交易並不會互相交換訊息。

Image for post
Image for post

現在Alice拿著付款訊息給蛋糕店B的服務員後,蛋糕店C的服務員用電腦確認訊息後將蛋糕給Alice。拿到之後Alice又拿相同付款訊息給蛋糕店C的服務員後,蛋糕店C的服務員用電腦確認訊息後又將蛋糕給Alice,因此Alice 得到兩個蛋糕, 如果蛋糕店B和蛋糕店C能夠有確認付款訊息,就不會發生重放漏洞,沒有漏洞就沒有被攻擊的可能,也就不會損失蛋糕了。

Image for post
Image for post

而在區塊鏈上就是分叉之後,就可以做重放攻擊,以Bitcoin (BTC) 和Bitconnect (BCC) 為例,BCC是從BTC中分叉出來的,但是兩者在所有基本的功能上是一樣的,只有BCC比BTC增大了區塊大小。這個時候Alice從B處購買了10BTC,Alice把這交易訊息交給BTC的礦工,獲取10BTC,但是Alice複製了交易訊息交給了BCC的礦工,這樣下礦工在驗證簽名之後放在BTC又放到BCC裡,最後Alice就可以獲得到10BTC也擁有10BCC。

最佳案子 : 以太坊重放攻擊

重放攻擊最佳的案例就是以太坊硬分叉的時候。以太坊硬分叉出現了ETH和ETC兩條鏈,兩條鏈上的交易數據結構是完全一樣的,因此一筆交易在ETH上是有效的, 那它在ETC上同樣會被接受,反之亦然。 因為當時所有人都認為ETC將不會再存在,所以分叉前沒人意識到兩條鏈會產生相互重放問題。 後來還有許多礦工繼續在維持ETC鏈時, 大家發現在ETH鏈上的交易拿到ETC鏈繼續重放仍然是有效的。

以太坊分叉時幾乎所有交易所也都沒發現到這個問題, 這時候只要有人從交易所提取ETH幣,就有可能得到同等數量的ETC幣。許多人利用這個漏洞,不斷在交易所充幣和提幣(ETH), 從而獲取額外的ETC。 這就是雲幣、BTC-e等交易所發布說自己被重放攻擊了,被騙取了幾乎所有ETC。“重放攻擊”也就此聞名於幣圈。

Written by

撰寫任何事情,O型水瓶混魔羯,咖啡愛好者,Full stack/blockchain developer,Founder of Blockchain&Dapps meetup and DeFi-Decentralized-Finance-SG meetup,Udemy teacher。

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store