btc签名和校验

如何签名和校验,看这里

verifymessage "address" "signature" "message"

The verifymessage RPC verifies a signed message.

bitcoin-cli help verifymessage

verifymessage "address" "signature" "message"

Verify a signed message

Arguments:
1. "address"         (string, required) The bitcoin address to use for the signature.
2. "signature"       (string, required) The signature provided by the signer in base 64 encoding (see signmessage).
3. "message"         (string, required) The message that was signed.

Result:
true|false   (boolean) If the signature is verified or not.

Examples:

Unlock the wallet for 30 seconds
> bitcoin-cli walletpassphrase "mypassphrase" 30

Create the signature
> bitcoin-cli signmessage "1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX" "my message"

Verify the signature
> bitcoin-cli verifymessage "1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX" "signature" "my message"

As json rpc
> curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "verifymessage", "params": ["1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX", "signature", "my message"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/


如何校验,以下信息来自这里

General Information

The passhrase below was used as a Brainwallet to generate the given address.

BTC Address:

Used passphrase:

Remark(s):

Total transactions:

Amount received:

Amount spent:

14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE

bitcoin is awesome

Address is based on a non-compressed private key.

19

501.06500863 BTC

501.06500863 BTC

Proof

You can check the private key is indeed known by verifying the following signed message when running your own node:

bitcoin-cli verifymessage "14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE" "HAGlTka+07fRWoMK5OPkbAS2+UP3UNK+hFooKUrHyZPoVNFuoHMLDSE/me7SNBxBOTrfR7+KCXSl5CPJRYEQRP0=" "By using a weak brainwallet the private key for address 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE has been compromised."

Alternatively you can use this link to verify the message online. Values needed:

Address:

Signature:

Message:

14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE

HAGlTka+07fRWoMK5OPkbAS2+UP3UNK+hFooKUrHyZPoVNFuoHMLDSE/me7SNBxBOTrfR7+KCXSl5CPJRYEQRP0=

By using a weak brainwallet the private key for address 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE has been compromised.


自己动手试了一下,首先根据passphrase='bitcoin is awesome'生成一堆信息:

passphrase: bitcoin is awesome

private key: 23d4a09295be678b21a5f1dceae1f634a69c1b41775f680ebf8165266471401b

wif: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e

wif_compressed: KxRMt7KypfEsLNSikhxTPYepDMBizHNmH5Bii3wssgesxrkHNJg6

uncompressed_pub: 04ca5606a1e820e7a2f6bb3ab090e8ade7b04a7e0b5909a68dda2744ae3b8ecbfa280a47639c811134d648e8ee8096c33b41611be509ebca837fbda10baaa1eb15

compressed_pub: 03ca5606a1e820e7a2f6bb3ab090e8ade7b04a7e0b5909a68dda2744ae3b8ecbfa

uncompressed_ripe160: 24f98038e995ee03c4178bccaff1652223eba473

compressed_ripe160: bf1c61ac19576d71d4623b185f3bae2a3d4df6bc

uncompressed_address: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE

compressed_address: 1JRW4d8vHZseMEtYbgJ7MwPG1TasHUUVNq

p2wpkh_p2sh_addr: 3LtPxQEqqo1sYGF7VTEufzBUki6pFiDVa1

p2wpkh_segwit_addr: bc1qhuwxrtqe2akhr4rz8vv97waw9g75ma4unk5vnf

p2wsh_addr: bc1qs97xnn3xlhmjg99dlf876ptuuq9cgdky4syy5wqshsln9tl0ykus25lkc4

p2wsh_p2sh_addr: 36p63ggoqyTSVkiYAPJqxeNR8XfipJX78z


未压缩版地址的签名:

1)、根据privkey去签名,命令为: signmessagewithprivkey "privkey" "message",其中privkey为wif(未压缩版的wif)

实践如下: 

bitcoin-cli.exe -rpcuser=xxx -rpcpassword=xxx signmessagewithprivkey "5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e"  "this is test signmessagewithprivatekey"

结果如下: G6kjko3OHyBt2DSJkipfB8qyc9c9vozOw7u1nA0pRLYicnER/ELQcw50uOvABIJ/6ELM3thyh2kwgceJwpQG0bU= 

这个就是"this is test signmessagewithprivatekey"的signature

当然按照这个所说,也可以先执行walletpassphrase ,然后再执行signmessage "14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE" "this is test signmessagewithprivatekey"一样可以,不过我没实验.


2)、校验:

校验使用verifymessage 命令,格式为:verifymessage "address" "signature" "message" 

实验如下: 

bitcoin-cli.exe -rpcuser=xxx -rpcpassword=xxx verifymessage  "14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE" "G6kjko3OHyBt2DSJkipfB8qyc9c9vozOw7u1nA0pRLYicnER/ELQcw50uOvABIJ/6ELM3thyh2kwgceJwpQG0bU=" "this is test signmessagewithprivatekey"

结果如下:

true



以上是非压缩版本的地址的签名和校验,试一下压缩版本地址的签名和校验如下,也是一样的结果,不过privkey变成了wif_compressed(压缩版的wif)

bitcoin-cli.exe -rpcuser=xxx -rpcpassword=xxx signmessagewithprivkey "KxRMt7KypfEsLNSikhxTPYepDMBizHNmH5Bii3wssgesxrkHNJg6" "test_l_version_privkey" 

结果为:H1KwvtQziDR5s7+syHJgvy1P/WN0q9NOv+uH5yAIygddeKzOgc3jwVaTjQ3CGLeu9aNjBvk70sJ1XRZO6fRoucM=


bitcoin-cli.exe -rpcuser=xxx -rpcpassword=xxx verifymessage "1JRW4d8vHZseMEtYbgJ7MwPG1TasHUUVNq" "H1KwvtQziDR5s7+syHJgvy1P/WN0q9NOv+uH5yAIygddeKzOgc3jwVaTjQ3CGLeu9aNjBvk70sJ1XRZO6fRoucM=" "test_l_version_privkey"

结果为:true