當前位置:
首頁 > 最新 > 如何實施重放攻擊保護?給你講解5種辦法

如何實施重放攻擊保護?給你講解5種辦法

零識百科

翻譯:西溪明月

作者:Jimmy Song

編輯:格魯特

你可能連標題都還沒看懂

但是!

你勇敢地點進來了

想學習下是嘛!

不怕,我跟你白話白話

Step1:解剖下標題

實施?重放攻擊?保護?

換句話說,也就是避免「重放攻擊」

那「重放攻擊」是個啥?

分叉你一定不陌生,舉個栗子,比特幣分叉了對不對,由一條鏈變成了兩條鏈,在這兩條鏈都得到支持並持續運營的情況下,另外一條分叉出來的鏈又產生了BCC這一幣種,也就是BTC和BCC都存在。分叉完了之後如果不去管它,任其自然生長,這時候就會出現這樣的情況:你在其中一條鏈交易時,另外一條鏈也會進行相同的交易操作,比如BTC鏈上A給B轉100個幣,那麼在BCC鏈上也會出現給B轉過去100個幣的交易,這種情況被稱為重放攻擊

重放攻擊,懂了吧。

所以,這還得了。我們當初BTC分叉的時候,錢包里多了等額的BCC,我們是可以分別處理它們的(轉賬或者體現之類的),兩個幣之間不會相互影響,你以為這是天經地義的,實際上如果不採取措施,在你轉移BTC的時候BCC也會跟著跑。

那咋辦,是不是很頭疼。

所以就得開啟「重放攻擊」保護對吧。

那這個保護是怎麼做的呢?

就是分叉後在兩條鏈之間加了一重保護,比如在A鏈上進行一筆交易,那麼B鏈上重複的交易會被判為無效。

嗯,那就進行「重放攻擊」保護唄。

Step2:接下來你就可以安心進入正文了:

Jeff Garzik 近來在btc1 GitHub上恢復了「選擇性實施重放保護(opt-in replay prote ction)」。這使一些人開始焦慮,因為很多人認為缺乏重放保護會給網路造成各種各樣的可怕後果。

Jeff Garzik前bitcoin core 開發者,區塊鏈服務公司Bloq的聯合創始人兼首席執行官,Bloq將自身定位為 「企業級區塊鏈」服務,初始產品包括BloqEnterprise,BloqSuite和BloqThink。

本文闡釋的幾種防禦重放攻擊的方法,無論是否實施了重放保護,都可以採用。首先我們需要解釋比特幣的交易原理以及如何消費UTXO,我希望你——親愛的讀者,能夠更好地理解如何才能安全地繼續前行。

方法1:UTXOs 未花費的交易輸出

為了理解怎樣做才能防禦重放攻擊,我們首先應該了解比特幣的運作原理。

對於比特幣,即使所有付款都發送到了同一個地址,但其實你持有的並不是一個大的餘額,而只是一堆對你支付的小額錢款,叫做UTXO。

UTXO代表未花費的交易輸出,你可以將其想像成某人發送給你的銀行支票。你只能花費屬於自己的部分,這些支票加起來就是你錢包里的餘額。

當你花費比特幣時,你的錢包就會使用一張或幾張這樣的支票,將其作為輸入花掉。所以,如果Alice給你發送了5個比特幣,Bob給你3個,而你要給Charlie 8個,那麼你的錢包會使用「5個比特幣」 支票與「3個比特幣」支票作為輸入。你發送給Charlie 8個比特幣,他現在就擁有一張「8個比特幣」支票(注意,該例子忽略了交易費)。

UTXO的一個重要特徵是只要UTXO作為輸入被使用,整個UTXO就必須被花掉。也就是說,如果你在使用朋友發送給你的支票,就必須把它全部用掉。

