Que sont les adresses de change et comment y accéder ?

Petit rappel préalable sur le système des adresses 

L’adresse publique est un hachage de la clé publique entière. Le wallet crée des nouvelles adresses pour tous les changes générés par les transactions, ainsi que pour les bitcoins reçus. Ainsi, le wallet consiste en une collection de nombreuses clés donnant accès aux bitcoins qui y ont été transférés. La fonction primordiale du wallet est de gérer vos clés. Des wallets utilisent ce qu’on appelle une « seed » (en anglais, une graine) qui est une phrase de 12 mots : cette seed est la clé privée maîtresse de votre porte-monnaie. Votre wallet sait comment générer une infinité de nouvelles adresses à partir de cette clé privée maîtresse.

 

Les adresses de change en deux mots

Quand votre transaction génère du change, les bitcoins qui y sont liés vont être envoyés dans une adresse de change. Si vous voulez mieux vous représenter la chose, imaginez que chaque fois que vous effectuez un paiement avec votre carte de crédit (qui est donc liée à un seul compte bancaire), le change issu de votre paiement sera envoyé sur un nouveau compte bancaire ; ce sera à vous d’aller réclamer cet argent, autrement il reviendra à ceux qui maintiennent le réseau (dans l’exemple, les banquiers, et pour Bitcoin, les mineurs).

Insensé vous dites ? Une chose est sûre, cette particularité de Bitcoin a causé un bon nombre de confusions, de pertes de fonds, de colères. En outre, ce n’est pas une option que vous pouvez désactiver à l’envi : c’est une caractéristique du protocole Bitcoin avec laquelle il faut composer. Avant de rentrer plus en détails sur la manière dont la technologie moderne gère les difficulté liées aux adresses de change, regardons déjà un exemple concret qui démontre bien l’apparente étrangeté du concept.

 

Exemple pratique

Si l’on regarde cette transaction, l’adresse 18888888PPJ8oGeqR6AKmoiKUme9da48Xf a envoyé 2.3899 BTC à l’adresse 1FvLq2vz7neRJeLk1uXGjg1Jk8FCiaHnwk. L’acheteur a recouru à un service coûtant 2 BTC. Son unspent output de 2.3899 BTC a donc été fondu en deux inputs : un de 2 BTC et un de 0.3898 BTC (il y a donc eu 0.0001 BTC de frais de transfert). Le second input de 0.3898 BTC devient à son tour un unspent output qui est transféré à l’adresse 18888888PPJ8oGeqR6AKmoiKUme9da48Xf. Et là, on se dit que tout va bien, puisque le change est renvoyé à l’adresse initiale !

Sauf que les apparences ne sont pas si limpides. Mettons que vous utilisiez Bitcoin-Qt. En vérité, vous possédez désormais une nouvelle adresse, générée aléatoirement. Si vous perdiez votre wallet et le restauriez depuis une sauvegarde précédente, vous ne pourriez pas accéder à ce change, parce que vous ne possédez pas la paire de clés pour accéder à cette nouvelle adresse, secrète et cachée.

Quand vous faites des sauvegardes, des « backups », vous le faites pour votre adresse que l’on pourrait dire « réelle ». À chaque transaction, BitcoinQT crée une nouvelle adresse, invisible, cachées dans votre wallet. C’est pour cela qu’il est absolument vital de réclamer cet argent, sinon il sera perdu.

Néanmoins, il existe plusieurs programmes de wallet différents, et chacun de ces programmes gèrent les adresses de change différemment. Parfois il va falloir donner du vôtre, et parfois on fera le job pour vous.

 

Comment accéder aux adresses de change

Si vous utilisez Bitcoin-Qt, et que vous voulez voir vos adresses de change (par exemple pour faire une sauvegarde), il vous faudra utiliser la console de commandes (l’interface graphique) du wallet et entrer la ligne listaddressgroupings. À partir de là, vous vous rendez sur blockchain.info et recherchez vos anciennes transactions sur le modèle de l’exemple donné ci-dessus. Vous trouverez alors des adresses depuis lesquelles vous n’avez pas envoyé de bitcoins mais qui seront listées dans votre wallet après introduction de la commande susdite et sur le site blockchain.info. Ce sont vos adresses de change. Utilisez ensuite la commande dumpprivkey pour voir les clés correspondantes.

Vous pouvez toujours utiliser le programme pywallet qui dévoile toutes les adresses utilisées par votre wallet ainsi que les clés correspondantes. Mais le programme commence un peu à dater…

Quoi qu’il en soit, il existe au moins 4 types de programmes permettant de créer un wallet, c’est-à-dire chaque fois des manières différentes de gérer les adresses de change.

  • Wallet à adresse unique : ces wallets utilisent une adresse pour recevoir les paiements et le change. Il est possible d’ajouter des adresses manuellement. Les exemples les plus connus sont Blockchain.info et Multibit. Il est néanmoins déconseillé de n’utiliser qu’une seule et même adresse…cela augment les risques de vols.
  • Wallet à réservoir d’adresses aléatoires : ces derniers utilisent un réservoir de taille fixe d’adresses générées aléatoirement (typiquement 100). Le change est envoyé à la prochaine adresse disponible, ce qui crée une nouvelle adresse vide « en haut » du réservoir. L’exemple le plus connu est Bitcoin-Qt.
  • Wallet à réservoir d’adresses déterministes : ils contiennent une quantité infinie d’adresses générées de manière déterministes. Une partie du réservoir contient les adresses réservées pour le change, et sont donc visibles et accessibles en tout temps. Les exemples les plus fameux sont Electrum et Armory.
  • Les wallets hybrides utilisent des stratégies différentes suivant le contexte de la transaction. MultiBit, Mycelium et Electrum sont de ce type.

Les wallets peuvent adapter leur gestion des adresses de change en fonction des choix des utilisateurs. Par exemple, Electrum permet à l’utilisateur d’envoyer tout le change à une seule et même adresse, créant ainsi un wallet à adresse unique. Importer un paper wallet dans MultiBit crée un système à deux clés, où le change peut être envoyé en alternance à l’adresse originale ou le paper wallet, ce qui, soit dit en passant, est une prise considérable de risques pour votre sécurité.

Car l’existence des adresses de change a bien pour but cela : la sécurité de vos transactions, comme nous allons le voir ensuite.

Lire aussi :