比特幣私鑰使用
我的下一個問題是私鑰需要如何花費硬幣。根據我對交易所需的以下步驟的理解:
- A 想向 B 發送 10 個硬幣
- A make 交易範例:從:A,到:B coint:10
- A 使用其私鑰簽名:從:A,到:B 硬幣:10, 簽名:qwertyasdfzxcv
所以結果是 B 在其公鑰(錢包地址)上獲得了 10 個硬幣,並且發送者公鑰足以驗證發送者的簽名。
私鑰的用途是什麼?這是否也是交易也被 B 公鑰加密(在這種情況下只有 B 的私鑰可以被解密)如果那樣的話,那麼沒有人可以讀取交易來驗證它嗎?
那麼,私鑰使用硬幣的技術用途是什麼?
用法是數字簽名。它是一種密碼學形式,但它不同於加密。事實上,比特幣協議中沒有任何地方使用任何形式的加密。
形式上,數字簽名是 3 個功能的集合:
- 密鑰生成:隨機構造一個密鑰對(即一個私鑰及其相關的公鑰)。
- 簽名:給定消息和私鑰,構造簽名。
- verifying:給定消息、公鑰和簽名,輸出 true(如果該簽名是使用與提供的公鑰對應的私鑰創建的,則為提供的消息),否則為 false。
雖然某些簽名算法基於加密算法(例如,對於 RSA,私鑰和公鑰是可以互換的,您可以將簽名視為“使用私鑰加密”),但並非所有算法都是如此. 比特幣 (ECDSA) 中使用的特定簽名算法不能用於加密目的。
私鑰需要如何花費硬幣
一筆交易花費了來自一個或多個先前交易的一些先前未使用的交易輸出 (UTXO)。
每個 UTXO 在交易數據中都有一個與之關聯的腳本。
該腳本(有時稱為鎖定腳本)是一個小型電腦程序,用一種非常小的程式語言編寫,稱為比特幣腳本語言。它有點像一種非常原始的基於堆棧的彙編語言。
該語言具有諸如 OP_CHECKSIG 之類的運算符,它們使用 ECDSA 來檢查簽名並返回 TRUE 或 FALSE。
此腳本確定誰可以花費相關的 UTXO。潛在的消費者通過提供可以預先添加到鎖定腳本的數據來做到這一點,然後使用比特幣腳本語言解釋器(或編譯器)對整體進行評估。結果將是真或假(任何非真值)。如果提供的數據和舊的鎖定腳本評估為真,則支出交易被視為有效。
有一些標準腳本,例如支付公鑰雜湊 (P2PKH)。
通常,該腳本需要一個使用私鑰計算的數字作為輸入。然後其他人可以使用 ECDSA 等來驗證該數字是從與創建鎖定腳本時使用的公鑰對應的私鑰生成的。
正如 Pieter 在他的回答中指出的那樣,在正常的比特幣交易中,沒有網路或區塊鏈數據被加密。任何人都可以完全讀取所有交易數據。