Transactions

損壞的未使用交易輸出列表導致高於預期的費用是否可以被視為實際威脅?

  • June 15, 2018

讓我們想像一下,攻擊者設法破壞了您的本地未使用交易輸出列表(或您使用的區塊鏈瀏覽器),其方式是某些未使用的交易輸出似乎比實際持有更少的硬幣。當您繼續進行新交易以發送 1 BTC 並載入未使用的輸出列表時,您很樂意將看似有 2BTC 但實際上有 100 BTC 的輸出作為輸入,但您不知道,因為您有假資訊。因此,您將您的交易輸出設置為接收者的 1 BTC 和 0.99 BTC 作為找零,相信支付 0.01 BTC 的費用並且您愉快地簽署並送出該交易。但令您非常失望的是,第二天您發現您實際上支付/損失了 98 BTC 作為費用!攻擊者沒有得到任何東西,但他讓你損失了大量的 BTC。

我的觀點是,序列化交易中的交易輸入僅包含輸出來自的交易的輸出索引和雜湊。但是,由於您不向網路廣播,您認為輸入的大小 - 您可以簽署並送出有效交易,儘管您不同意它,如果您知道所涉及輸入的實際大小。

我知道 - 您可以驗證輸入來自的交易的雜湊值,如果出現問題,拒絕交易,否則交易將被網路拒絕,因為實際上無法“破解”交易雜湊,但我不確定輕量級客戶端/硬體錢包是否真的驗證了未使用輸出的來源,例如,我懷疑 TREZOR 不會這樣做,因為在協議中你只是發送交易輸入和輸出。

那麼你能告訴我,目前的輕量級客戶端和硬體錢包是如何以及是否受到上述攻擊的保護?

對上述問題的一個簡單解決方法是在交易輸入中明確包含金額,因此當您簽署交易時,您會說“我相信輸入 x 有 y 個硬幣,如果您認為這不是真的,則拒絕交易”,但目前沒有辦法做到這一點AFAIK。

因此,您將您的交易輸出設置為接收者的 1 BTC 和 0.99 BTC 作為找零,相信支付 0.01 BTC 的費用並且您愉快地簽署並送出該交易。但令您非常失望的是,第二天您發現您實際上支付/損失了 98 BTC 作為費用!攻擊者沒有得到任何東西,但他讓你損失了大量的 BTC。

事實上,這會起作用,而且這是一個已知問題。

我知道 - 您可以驗證輸入來自的交易的雜湊值,如果出現問題,拒絕交易,否則交易將被網路拒絕,因為實際上無法“破解”交易雜湊,但我不確定輕量級客戶端/硬體錢包是否真的驗證了未使用輸出的來源,例如,我懷疑 TREZOR 不會這樣做,因為在協議中你只是發送交易輸入和輸出。

實際上,他們確實驗證了這一點。對於遺留交易,您必須向 TREZOR 發送您從其輸出的所有交易,以證明所涉及的金額。

對上述問題的一個簡單解決方法是在交易輸入中明確包含金額,因此當您簽署交易時,您會說“我相信輸入 x 有 y 個硬幣,如果您認為這不是真的,則拒絕交易”,但目前沒有辦法做到這一點AFAIK。

這確實是一個解決方案,也是 SegWit 協議更改中包含的更改之一。在花費 SegWit 輸出時,使用了一種計算簽名雜湊的新方法,其中明確包括您花費的金額。

這意味著,如果您以某種方式向硬體設備謊報所花費的金額,則生成的簽名將無效。

您可以在 BIP 143 中閱讀有關此更改的更多資訊。

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