Autor:
witcher_senseOriginal tema:
Bitcoin Message Tool - command-line signer & verifier
UvodLagani, potpuno open-source CLI alat za potpisivanje i verifikaciju Bitcoin poruka. Bitcoin poruka je najjednostavniji i najprirodniji nacin da dokazes vlasnistvo nad odredjenom adresom, bez otkrivanja bilo kakvih poverljivih informacija.
Ovaj alat se u velikoj meri oslanja na specifikaciju opisanu u BIP137:
"...Iako ne postoji zvanican BIP koji definise kako se digitalno potpisuju poruke pomocu Bitcoin privatnih kljuceva za P2PKH adrese, to je prilicno dobro poznat proces. Medjutim, sa uvodjenjem Segwit-a (u obliku P2SH i bech32 adresa), postalo je nejasno kako razlikovati P2PKH, P2SH i bech32 adrese. Ovaj BIP predlaže standardni format potpisa koji omogucava klijentima da razlikuju ove tipove adresa."
Imaj na umu:
"Posto ovaj format ukljucuje i P2PKH kljuceve, kompatibilan je unazad. Ipak, neka softverska resenja proveravaju opsege headera i mogu prijaviti novije segwit tipove headera kao gresku."Vise informacija:
https://github.com/bitcoin/bips/blob/master/bip-0137.mediawikiWallet-i koji u potpunosti podrzavaju BIP137 potpise:
1)Trezor
2)Sparrow Wallet
3)Coldcard?
4)...
Ovaj alat je u sustini pokusaj da se dodatno prosiri upotreba ovog standarda.
Instalacija1) Za instalaciju preko pip-a, pokreni:
pip install bitcoin-message-tool
Mozes napraviti virtualno okruzenje za ovu aplikaciju i pokretati je odatle, na primer koristeci Poetry.
Napravi novi folder (bmt je skracenica od Bitcoin Message Tool, ali mozes nazvati kako god zelis):
Napravi novo virtualno okruzenje
Skini ovu aplikaciju iz PyPi preko ove komande:
poetry add bitcoin-message-tool
Da ga pokrenes iz terminala, koristi ovu komandu:
python3 -m bitcoin_message_tool
Kada pokrenes aplikaciju bez argumenata izace ti help poruka
2) Alternativno, mozes direktno da skines izvorni kod sa GitHub-a koristeci ovu komandu:
git clone https://github.com/shadowy-pycoder/bitcoin_message_tool.git
Ili samo napravi fork repoa i posle kloniraj tu verziju
Instaliraj potrebne zahteve koristeci ovu komandu:
pip install -r /path/to/requirements.txt
Da pokrenes aplikaciju iz repoa koji si klonirao ili napravio fork, jednostavno koristi ovo:
python3 /path/to/bmt.py -h
Kako koristiti Bitcoin Message ToolSledeci primer treba da ti pokaze jasno kako da potpises i proveris poruke koristeci ovaj CLI alat:
Osnovna upotreba:
python -m bitcoin_message_tool -h
or
python bmt.py -h
usage: python3 bmt.py [-h] {sign,verify} ...
Bitcoin message signing/verification tool
positional arguments:
{sign,verify}
options:
-h, --help show this help message and exit
Potpisivanje poruke
python bmt.py sign -h
usage: python3 bmt.py sign [-h] -p -a {p2pkh,p2wpkh-p2sh,p2wpkh} -m [MESSAGE ...] [-d] [-v]
options:
-h, --help show this help message and exit
Sign messsage:
-p, --privkey private key in wallet import format (WIF)
-a {p2pkh,p2wpkh-p2sh,p2wpkh}, --addr_type {p2pkh,p2wpkh-p2sh,p2wpkh}
type of bitcoin address
-m [MESSAGE ...], --message [MESSAGE ...]
Message to sign
-d, --deterministic sign deterministtically (RFC6979)
-v, --verbose print prettified message
Primer: Nasumicni potpis za "kompresovani" privatni kljuc i P2PKH adresu
$python bmt.py sign -p -a p2pkh -m ECDSA is the most fun I have ever experienced
PrivateKey(WIF): <insert private key here>
Imaj na umu da se privatni kljuc nece prikazati u terminalu..
Rezultat:
Bitcoin address: 175A5YsPUdM71mnNCC3i8faxxYJgBonjWL
Message: ECDSA is the most fun I have ever experienced
Signature: IBuc5GXSJCr6m7KevsBAoCiX8ToOjW2CDZMr6PCEbiHwQJ237LZTj/REbDHI1/yelY6uBWEWXiOWoGnajlgvO/A=
Isti rezultat, ali sa ukljucenim -v/--verbose flagom
-----BEGIN BITCOIN SIGNED MESSAGE-----
ECDSA is the most fun I have ever experienced
-----BEGIN BITCOIN SIGNATURE-----
175A5YsPUdM71mnNCC3i8faxxYJgBonjWL
IBuc5GXSJCr6m7KevsBAoCiX8ToOjW2CDZMr6PCEbiHwQJ237LZTj/REbDHI1/yelY6uBWEWXiOWoGnajlgvO/A=
-----END BITCOIN SIGNATURE-----
Provera poruke:
python bmt.py verify -h
usage: python3 bmt.py verify [-h] -a ADDRESS -m [MESSAGE ...] -s SIGNATURE [-v] [-r]
options:
-h, --help show this help message and exit
Verify messsage:
-a ADDRESS, --address ADDRESS
specify bitcoin address
-m [MESSAGE ...], --message [MESSAGE ...]
Message to verify
-s SIGNATURE, --signature SIGNATURE
bitcoin signature in base64 format
-v, --verbose print full message
-r, --recpub recover public key
Primer: Provera poruke u verbose rezimu
python bmt.py verify -a 175A5YsPUdM71mnNCC3i8faxxYJgBonjWL \
> -m ECDSA is the most fun I have ever experienced \
> -s HyiLDcQQ1p2bKmyqM0e5oIBQtKSZds4kJQ+VbZWpr0kYA6Qkam2MlUeTr+lm1teUGHuLapfa43JjyrRqdSA0pxs= \
> -v
Rezultat:
True
Message verified to be from 175A5YsPUdM71mnNCC3i8faxxYJgBonjWL
Vise primera i izvornih kodova se mogu naci ovde:
https://github.com/shadowy-pycoder/bitcoin_message_toolTestovi sa Sparrow WalletHajde da proverimo SegWit potpis napravljen sa pravim novcanikom.

Rezultat:

Hajde da proverimo SegWit signature kreiran ovim tool-om:

Rezulat:
