Blockchain
不誠實的節點能做什麼(或試圖做什麼)?
除了這種攻擊:https ://en.bitcoin.it/wiki/Double-spending
例如,他可以簡單地創建一個新區塊,其中包含一些從真實地址竊取資金的發明交易嗎?不擁有這些地址的私鑰?
就在我的腦海中,以下是不誠實的礦工可以做的一些事情:
- **未能在區塊中包含一項或多項交易。**這在技術上並不是“不誠實的”,因為該協議不要求所有傳輸的交易都包含在目前區塊中。例如,礦工永遠不會在目前區塊中包含不包含挖礦費用的交易,這被認為是完全可以的。但是,如果交易確實有費用(標準行為),那麼礦工仍然可以選擇不將任何牠喜歡的交易包含在一個區塊中。這樣做就是故意放棄利潤,所以不太可能,但肯定是有可能的。但是其他礦工不太可能這樣做,因此他們將在下次探勘區塊時將交易包括在內。
- **為自己適當的未簽名資金。**比特幣腳本只是為了花費資金而需要解決的難題。通常拼圖由發件人的私鑰簽名,但這不是必需的(儘管所有錢包軟體都預設這樣做)。如果有人愚蠢到手動創建一個不包含操作碼
OP_CHECKSIG
或OP_CHECKMULTISIG
操作碼的輸出腳本,那麼礦工可以更改交易中的任何內容。例如,假設有人使用輸出腳本創建交易,OP_1 OP_EQUAL
然後將其傳輸給礦工以包含在區塊鏈中。礦工可以通過輸入腳本創建另一筆交易,輕鬆完成難題並挪用這些資金OP_1
。(要驗證這些腳本,只需按順序放置 txin 和 txoutOP_1 OP_1 OP_EQUAL
-1==1
)。而且這裡最重要的是,由於沒有簽名,任何人都可以修改支出交易中的輸出腳本,因此礦工可以將資金導向其擁有的私鑰地址。- **適當的任何 SIGHASH_NONE 資金。**在簽署交易時,使用者的錢包軟體會在支出交易中的 txin 腳本中的簽名末尾放一個字節。這裡的一個
0x02
字節對應於SIGHASH_NONE
這意味著所有輸出腳本都被忽略以進行驗證。因此,如果有人發送這樣的交易,那麼礦工可以簡單地將他們自己的地址放入所有 txout 並將修改後的交易包含在一個塊中,從而有效地將資金發送給自己。然而,錢包軟體不會以這種方式設置簽名,因此有人必須故意愚蠢地以這種方式將資金洩露給礦工。- **通過交易延展性改變某些交易雜湊。**某些比特幣交易具有延展性。雖然礦工無法更改您發送的比特幣數量或這些資金的接收者,但它可以修改某些交易腳本(txin 腳本),從而改變交易雜湊。發生這種情況是因為腳本未由私鑰簽名。所以礦工可以改變這個腳本,只要它不改變功能。請注意,bip 62(計劃在比特幣 0.11 中發布)將消除標準腳本的交易延展性,但是對於某些非標準腳本,延展性將始終是一個問題。例如,如果使用的 txout 腳本以
OP_DROP
然後任何先前的堆棧值(在腳本末尾設置)都會被忽略,因此礦工可以在不改變交易功能的情況下進行更改。由於交易雜湊確實包含腳本,這將改變交易雜湊。任何其他期望從該雜湊中花費的交易都將暫時受挫,並且必須找出要花費的新雜湊值(通過跟踪區塊鏈中的交易軌跡)。
不,它不能代表其他人創建任何“發明的交易”,除非擁有該交易的其他節點的私鑰。 這可能是一個類似的問題。