那麼,如果你想給某人發送0.001個比特幣,但卻只有一張面值100比特幣的支票(UTXO),該怎麼辦呢?這就需要在一個交易中向多人發送比特幣,即你可以給別人發送0.001個比特幣,給自己發送99.9985個比特幣(並給礦工0.0005個比特幣作為挖礦獎勵)。那麼現在你就擁有一張新的支票(UTXO),面值為99.9985比特幣,它構成了你餘額。

這樣,一旦花掉一張UTXO,它就可以被忽略了。UTXO只有被花掉與未被花掉兩種狀態,不存在中間狀態,這便使編碼簡單多了。

全球的UTXO集,或者說所有人未花費的支票集,便是完整節點為了驗證沒有出現雙花攻擊所要追蹤的對象。同樣,一旦一張UTXO被花掉了,它便不再是UTXO了,而是花費了的交易輸出,可以作為交易的有效輸入被忽略。

方法2:重放攻擊

硬分叉之初,兩條鏈上的UTXO是相同的。重放攻擊若想成功,整個交易必須在兩條鏈上都有效。假如沒有強有力的重放保護,使用UTXO且在兩條鏈上都有效的所有交易都會輕易受到重放攻擊。

然而,隨著兩條鏈在交易構成上出現不同,UTXO集也開始出現不同。比如,兩條鏈上的coinbase交易當然是不同的。所以硬分叉後的Coinbase交易將不會被重放。也就是說,2x上的coinbase交易不會再1x上重放,同樣地,1x上的交易也不會在2x上重放。

當然,coinbase 交易(我們稱之為0級交易)會有輸出,那些輸出是UTXO集的一部分。任何作為輸入利用0級UTXO的交易(我們稱之為1級交易)也不會在另一條鏈上重放。此外,任何利用1級交易輸出的交易(我們稱之為2級交易)同樣也不會在另一條鏈上重放。如此循環再循環,到3級以致n級交易。

請注意,如果即使是單個N級交易是某項交易的輸入,該項交易就將不會在另一條鏈上重放。也就是說,2x上的N級交易不會在1x上重放,1x上的N級交易也不會在2x上重放。我們將N級交易的所有未花費輸出稱為重放保護的UTXO。

這個方法有點複雜,因為coinbase交易有個特殊的規則,規定這些交易不能在100個區塊上進行。通常這需要耗費17個小時,但依靠哈希算力分裂耗費的時間可能會更長。

方法3: 同時提交

不需要coinbase交易或衍生於coinbase的任何交易即可創建重放保護的UTXO的另一個方法是創建兩項不同的交易,並消耗同一個UTXO將它們發送給自己。

這個程序的運作如下:

假設你有一個UTXO,u

在兩項不同的交易中花費u,第一筆交易(tx1)去往地址1,第二筆交易(tx2)去往地址2。

以足夠的費用同時將tx1提交到鏈條1,將tx2交易提交到鏈條2。

如果一切正常,將在鏈條1上挖掘tx1,在鏈條2上挖掘tx2。當然,tx1可能在鏈條2上重放,但由於先提交tx2,這對鏈條2上的節點來說似乎是雙花,所以這些節點可能拒絕它。在鏈條1上重放tx2也是同樣的情況。對於先接收tx1的節點來說,這也像是雙花。

只要重放攻擊沒有立即發生,且兩項交易的費用都足夠高,你就需要在每條鏈上都有輸出,這些輸出可以用作重放保護的UTXO。

即使遭到了重放攻擊,也沒關係,因為你控制著地址,所以除了交易費之外,你並不會有什麼損失,還可以重新嘗試。

方法4:利用鎖定時間(Locktime)

創建重放保護的最後一種方法是利用鎖定時間(locktime)。並非很多錢包都提供這種功能,但你可以將非法交易置於比特幣區塊鏈上某個區塊號之前的區塊內。即如果你指定500,000這個區塊號,那麼這個區塊之前的任意包括此項交易的區塊都會被網路拒絕。

