Author

Topic: Bitcoin Message Tool - signer et vérifier des messages en ligne de commande (Read 62 times)

hero member
Activity: 504
Merit: 1065
Crypto Swap Exchange
Author : witcher_sense
Original topic : Bitcoin Message Tool - command-line signer & verifier




Introduction

Un outil léger entièrement open-source en CLI pour signer et vérifier vos messages Bitcoin. Le message Bitcoin est le moyen le plus simple et le plus naturel de prouver la propriété d'une adresse donnée sans révéler d'informations confidentielles.

Cet outil suit de près les spécifications décrites par BIP137 :

"...Bien qu'aucun BIP n'ait été rédigé sur la manière de signer numériquement des messages avec des clés privées Bitcoin avec des adresses P2PKH, il s'agit d'un processus assez bien compris. Cependant, avec l'introduction des adresses Segwit (sous la forme de P2SH et bech32), il n'est pas clair comment distinguer une adresse P2PKH, P2SH, ou bech32 d'une autre. Ce BIP propose un format de signature standard qui permettra aux utilisateurs de faire la distinction entre les différents formats d'adresse."

Il convient de noter que :

"Comme ce format inclut les clés P2PKH, il est rétrocompatible, mais il faut garder à l'esprit que certains logiciels vérifient les plages d'en-têtes et signalent les nouveaux types d'en-têtes segwit comme des erreurs."

Vous pouvez trouver plus d’informations ici : https://github.com/bitcoin/bips/blob/master/bip-0137.mediawiki

Les wallets qui prennent en charge les signatures de type BIP137 sont :

1) Trezor
2) Sparrow Wallet
3) Coldcard?
4) ...

Le but de cet outil est d'essayer d'étendre l'utilisation de cette norme.

Installation

1) Pour l'installer avec pip, exécutez :

Code:
pip install bitcoin-message-tool

Vous pouvez créer un environnement virtuel pour cette application et l'exécuter à partir de là, par exemple en utilisant Poetry.

Créez un nouveau dossier (bmt pour raccourcir Bitcoin Message Tool ou le nom de votre choix) :

Code:
poetry new bmt

Code:
cd ./bmt

Créez un nouvel environnement virtuel :

Code:
poetry install
Code:
poetry shell

Téléchargez l’application depuis PyPi avec la commande suivante :
Code:
poetry add bitcoin-message-tool

Pour l'exécuter à partir du terminal, utilisez la commande suivante :

Code:
python3 -m bitcoin_message_tool

Lorsque vous exécutez l'application sans consignes spécifiques, un message d'aide s'affiche.

2) Sinon, vous pouvez télécharger le code source directement depuis GitHub via cette commande :

Code:
git clone https://github.com/shadowy-pycoder/bitcoin_message_tool.git

ou vous pouvez forker le repo et ensuite cloner la version forkée

Installer les dépendances avec cette commande :

Code:
pip install -r /path/to/requirements.txt

Pour exécuter une application à partir du repo forké ou cloné, vous pouvez simplement utiliser ce qui suit :

Code:
python3 /path/to/bmt.py -h

Comment utiliser Bitcoin Message Tool ?

Le test suivant devrait donner une image claire de la façon de signer et de vérifier les messages avec cet outil en ligne de commande.

Usage basique :

Code:
python -m bitcoin_message_tool -h

ou

python bmt.py -h
usage: python3 bmt.py [-h] {sign,verify} ...

Bitcoin message signing/verification tool

Consignes :
{sign,verify}

options:
-h, --help    Montre ce message d'aide et termine la commande.


Signer un message :

Code:
python bmt.py sign -h
usage: python3 bmt.py sign [-h] -p -a {p2pkh,p2wpkh-p2sh,p2wpkh} -m [MESSAGE ...] [-d] [-v]

options:
-h, --help            Montre ce message d'aide et termine la commande.

Signer un messsage:
-p, --privkey        Clé privée en format WIF
-a {p2pkh,p2wpkh-p2sh,p2wpkh}, --addr_type {p2pkh,p2wpkh-p2sh,p2wpkh}
                        Type d'adresse Bitcoin
-m [MESSAGE ...], --message [MESSAGE ...]
                        Message à signer
-d, --deterministic   Signer (RFC6979)
-v, --verbose         Afficher le message signé à l'écran

Exemple : Signature pour une clé privée compressée et une adresse p2pkh

Code:
$python bmt.py sign -p -a p2pkh -m ECDSA is the most fun I have ever experienced

PrivateKey(WIF):
Veuillez noter que la clé privée n'apparaîtra pas dans le terminal.

Cela affiche en output :

Code:
Bitcoin address: 175A5YsPUdM71mnNCC3i8faxxYJgBonjWL
Message: ECDSA is the most fun I have ever experienced
Signature: IBuc5GXSJCr6m7KevsBAoCiX8ToOjW2CDZMr6PCEbiHwQJ237LZTj/REbDHI1/yelY6uBWEWXiOWoGnajlgvO/A=

Le même output avex -v/--verbose :

Code:
-----BEGIN BITCOIN SIGNED MESSAGE-----
ECDSA is the most fun I have ever experienced
-----BEGIN BITCOIN SIGNATURE-----
175A5YsPUdM71mnNCC3i8faxxYJgBonjWL

IBuc5GXSJCr6m7KevsBAoCiX8ToOjW2CDZMr6PCEbiHwQJ237LZTj/REbDHI1/yelY6uBWEWXiOWoGnajlgvO/A=
-----END BITCOIN SIGNATURE-----

 Vérification d’un message :

Code:
python bmt.py verify -h
usage: python3 bmt.py verify [-h] -a ADDRESS -m [MESSAGE ...] -s SIGNATURE [-v] [-r]

options:
-h, --help            Montre ce message d'aide et termine la commande.

Verify messsage:
-a ADDRESS, --address ADDRESS
                        Adresse Bitcoin spécifiée.
-m [MESSAGE ...], --message [MESSAGE ...]
                        Message à vérifier.
-s SIGNATURE, --signature SIGNATURE
                        Signature Bitcoin en format base64.
-v, --verbose         Afficher le message complet.
-r, --recpub          Récupérer la clé publique.

Exemple : Vérification d’un message en mode « verbose »

Code:
python bmt.py verify -a 175A5YsPUdM71mnNCC3i8faxxYJgBonjWL \
> -m ECDSA is the most fun I have ever experienced \
> -s HyiLDcQQ1p2bKmyqM0e5oIBQtKSZds4kJQ+VbZWpr0kYA6Qkam2MlUeTr+lm1teUGHuLapfa43JjyrRqdSA0pxs= \
> -v

Output :

Code:
True
Message verified to be from 175A5YsPUdM71mnNCC3i8faxxYJgBonjWL

D'autres exemples et le code source sont disponibles ici : https://github.com/shadowy-pycoder/bitcoin_message_tool

Tests avec Sparrow Wallet

Vérifions une signature SegWit avec un vrai wallet :



Résultat :



Vérifions une signature SegWit créée par cet outil :



Résultat :





Jump to: