Bitcore
如何驗證比特幣中的壓縮簽名?十六進制長 138
我正在使用
bicoinjs-message
npm 模組進行簽名驗證。我了解到很少有十六進制長度為 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 個(總是)。它還為簽名數據添加了一個前綴,這會更改值,但不會更改簽名的格式。
參見例如:
雖然我沒有看過它,但我希望一個名為
bitcoinjs-message
可能處理消息而不是事務的簽名的庫,並且任何 69 字節的簽名都不能是消息簽名。