如果我將交易的 scriptPubKey 中的 PubKeyHash 更改為我的 PubKeyHash 會怎樣?
假設人 A 與人 B 進行交易並將其發送到比特幣網路。假設我將交易的 scriptPubKey 中的 PubKeyHash 更改為我的 PubKeyHash 並將其發送到比特幣網路。我發送的交易將是有效的交易,對嗎??謝謝。
當 A 人“發送”他們的交易時,他們必須首先對其進行簽名,然後將其廣播到記憶體池。簽名確保如果任何簽名部分發生更改,則交易無效。因此,如果您更改 scriptPubKey,他們添加到交易中的簽名將變為無效,並且當您嘗試廣播交易的更新版本時,它將被所有節點拒絕。
一個可能的例外是如果人 A 使用 SIGHASH_NONE。如果設置了此標誌,則簽名不會對輸出的 scriptPubKeys 進行簽名,因此它們是可變的,不會使簽名無效。AFAIK,由於這種不安全性,沒有人使用 SIGHASH_NONE 。
有關 Sighash 標誌的更多資訊:https ://river.com/learn/terms/s/sighash-flag/
為確保交易不被篡改,所有者將對交易進行簽名,然後廣播到網路。更改交易的任何部分都將更改交易的簽名,並且其他節點將丟棄損壞的交易,因為消息(交易)已更改。
但還是存在篡改的可能,
因為交易本身包含簽名,所以簽名不能自己簽名,因此在簽名期間簽名不包含在交易字元串中。因此,當交易在記憶體池中(等待被探勘的暫存區)並且已經計算/分配了 TxnID(交易雜湊)時,節點可以稍微更改您的簽名(以不使交易無效的方式)並且因為簽名現在被改變(反過來交易字元串被修改)..一個新的雜湊將被創建。
雖然交易的完整性保持良好並且比特幣將被發送到預期的接收者,但等待確認先前已知的 TxnID 的軟體/錢包仍將等待確認。
即使是在 BIP-141 之後將 SegWit 引入比特幣網路,這一問題也得到了解決。