Replay-Attack
如果輸入具有完全相同的餘額,如何防止惡意使用者使用舊交易的簽名創建新交易?
我不是在談論雙重支出。我說的是這種情況:
假設地址 A 最初有 1 BTC 餘額。創建了一個有效的交易,為簡單起見,假設所有餘額都以有效的方式轉移到地址 B。
好的,現在交易已經確認,並且 A 還從其他隨機地址收到了另外 1 個 BTC。
現在,什麼可以防止惡意使用者在滿足相同條件時重新廣播舊交易。輸入具有完全相同的餘額,舊簽名告訴將餘額發送給 B 等。
顯然,這意味著它將是相同的交易 ID,並且網路會拒絕它。所以我的問題是,交易中允許您防止此類攻擊的變數是什麼?我找不到任何文件。
每個完整節點都會跟踪所有未使用的交易輸出(UTXO)。UTXO 通過它們的 outpoint 標識
txid:vout
,其中txid
是創建它的交易的交易標識符,並且vout
是該交易中的輸出位置。事務 ID 通常是唯一的,因此每個 outpoint 也只能出現一次。¹要花費任何比特幣,必須引用輸入中使用的 UTXO。因此,重放交易將是不可行的,因為接收到相同地址的新 UTXO 的輸出點會有所不同,因此重放的交易將引用舊的、已經花費的輸入。
txid
¹當礦工創建兩個具有相同輸入和輸出的 coinbase 交易時,區塊鏈中有兩對碰撞。每個都導致兩個輸出中的一個變得不可使用,因為在創建第二個時第一個仍然存在。為了緩解這個問題,BIP30規定,除非具有相同 id 的舊 tx 的所有輸出都用完,否則不能在塊中接受重複的 txid。這個重複向量已經通過要求 coinbase 交易通過 BIP34 引用它們所屬的塊的高度來完全解決。現在認為生成 txid 衝突是不可行的,因此每個 UTXO 很可能都是唯一的。H/T 感謝 Pieter Wuille 指出相關的 BIP 和更正。