Transactions

如何僅使用比特幣地址而不是公鑰來驗證交易?

  • February 16, 2021

我了解非對稱密碼系統和數字簽名的工作原理:

您生成一個(私鑰,公鑰)對。你永遠不會分享私鑰,你讓公鑰……好吧,公開。

您有一組功能:

  • 加密(公鑰,純文字)= 密文
  • 解密(私鑰,密文)=純文字
  • 簽名(私鑰,純文字)= 簽名文本
  • verify_signature(公鑰,簽名文本)= is_signature_valid_bool

然而,在比特幣中,地址是公鑰的散列版本。沒有辦法“撤消”散列。因此,我不確定如何驗證交易。

我想問題是當我想進行交易時,實際轉移/儲存了什麼。我以為:

  • 輸入比特幣地址
  • 輸出比特幣地址
  • 使用所有輸入地址私鑰對交易進行簽名(我猜是按輸入順序)

…但是我看不到驗證是如何完成的。因此,我假設您在創建交易時發送了您的公鑰。這可以解釋為什麼在您花錢後不應該再次使用任何地址。讓我困惑的一點是我在這裡看不到任何公鑰

下一個不清楚的是順序。是否存在必須應用簽名的隱含順序?我認為這將通過Script完成,但我在塊資源管理器中看不到這一點。

有人可以解釋一下嗎?

未回答

  • 區塊鏈交易驗證是如何發生的?:接受的答案只是說“當節點聽到新交易時,它會檢查以確保簽名有效”。我的問題是關於如何在沒有公鑰的情況下完成此操作。

當您從比特幣地址消費時,您的交易包括與您嘗試使用的雜湊地址相對應的公鑰,以及可以使用該公鑰驗證的簽名。

您的連結指向一個沒有簽名的塊。但是,讓我們看一下您的區塊中的交易:https ://www.blockchain.com/btc/tx/b8f925d09c647904e428d902c8404fc91e5dbe53773b82d717cf13374785ca20

向下滾動到“輸入”,在 Sigscript 下,3045022100c89735ddbb5e231044610590c086d41f1e871067987087ed48e041f8999314830220011deba08ad9a67ddafe51dc530f3f60c8974373bf2f25953a89c139d238216201是 ECDSA 簽名,023aa5b3f24a2b8fc8f64b69ba383b148892deef94cf060288cc99e81be0f9722e是與地址對應的公鑰。

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