Qu’est-ce qu’un wallet à signatures multiples ?

NOTE : dans cet article, des exemples fictifs de clés seront donnés ; en aucun cas n’essayez d’utiliser ces adresses pour des transactions, au risque de perdre vos bitcoins.

 

Différences entre un wallet simple et un wallet à signatures multiples

Lorsque vous possédez un porte-monnaie électronique, un wallet en langage technique, vous avez une adresse, publique, contenant entre 26 et 35 caractères, par exemple : 3JtIIjgUkg8iPtRlapOhUklH7bZg8IdlHn. Cette adresse vous permet de recevoir des bitcoins. Vous avez ensuite une clé privée permettant d’accéder à vos fonds et de les dépenser, longue de 64 caractères, par exemple c4frte2pokz37d56tt54b2wc15b62lem3l963f23e226f483d9afa73sl8uj1ln3.

Votre clé privées ne doit être divulguée à absolument personne d’autre et garder en sécurité. Votre adresse Bitcoin peut au contraire être donnée à tout le monde puisque c’est elle qui permet à autrui de vous envoyer des bitcoins. Du moment que vous perdez votre clé privée, ou que quelqu’un vous la vole, vous avez perdu tous vos avoir en bitcoins, et ceci à jamais, et de manière irréversible. On ne plaisante donc pas avec les clés privées.

Dans ce système de base, chaque adresse Bitcoin est associée à une clé privées spécifique. Dans le cas d’un wallet à signatures multiples, il y a plusieurs adresses Bitcoins possédant chacune une clé privée, pour un seul fond commun de bitcoins. Vous pouvez par exemple être 4 personnes gérant un wallet : vous aurez donc chacun une adresse et une clé privée, différentes des 3 autres ; et vous pouvez décider que pour accéder aux fonds et les dépenser, il faut les clés de 2 d’entre vous 4.

D’entre toutes les combinaisons possibles de N-de-M (nombre de signataires requis parmi un nombre total de signataires pour pouvoir décrypter le wallet), la combinaison 2-de-3 (il y a 3 adresses/personnes possédant une clé privée d’un seul wallet, et il faut les clés privées de 2 d’entre elles pour pouvoir le décrypter) se révèle être la plus efficace.

 

Un wallet à signatures multiples 2-de-3

 

Comment ça marche ?

Un multisig wallet, pour l’appeler ainsi, possède plusieurs adresses. Bien évidemment, vous pouvez être une entreprise, un groupe de travailleurs, etc. qui désirez avoir un fond commun. Mais vous n’avez pas besoin d’être réellement plusieurs personnes pour opérer une wallet multisig. C’est là toute la magie : avec un wallet multisig, vous générez trois adresses, et vous pouvez en être le/la seul/e détenteur/trice si vous souhaitez avoir un wallet plus sécurisé que la moyenne.

Mettons donc que vous générez trois adresses pour vous seul. Vous aurez 3 clés privées correspondant. La première clé est, disons, la clé que vous utiliserez le plus couramment et que vous devez pouvoir avoir sous la main (cela ne vous empêche pas de la garder en sécurité). La seconde clé est une clé de secours que vous tiendrez sous haute garde, par exemple sous la forme d’un bout de papier dans un coffre-fort. La troisième clé pourra être stockée sur le serveur du wallet (n’oubliez pas que vous avez en effet besoin d’Internet pour utiliser vos bitcoins, à l’heure actuelle tout du moins).

Pour comprendre concrètement ce que peut faire un multisig wallet, prenons un exemple pratique, les multisig wallets d’Electrum. Armory propose également un service de multisig wallet.

 

Exemple concret : les multisig wallets 2-de-2 selon Electrum

Nous nous référons pour cela aux documents disponibles sur le site d’Electrum à l’adresse http://docs.electrum.org/en/latest/multisig.html, © Copyright 2015, Thomas Voegtlin. Revision 082f3c2e.

Mettons que vous vouliez créer  une paire de multisig wallets 2-de-2.

Après avoir installé le programme Electrum, vous pouvez très simplement créer un multisig wallet en en sélectionnant l’option dans « File » (Fichier »). Vous aurez alors l’option de rentrer n’importe quelle valeur de M-de-N. En l’occurrence ici, 2-de-2. Vous générerez alors une seed qui vous donnera la clé publique maîtresse du premier signataire, puis générerez l’adresse Bitcoin de l’autre signataire. La clé publique maîtresse (master public key) est une caractéristique d’Electrum : elle permet de générer une infinité d’adresses Bitcoin, mais ne peut pas elle-même servir d’adresse d’échange. Elle devrait ressembler à quelque chose comme: Xpub661MyMwAqRbceb9gm8fvGVJTi9cj52xT2qzPc5VjBaSKwTasblRJdn3v9uKySBzq4S59vWbHCsiT55KqfkhYSigHpMPtS3C3rkNjdTjfbsz

Quand vous créerez le second wallet de la paire, vous rentrerez évidemment les mêmes clés publiques que pour le premier, puisque c’est un fond commun à vous deux.

Recevoir et dépenser

Il faut donc que les deux wallets aient le même set d’adresses, de sorte à fonctionner comme un seul wallet (les adresses doivent commencer par le chiffre 3, par exemple : 33fjHk9DHdJa6KfelPaeV2kGnKnaO4bbFT). Si c’est le cas, alors n’importe quel wallet pouvant envoyer à des adresses P2SH.

Dans un multisig wallet 2-de-2, il faut la signature des deux adresses pour dépenser des bitcoins. Cliquez alors sur l’option « send » (envoyer) en utilisant un des deux wallets. Remplissez les détails (le montant, le destinataire, etc.). Le second wallet devra alors valider cette transaction pour qu’elle parte sur le réseau. Pour envoyer le formulaire au second wallet, vous avez plusieurs options.

  1. Via un fichier sur une clé USB
  2. Via un QR code
  3. Via le CosignerPool plugin

Option 1 : Vous pouvez sauvegarder la transaction partiellement signée sous forme de fichier en utilisant le bouton « save » (sauvegarder) puis transférer ledit fichier sur la machine avec le second wallet, en sélectionnant alors « Tools -> Load Transaction -> from file » (Outils -> charger transaction -> depuis fichier).

Option 2 : Sur la fenêtre du formulaire de transaction, il y a aussi un bouton avec un WR code dessus. En cliquant dessus, vous générerez un QR code contenant la transaction, qui peut être scanné depuis le second appareil en allant sous « Tools -> Load Transaction -> From QR Code » (Outils -> charger transaction -> depuis QR Code).

Option 3 : Vous devez allez sous « Tools -> Plugins (Outils -> Plugins) sur les deux wallets. Une fois le plugin autorisé, un bouton apparaîtra : « Send to cosigner » (envoyer au co-signataire). En cliquant sur ce bouton, la transaction sera envoyée sur un serveur central, et sera cryptée avec la clé publique maîtresse de votre co-signataire. Quand l’autre wallet sera ouvert, une notification apparaîtra, disant que transaction partiellement signée est disponible. Comme elle cryptée avec la clé publique maîtresse du co-signataire, il faudra son mot de passe pour la décrypter. Une fois ceci fait, cliquer sur « Sign » (signer) l’enverra sur le réseau Bitcoin.