您现在的位置: 比特财富网 >> 区块链 >  >> 區塊鏈百科
深度解析以太坊重放攻擊

引言

以太坊硬分叉後出現了大量的“重放攻擊”,有交易所聲稱丟了幣,用戶丟幣的事更多。www.emoneybtc.com那到底什麼是重放攻擊呢?

計算機術語裡的“重放攻擊”

以太坊硬分叉後發生的“重放攻擊”和傳統計算機術語不是一回事。

傳統術語“重放攻擊”:指的是身份欺詐。在維基百科上定義很清晰,如下,

假設Alice向Bob認證自己。Bob要求她提供密碼作為身份信息。同時,Eve竊聽兩人的通訊,並記錄密碼。在Alice和Bob完成通訊後,Eve聯系Bob,假裝自己為Alice,當Bob要求密碼時,Eve將Alice的密碼發出,Bob認可和自己通訊的人是Alice。 
以太坊硬分叉後產生的“重放攻擊”並不是身份欺詐,是一條鏈上的交易在另一條鏈也往往是合法的,交易可以重新在另一鏈上廣播,所以才被稱為“重放攻擊”,但這本質上並不是一種“攻擊”。

以太坊硬分叉後發重的“重放攻擊”

以太坊在192萬區塊高度發生了硬分叉,產生了兩條鏈,分別稱為ETH chain和ETH Classic chain,上面的代幣分別稱為ETH和ETHc。這兩條鏈上的地址和私鑰生產算法相同,交易格式也完全相同,導致在其中一條鏈上的交易在另一條鏈上很可能是完全合法的。所以你在其中一條鏈上發起的交易,就可以到另一條鏈上去重新廣播,可能也會得到確認。這就是“重放攻擊”。

我們使用例子來說,這次以太坊硬分叉後發生的“重放攻擊”是這樣的:

1.以太坊在第1920000區塊高度上硬分叉出來兩條鏈,分別稱為ETH chain和ETH Classic chain,上面的代幣分別稱為ETH和ETHc。

2.在硬分叉高度前的所有ETH都在分叉後的兩條鏈上有用,即持有分叉前的ETH都自動被贈送等額ETHc。

3.某個用戶持有在硬分叉高度前的ETH,該用戶將自己的硬分叉高度前的ETH通過自己控制私鑰的本地錢包(這個無論是ETH chain還是ETH Classic chain錢包都是一樣的)發一筆交易到交易所充值到其賬戶的ETH。但ETH chain和ETH Classic chain都能夠識別這一次交易,都是合法的交易,都會打包交易。也就是本來用戶是在一條鏈上廣播交易,但可以在另一條鏈上被“重放”廣播了。(你可以自己用錢包去廣播,也可能會有人或程序找到你的交易信息幫你去廣播)

4.因為用戶充值賬戶是交易所的,對用戶來說是一個offchain錢包。如果交易所不給你,那你就丟掉了本來應該屬於你的ETHc。

5.如果用戶在硬分叉高度前是將ETH存放在交易所,原則上交易所應該是給用戶兩種幣。當用戶從交易所提取ETH到本地錢包時,剛好交易被提取的幣是在硬分叉高度前的幣。而且你又在你自己的電腦上裝了兩個錢包,分別是ETH chain錢包和ETH Classic chain錢包,而且提幣地址在ETH chain錢包上生成,然後通過導入私鑰的形式錢地址導進ETH Classic chain錢包上。那你提幣的同時,可以在兩條鏈上都廣播你的提幣交易,這樣你的兩個本地錢包都能收到等額的幣。

6.步驟5裡,如果用戶只裝了一個錢包比如ETH chain錢包,那另一份ETHc就會收不到,但並不會丟,因為你的收幣私鑰是和你的ETH chain一樣的,只要你提取出來這個私鑰,然後導入ETH Classic chain錢包就可以了。

7.步驟5裡,如果用戶提走ETH,是充值到了另一個交易所,比如從yunbi提ETH到P網。這時候P網又只給用戶一種幣即ETH,那用戶就會丟失掉ETHc,丟掉的在誰手上呢,在P網手上。如果用戶又回去問yunbi交易所要一份ETHc,yunbi很人品好有擔當,真給了,那雲幣就相當於賠了一份ETHc幣。

8.任何持有920萬區塊高度後的幣,情況要更復雜。比如有一筆幣從硬分叉前發到硬分叉後的一個地址1上,這個地址1同時在ETH和ETHc都是有效的。那你在ETH chain上收到的幣從地址1再次發送到地址2,我們記這筆交易為交易2。這筆交易在ETH Classic chain也是有效的,也是可以被重放的,我們記被重放的這筆交易為交易2′。但如果有辦法讓交易2發送有效,但讓交易2′無效,即ETH chain上的幣從地址1成功發送到了地址2,但在ETH Classic chain上從地址1發送到地址2失敗了。這種情況下,ETH chain的地址2的幣再次交易時就無法被重放到ETH Classic chain上了。

9.步驟8裡,什麼情況下能讓交易2′發送失敗呢?也就是怎麼樣才能解決掉重放攻擊呢?其中一個辦法就是在交易2′發送後,但0確認前,對交易2′發起雙花攻擊,即使用相當的私鑰再簽一次名發起交易2”,將幣發到另外一個地址3,如果交易2”成功了,而交易2′失敗了,從此ETH chain上的地址2的幣和ETH Classic chain上的地址3的幣都無法被重放了。

能不能將交易2′在ETH Classic chain上不廣播呢?不能,你不廣播,會有人幫你廣播的,交易信息不是加密的。誰知道哪個狗日的壞人找到你的交易信息後給你廣播一下,你的這條分支的幣就被發到了這條鏈的地址2了。

但要想把所有ETH地址和ETHc地址(這兩種地址是完全一樣的,ETH地址也就是ETHc地址)做到你有幣我就沒有,那幾乎是不可能做到的,地址太多了。也就是想用這個辦法徹底解決掉重放問題是不可能的了。

但對於用戶來說,你可以使用這個辦法分離你的ETH和ETHc,使這兩者分另處在不同的地址上,這樣你以後就不需要想著在一條鏈上做了交易我是否需要重放到另一條鏈了。不過問題又來了,誰會發起雙花攻擊0確認的交易呢?好像很難啊,所以我認為普通用戶基本上是做不到的。交易所應該會。

10.還有一種辦法,對其中一條鏈展開51%攻擊,直接消滅掉其中一條鏈就可以了,讓其算力跌到零,從此高度不再上漲,也就是這種鏈死了。這樣問題就徹底解決掉了。

或者讓其中一條鏈的價格跌到很低很低,大家都不關心了,也就懶去理重放交易了。


比特幣交易平台 ↓   交易APP下載
  風險提示:比特財富網的各種信息資料僅供參考,不構成任何投資建議,不對任何交易提供任何擔保,亦不構成任何邀約,不作為任何法律文件,投資人據此進行投資交易而產生的後果請自行承擔,本網站不承擔任何責任,理財有風險,投資需謹慎。
比特財富網 版權所有 © www.emoneybtc.com