如何签名和校验,看这里
verifymessage "address" "signature" "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