1. 程式人生 > >在BCH硬分叉後防止重放攻擊-1

在BCH硬分叉後防止重放攻擊-1

導致新加密貨幣的硬分叉為加密交換運營商帶來了獨特的機遇和挑戰。Poloniex在最近的Bitcoin Cash硬叉之後面臨的一個挑戰是保護我們的客戶免受重播攻擊。由於SV鏈後面的開發團隊選擇在分叉後近兩週才實施重放保護,因此Poloniex工程師的任務是設計解決方案。

社群中的許多人對Poloniex如何應對這一特殊挑戰感到好奇,因此我們決定提供一些見解。

blogimg馬球重播

什麼是重播攻擊?

雖然名稱暗示某種惡意行為,但重放攻擊可能是由於節點在硬分叉後經歷的混亂而發生的。這種混淆可能導致代幣持有人無意中在其中一條新鏈上傳送交易,從而導致資金損失。

在硬分叉之前,比特幣現金節點都在監聽新的有效比特幣現金交易。

當節點聽到新交易時,它會執行數學測試,以便驗證發件人是否是資金的真正所有者。如果此數學測試告訴節點該事務是有效的,它將告知網路中的其他節點,並且該事務最終將被新增到區塊鏈中。

在硬分叉之後,一些節點運營商立即升級到比特幣ABC鏈,一些運營商升級到SV鏈。當一個鏈上的節點聽到另一個聽起來有效的鏈的事務時,會發生重放攻擊,因此它會將其傳遞給網路的其餘部分。例如,Alice向Bob傳送了1個比特幣ABC,最終也無意中向Bob傳送了1個比特幣SV。她的交易在第二條鏈上得到“重播”。

為什麼會這樣?

要理解為什麼會發生這種情況,我們必須看看比特幣現金交易的內幕。

如果Alice有一個15比特幣現金的錢包,她沒有15個獨立的BCH - 她擁有多塊比特幣現金,稱為

輸出,最多可加15比特幣現金。例如,Alice的15 BCH可能是兩個輸出的組合:10 BCH和5 BCH。在區塊鏈拆分後,比特幣現金硬叉之後,愛麗絲現在在兩個不同的區塊鏈上具有相同的輸出:10個BCH-ABC,5個BCH-ABC和10個BCH-SV,5個BCH-SV。可以使用相同的私鑰來移動所有這些輸出。

為簡單起見,假設Alice想要將她的5 BCH-ABC傳送給Bob(儘管交易通常涉及多個輸出的組合)。使用她的私鑰,她簽署了一條訊息,說明將此BCH- ABC的特定輸出傳送給Bob此時,BCH-ABC節點可以執行我們前面提到的數學測試,證明Alice擁有私鑰來發送此事務。比特幣SV節點“偷聽”此事務時出現問題。

比特幣SV節點可以執行相同的數學測試,並得出結論,Alice使用她的私鑰將5 BCH SV的特定輸出傳送給Bob

Alice的數字簽名在兩個鏈上都有效。即使她只打算向Bob傳送5個BCH-ABC,她也最終還向他傳送了5 BCH SV的匹配輸出。

如何防止重放攻擊

如您所見,重放攻擊可以在硬分叉後立即發生,因為每個人在兩個不同的鏈上都有相同的輸出。在一條鏈上移動輸出的數字簽名能夠在另一條鏈上移動匹配的輸出。

然而,由於兩個鏈條都在叉子之後單獨開採,因此通過新的coinbase獎勵引入了新的獨特輸出。ABC鏈上的硬幣基礎獎由SV鏈上不存在的輸出組成,反之亦然。這些後叉輸出是防止重放攻擊的關鍵。

比方說,吉米是比特幣現金礦工。如果在分叉後,Jimmy開始挖掘BCH-ABC並獲得新建立的BCH-ABC的幣基獎勵,這些將是SV鏈上不存在的輸出。如果他將這5個BCH-ABC傳送給Alice,她可以將它們傳送給Bob而不用擔心重播攻擊。如果比特幣SV節點無意中聽到此事務,它將無法識別Alice嘗試傳送的輸出,因此沒有比特幣SV會移動。

使用post-fork輸出防止重放攻擊

在分叉之後,Poloniex立即開始收集一小組後叉輸出或UXTO。如果Alice是Poloniex的客戶並且要求撤銷5 BCH-ABC,我們將混合至少1個後叉輸出。如果BCH-SV節點無意中聽到我們的事務,則包含post-fork輸出將阻止SV節點識別事務。數字簽名將移動ABC鏈上的指定輸出而不是SV鏈上的指定輸出,因為這些特定輸出並非全部存在於SV鏈上。

通過採用包括1個後叉輸出以及所有BCH-ABC和BCH-SV撤銷的方法,Poloniex能夠充滿信心地操作交易所及其客戶不會因重放攻擊而遭受資金損失。


文章來自Connor Dempsey

致March Boorstin領導BCH硬叉的工程設計,並與Anders Brownworth一起為本文提供了技術見解。