在BCH硬分叉後防止重放攻擊-1
導致新加密貨幣的硬分叉為加密交換運營商帶來了獨特的機遇和挑戰。Poloniex在最近的Bitcoin Cash硬叉之後面臨的一個挑戰是保護我們的客戶免受重播攻擊。由於SV鏈後面的開發團隊選擇在分叉後近兩週才實施重放保護,因此Poloniex工程師的任務是設計解決方案。
社群中的許多人對Poloniex如何應對這一特殊挑戰感到好奇,因此我們決定提供一些見解。
什麼是重播攻擊?
雖然名稱暗示某種惡意行為,但重放攻擊可能是由於節點在硬分叉後經歷的混亂而發生的。這種混淆可能導致代幣持有人無意中在其中一條新鏈上傳送交易,從而導致資金損失。
在硬分叉之前,比特幣現金節點都在監聽新的有效比特幣現金交易。
在硬分叉之後,一些節點運營商立即升級到比特幣ABC鏈,一些運營商升級到SV鏈。當一個鏈上的節點聽到另一個聽起來有效的鏈的事務時,會發生重放攻擊,因此它會將其傳遞給網路的其餘部分。例如,Alice向Bob傳送了1個比特幣ABC,最終也無意中向Bob傳送了1個比特幣SV。她的交易在第二條鏈上得到“重播”。
為什麼會這樣?
要理解為什麼會發生這種情況,我們必須看看比特幣現金交易的內幕。
如果Alice有一個15比特幣現金的錢包,她沒有15個獨立的BCH - 她擁有多塊比特幣現金,稱為
為簡單起見,假設Alice想要將她的5 BCH-ABC傳送給Bob(儘管交易通常涉及多個輸出的組合)。使用她的私鑰,她簽署了一條訊息,說明將此BCH- ABC的特定輸出傳送給Bob。此時,BCH-ABC節點可以執行我們前面提到的數學測試,證明Alice擁有私鑰來發送此事務。比特幣SV節點“偷聽”此事務時出現問題。
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一起為本文提供了技術見解。