Original:
Bitcoin Message Tool - command-line signer & verifierAutor:
witcher_sense
IntroduçãoUma ferramenta CLI leve e totalmente de código aberto para assinatura e verificação de mensagens Bitcoin. A mensagem Bitcoin é a maneira mais simples e natural de comprovar a propriedade de um determinado endereço sem revelar informações confidenciais.
Esta ferramenta segue rigorosamente a especificação descrita no BIP137:
"...Embora não exista um BIP (Proposta de Melhoria de Bitcoin) escrito sobre como assinar digitalmente mensagens com chaves privadas Bitcoin usando endereços P2PKH, trata-se de um processo relativamente bem compreendido; no entanto, com a introdução do Segwit (tanto na forma de endereços P2SH quanto bech32), não está claro como distinguir um endereço P2PKH, P2SH ou bech32 um do outro. Este BIP propõe um formato de assinatura padrão que permitirá aos clientes distinguir entre os diferentes formatos de endereço".Observe que:
"Como esse formato inclui chaves P2PKH, ele é compatível com versões anteriores, mas lembre-se de que alguns softwares verificam intervalos de cabeçalhos e podem reportar os tipos de cabeçalho SegWit mais recentes como erros."Mais informações:
https://github.com/bitcoin/bips/blob/master/bip-0137.mediawikiCarteiras que oferecem suporte completo ao tipo de assinatura BIP137:
1) Trezor
2) Sparrow Wallet
3) Coldcard?
4) ...
Essa ferramenta é basicamente uma tentativa de expandir o uso desse padrão.
Instalação1)Para instalar com o pip, execute:
pip install bitcoin-message-tool
Você pode criar um ambiente virtual para este aplicativo e executá-lo a partir daí, por exemplo, usando o Poetry.
Crie uma nova pasta (bmt é a abreviação de Bitcoin Message Tool, ou você pode escolher o nome que preferir):
Criar um novo ambiente virtual:
Baixe o aplicativo do PyPi usando este comando:
poetry add bitcoin-message-tool
Para executá-lo a partir do terminal, use este comando:
python3 -m bitcoin_message_tool
Ao executar o aplicativo sem argumentos, você verá uma mensagem de ajuda.
2) Alternativamente, você pode baixar o código-fonte diretamente do GitHub por meio deste comando:
git clone https://github.com/shadowy-pycoder/bitcoin_message_tool.git
Ou você pode criar um fork do repositório e depois clonar a versão "forcada".
Instale os requisitos usando este comando:
pip install -r /path/to/requirements.txt
Para executar um aplicativo a partir do repositório "forcado" ou clonado, você pode simplesmente usar o seguinte comando:
python3 /path/to/bmt.py -h
Como usar a ferramenta de mensagens BitcoinO seguinte doctest deve fornecer uma visão clara de como assinar e verificar mensagens com esta ferramenta de linha de comando:
Uso básico
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
Assinatura de mensagem:
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
Exemplo: Assinatura não determinística para chave privada comprimida e endereço p2pkh
$python bmt.py sign -p -a p2pkh -m ECDSA is the most fun I have ever experienced
PrivateKey(WIF): <insert private key here>
Observe que a chave privada não será exibida no terminal.Saída:
Bitcoin address: 175A5YsPUdM71mnNCC3i8faxxYJgBonjWL
Message: ECDSA is the most fun I have ever experienced
Signature: IBuc5GXSJCr6m7KevsBAoCiX8ToOjW2CDZMr6PCEbiHwQJ237LZTj/REbDHI1/yelY6uBWEWXiOWoGnajlgvO/A=
A mesma saída com a flag -v/--verbose:
-----BEGIN BITCOIN SIGNED MESSAGE-----
ECDSA is the most fun I have ever experienced
-----BEGIN BITCOIN SIGNATURE-----
175A5YsPUdM71mnNCC3i8faxxYJgBonjWL
IBuc5GXSJCr6m7KevsBAoCiX8ToOjW2CDZMr6PCEbiHwQJ237LZTj/REbDHI1/yelY6uBWEWXiOWoGnajlgvO/A=
-----END BITCOIN SIGNATURE-----
Verificação de mensagem:
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
Exemplo: Verificação de mensagens no modo detalhado
python bmt.py verify -a 175A5YsPUdM71mnNCC3i8faxxYJgBonjWL \
> -m ECDSA is the most fun I have ever experienced \
> -s HyiLDcQQ1p2bKmyqM0e5oIBQtKSZds4kJQ+VbZWpr0kYA6Qkam2MlUeTr+lm1teUGHuLapfa43JjyrRqdSA0pxs= \
> -v
Saída:
True
Message verified to be from 175A5YsPUdM71mnNCC3i8faxxYJgBonjWL
Mais exemplos e o código-fonte podem ser encontrados aqui:
https://github.com/shadowy-pycoder/bitcoin_message_toolTestes com a carteira SparrowVamos verificar uma assinatura SegWit criada com uma carteira real:

Resultado:

Vamos verificar uma assinatura SegWit criada por esta ferramenta:

Resultado:

Tradução