Transactions
如何僅使用比特幣地址而不是公鑰來驗證交易?
我了解非對稱密碼系統和數字簽名的工作原理:
您生成一個(私鑰,公鑰)對。你永遠不會分享私鑰,你讓公鑰……好吧,公開。
您有一組功能:
- 加密(公鑰,純文字)= 密文
- 解密(私鑰,密文)=純文字
- 簽名(私鑰,純文字)= 簽名文本
- verify_signature(公鑰,簽名文本)= is_signature_valid_bool
然而,在比特幣中,地址是公鑰的散列版本。沒有辦法“撤消”散列。因此,我不確定如何驗證交易。
我想問題是當我想進行交易時,實際轉移/儲存了什麼。我以為:
- 輸入比特幣地址
- 輸出比特幣地址
- 使用所有輸入地址私鑰對交易進行簽名(我猜是按輸入順序)
…但是我看不到驗證是如何完成的。因此,我假設您在創建交易時發送了您的公鑰。這可以解釋為什麼在您花錢後不應該再次使用任何地址。讓我困惑的一點是我在這裡看不到任何公鑰
下一個不清楚的是順序。是否存在必須應用簽名的隱含順序?我認為這將通過Script完成,但我在塊資源管理器中看不到這一點。
有人可以解釋一下嗎?
未回答
- 區塊鏈交易驗證是如何發生的?:接受的答案只是說“當節點聽到新交易時,它會檢查以確保簽名有效”。我的問題是關於如何在沒有公鑰的情況下完成此操作。
當您從比特幣地址消費時,您的交易包括與您嘗試使用的雜湊地址相對應的公鑰,以及可以使用該公鑰驗證的簽名。
您的連結指向一個沒有簽名的塊。但是,讓我們看一下您的區塊中的交易:https ://www.blockchain.com/btc/tx/b8f925d09c647904e428d902c8404fc91e5dbe53773b82d717cf13374785ca20
向下滾動到“輸入”,在 Sigscript 下,
3045022100c89735ddbb5e231044610590c086d41f1e871067987087ed48e041f8999314830220011deba08ad9a67ddafe51dc530f3f60c8974373bf2f25953a89c139d238216201
是 ECDSA 簽名,023aa5b3f24a2b8fc8f64b69ba383b148892deef94cf060288cc99e81be0f9722e
是與地址對應的公鑰。