Bitcore

如何驗證比特幣中的壓縮簽名?十六進制長 138

  • January 4, 2022

我正在使用bicoinjs-messagenpm 模組進行簽名驗證。

我了解到很少有十六進制長度為 138 的簽名。

當我試圖驗證這樣的簽名時,它會拋出一個錯誤:

錯誤:簽名長度無效

如何驗證壓縮簽名?

我認為 ruby​​ 中有一個 lib,bitcoin-ruby 0.0.20可以驗證它,但我不知道 ruby​​。

如果你有比特幣核心軟體,你應該可以使用 CLI 命令來驗證簽名verifymessage。一些錢包軟體也有這個功能。

沒有壓縮簽名。比特幣使用兩種不同的簽名格式(編碼):

  • 交易簽名使用 ASN.1 DER 編碼,其長度取決於曲線,在 Satoshi 發佈時很常見,並添加了一個“sighash”字節。一般而言,對於 secp256k1,DER(ECDSA-Sig)通常為72-70 字節,有時但很少更少,但現代比特幣需要“低 S”簽名,將最大值減少到 71。69 字節(138 十六進制)簽名排除sighash 的時間大約為 3/512(約二分之一);包括sighash 在內的長度會少得多。
  • 消息簽名使用 P1363 編碼,也稱為“plain”、“PKCS11”或“CVC”,對於 secp256k1,它總是正好 64 個字節,並添加一個恢復字節,總共 65 個(總是)。它還為簽名數據添加了一個前綴,這會更改值,但不會更改簽名的格式。

參見例如:

為什麼簽名總是 65 (1+32+32) 字節長?

ECDSA r, s 編碼為簽名 簽名

消息和簽名交易的區別

雖然我沒有看過它,但我希望一個名為bitcoinjs-message可能處理消息而不是事務的簽名的庫,並且任何 69 字節的簽名都不能是消息簽名。

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