Bitcoin-Core
比特幣交易簽名
我編寫了幾個執行 ECDSA 和驗證的算法。所以我使用我的算法和 RPC 呼叫進行簽名,我有幾個問題。
- 由於我們有一個必須是隨機的臨時私鑰,我如何才能對同一筆交易進行兩次簽名並獲得與比特幣 RPC 相同的簽名。
- 應該簽名的雜湊是什麼,沒有簽名的整個交易,我是否必須排除任何欄位?
由於我們有一個必須是隨機的臨時私鑰,我如何才能對同一筆交易進行兩次簽名並獲得與比特幣 RPC 相同的簽名。
這個“臨時私鑰”被稱為nonce。比特幣核心和大多數其他錢包軟體使用一種稱為確定性隨機數的技術。具體來說,他們使用RFC 6979中定義的算法來確定性地生成隨機數。它本質上將消息和正在使用的私鑰散列在一起,並將該散列用作隨機數。如果您使用相同的私鑰多次簽署相同的消息,將使用相同的隨機數,因此您總是得到相同的簽名。
應該簽名的雜湊是什麼,沒有簽名的整個交易,我是否必須排除任何欄位?
對於非隔離見證輸入,簽名的消息是整個交易,所有其他輸入腳本為空。對於被簽名的特定輸入,將 scriptPubKey 或redeemScript(如果有)放入輸入腳本中。然後將 sighash 類型附加到末尾。這被散列兩次,然後對該散列進行簽名。
對於 segwit,消息有點複雜,在BIP 143中有描述。