Signature

你只簽署交易的前一個輸出嗎?

  • July 12, 2020

我需要確認我了解交易在比特幣網路中的運作方式。好的,所以:

  1. Alice 是一個網路節點。Alice 想將比特幣發送給網路中的某個人。Alice 正在使用她的錢包創建交易。
  2. 每筆交易都有輸入和輸出。每筆交易的輸入只是對以前向 Alice 地址發送資金的其他一些較舊交易的一些先前輸出的引用。
  3. 為了發送比特幣,Alice 需要通過使用她的錢包在進行交易時生成的她來解決scriptPubKey先前交易輸出中給出的難題。scriptSig基本上,愛麗絲只需要通過簽署新交易來證明她控制著私鑰(與以前發送比特幣的地址有關)。

我做對了這些步驟嗎?

我在探索時開始感到困惑,hash type因為我看到很多句子說交易的輸出是正確簽名的。根據我的理解(從上面),我假設先前的輸出已正確簽名?因此,交易的輸入被認為是有效的。但我找不到對此的確認。我錯過了什麼嗎?謝謝!

在創建比特幣交易時,每個輸入都明確說明消耗了哪些未使用的**交易輸出 (UTXO)(通過由 對於標準輸出格式,這樣的證明是由與先前鎖定資金的公鑰對應的私鑰創建的簽名。我認為實際上不清楚的是簽名到底在簽名什麼。txid:vout

想像自己簽了一份契約。在契約上簽名表明您已完全理解並同意該契約。簽名並不意味著脫離契約的上下文,當然也不應該被困在另一份契約上。

同樣,比特幣交易的簽名送出到交易的特定上下文!如果簽名只是在沒有上下文的情況下對輸入進行簽名,則攻擊者可以從未經確認的交易中獲取大量輸入,並將它們重新組合成交易,支付給攻擊者自己。

幸運的是,在比特幣中,我們實際上可以強制簽名在脫離上下文時是無效的。每個簽名都送出完整的交易指令集,即哪些 UTXO 在輸入中花費,哪些 UXTO 在輸出中創建以及交易的元資訊。(顯然,一個簽名不能送出給其他輸入的簽名,因為這會導致無法解析的遞歸。)這種對交易結構的承諾稱為sigHash。預設情況下,將使用簽名類型(或“sigHash 標誌”)從整個交易建構 sigHash SIGHASH_ALL。@darosior 簡要介紹了其他 sighash 標誌,但您可以在(Raghav Sood 關於所有類型的 sighash 標誌的文章)中閱讀更多相關資訊。

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