Security

礦池在建構他們的 coinbase 交易時是否不斷驗證 createrawtransaction 的輸出?

  • May 13, 2021

礦池創建自己的 coinbase 交易來支付自己的費用,並且他們通過散列不同的標頭開始 PoW,是什麼阻止了黑客使用不同的輸出更改 createrawtransaction(他的比特幣地址而不是礦池比特幣池地址)?

礦池如何知道他們為礦工提供的標頭包含一個 merkle 根,該根包含使用有效輸出(他們的比特幣地址而不是另一個地址)創建的 coinbase 交易?

謝謝

隨著今天使用的 Stratum V1 協議(以及目前提出的 Stratum V2 協議),礦池實際上將 coinbase 交易的部分發送給他們的礦工,讓這些礦工進行修改。具體來說,他們在他們的 coinbase 交易中保留空間供礦工用作額外的 nonce。這些礦工將建構 coinbase 交易,插入額外的 nonce,計算 merkle 根(為他們提供 merkle 分支以能夠完成 merkle 根),然後創建塊頭。

然而,當礦工送出他們的工作時,他們只送出他們添加的部分——即隨機數、時間戳和額外的隨機數。然後,礦池將使用給定的額外隨機數重構 coinbase 交易,重構 merkle 根,重構區塊頭,並驗證區塊頭是否滿足該礦工的 PoW 要求。如果礦工或位於礦池和礦工之間的攻擊者修改了 coinbase 交易,那麼他們為送出的份額計算的塊雜湊不太可能滿足該礦工的 PoW 要求。

礦工不太可能createrawtransaction用於創建他們的 coinbase 交易,因為無論如何它都無法這樣做。createrawtransaction不允許呼叫者將輸入設置vout為 coinbase 交易的正確值。因此,礦池軟體很可能在內部創建 coinbase 交易,而不是將其外包給 bitcoind。在這種情況下,他們將使用正確的輸出。如果不是,那麼要麼是在礦池發送之後但在礦工收到之前,有什麼東西在操縱 coinbase 交易,要麼攻擊者能夠直接修改礦池軟體的記憶體。

在第一種情況下,我之前描述的 PoW 檢查是保護。在任何情況下,礦池對於外部實體(外部,我的意思是礦池軟體的外部,它仍然可以在同一台受感染的機器上執行)在發送幣庫時修改幣庫並不能做太多事情。在第二種情況下,礦池無法防止這種情況,因為攻擊者總是可以讓軟體認為他們的 coinbase 是正確的。

引用自:https://bitcoin.stackexchange.com/questions/106261