要使這點成功運作,關鍵在於一條鏈是否比另一條長且長度合適(至少是6,但最好是20~30) 比如,鏈條1在區塊500,010,而鏈條2在區塊500,000。

假設你有一個UTXO,u

在鏈條1上花費u,tx1的鎖定時間為500,011。

一旦將tx1包含在了一個區塊內(最好是在鏈條2上區塊500,011之前的區塊),就創建另一項交易(tx2),在鏈條2上將u花費在不同的地址里。

如果tx2在鏈條2上區塊500,011之前的區塊上進行了確認,我們就在兩條鏈上都有了重放保護的UTXO。

方法5:自然重放保護

事實證明,重放保護的UTXO可以有效防止重放攻擊。

你所需要的僅僅是一個重放保護的UTXO。該UTXO的價值可以微乎其微,因為其金額無關緊要。雙方最終可能會做的是提供水龍頭,這些水龍頭可以為你提供少量重放保護的UTXO,你可以用來確保交易不會被重放。

比特幣水龍頭就是一個會給訪問者分發少量比特幣的網站。數量從100聰到10000聰不等。通常你收到幣以後需要等待一定時間才能獲得下一次獎勵。最初的比特幣水龍頭由Gavin Andresen創辦,他是比特幣的主要創始科學家。它大概在2010年晚些時間開始出現,免費給每位訪問者5個比特幣。那時候每個比特幣大概值0.08美元。整個想法是為了傳播世界首個加密貨幣。

至少,我們可以期待交易所、商人以及其他比特幣企業等來利用UTXO,以免他們不小心向其客戶發送同等金額的其他幣種。換句話說,分叉後,你將很快能夠從交易所、水龍頭、商人等處得到重放保護的UTXO,因為免於重放攻擊符合他們的利益。

也就是說,如果內置強有力的重放保護,整個生態系統將更方便,且稅費更低,因為這會減少創建不可重放的UTXO的所需的開發時間。

對你來說這意味著什麼

如果你是持幣者,且目前沒有任何交易計劃,那麼實際進行交易前,這並不重要。

即使Segwit2x沒有提供任何重放保護,我們也還可以期待出現重放保護水龍頭,以便確保交易安全進行。你會希望從這些水龍頭來理解中本聰,並將錢包中的全部餘額(包括對中本聰的新理解)轉移到錢包的另一個地址。由於現在你的所有地址會被連接在一起,所以這會剝奪你的一些隱私,但這項交易不會被重放。

如果顧慮到隱私,你會想要更多重放保護的UTXO。但是,根據錢包內地址的數量,這會花費很多時間,更別說昂貴的費用了。要實現這點,你的錢包還需要有「幣控制(coin control)」功能(比特幣核心錢包以及Armory當然具有幣控制功能,以太坊在某種程度上也有)。順便說一句,這是錢包應該提供的功能,如果更過的錢包提供這項功能,且更多的用戶對此加以利用,比特幣就會更加安全。

也可能有些錢包可以讓你嘗試創建重放保護的UTXO。這要求錢包或者可以指定鎖定時間,或者可以使鎖定時間成為它最後知道的一個區塊(比特幣核心錢包是這樣做的)。換句話說,你需要等待你最愛的錢包為你提供一些功能來緩解這個問題。

結論

重放保護對於硬分叉實屬錦上添花,但沒有也不必擔心。包括水龍頭、錢包等在內的各種解決方案會層出不窮,可以讓你指定鎖定時間等。要保護比特幣安全,你永遠都會有選擇。你要做的就是留意並等待相關工具的出現。

但如果你是錢包/交易/支付處理人員/商人,那就另當別論了……

作者簡介Jimmy Song比特幣教育人員,開發人員

零識僅為翻譯中文供大家學習使用,本文版權歸英文原作者所有。

項目採訪

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 零識區塊鏈 的精彩文章:

區塊鏈+物聯網+共享經濟是什麼玩法?

TAG:零識區塊鏈 |