Vocabulaire : portefeuille

Dans le milieu des cryptomonnaies, ce qui est appelé un portefeuille (wallet en anglais) est un dispositif qui sert à stocker et gérer une paire (ou dans certains cas, des paires) de clefs cryptographiques : grossièrement, une clef publique qui permet de recevoir de la cryptomonnaie, et une clef privée qui permet de la dépenser.

Le terme de “portefeuille” est particulièrement mal choisi. En effet, vu ce qu'est un portefeuille dans la vraie vie, cela encourage à l'abus de langage qui consiste à parler de cryptomonnaie stockée “dans” un portefeuille. Par métonymie on voit aussi parfois appelée “portefeuille” une clef publique (qui est l'identifiant à qui on peut transférer de la cryptomonnaie et de qui on peut en recevoir). On peut d'ailleurs voir un exemple typique de ça dans sur la page Wikipédia dédiée, qui parle de Bitcoin stockés dans des portefeuilles alors que littéralement deux phrases plus tôt il était précisé que les cryptomonnaies ne sont pas stockées dans les portefeuilles… :

Capture de la page wikipédia “Portefeuille de crypto-monnaie” le 5 janvier 2022.
Capture de la page Wikipédia “Portefeuille de crypto-monnaie” le 5 janvier 2022.

Ce soucis était présent sur Wikipédia depuis le 3 août 2021, donc déjà 5 mois au moment où j'ai consulté la page (et où j'en ai donc profité pour la corriger, en annulant simplement la modification qui rajoutait cette dernière phrase du paragraphe d'introduction, fausse et inutile).

Littéralement, un “porte-feuille” contient, physiquement, de l'argent liquide (des billets, en papier, des feuilles quoi). Une transaction entre portefeuilles consiste donc en le déplacement physique d'un objet d'un portefeuille à l'autre. La transaction ne nécessite que la présence des deux portefeuilles. Le système de transaction est non seulement décentralisé mais aussi acentré : il ne possède pas du tout de centre, une transaction s'effectue directement de pair à pair et de façon totalement discrète/anonyme vis-à-vis du système global.

Bien que cette description ressemble beaucoup aux discours qu'on peut entendre au sujet des cryptomonnaies (“décentralisé”, “anonyme”), ce n'est en fait pas du tout comme ça qu'elles fonctionnent !

Plutôt que de “portefeuille” on devrait parler de “compte”, au sens de compte bancaire, pour éviter cette confusion.

Un “compte” (en banque) c'est un identifiant auquel on associe un solde. Une transaction entre deux comptes consiste à soustraire au solde du compte émetteur le montant de la transaction et à l'ajouter au solde du compte destinataire. Cette fois-ci le système de transaction ne peut pas être acentré, du moins si on ne veut pas que n'importe qui puisse créer de la monnaie sortie de nulle part (et clairement, on veut pas), et il y a un certains nombres de critères à respecter :

  • [validité] lors d'une transaction de montant X du compte A vers le compte B, il faut que le solde de A soit supérieur ou égal à X ;
  • [double dépense] en plus de ça, il ne faut pas non plus que, simultanément, A puisse faire une transaction de montant Y vers le compte C si le solde de A n'est pas supérieur ou égal à X + Y (alors que prises séparément les deux transactions pourraient valider la première condition) ;
  • [cohérence] et bien sûr après chaque transaction il faut s'assurer que le montant qui a été ajouté au solde du compte destinataire a bien été soustrait de celui du compte émetteur.

Il faut donc, d'une manière ou d'une autre, un centre qui fasse (ou qui permettent de faire) ces vérifications.

Dans le cas des comptes bancaires, le système de transaction est un mix entre une version centralisée et une version fédérée : il n'y a pas qu'une seule banque donc ce n'est pas littéralement un système centralisé, mais pas n'importe qui peut créer une banque qui vient se greffer au réseau en étant immédiatement interopérable avec les banques existantes comme on s'attendrait à ce que ce soit le cas dans un système réellement fédéré. Dans le système bancaire, le centre (les banques) est en charge de faire les vérifications, et les données sont opaques pour les utilisateurices des comptes.

Dans le cas des cryptomonnaies, il y a aussi un centre, mais il est distribué grâce à une blockchain qui n'est rien d'autre qu'un registre public de toutes les transactions depuis le début du système. La charge des trois vérifications citées plus haut (dont j'ai inventé les noms pour les besoins de ce billet) est répartie comme suit :

  • [validité] chaque participant au réseau connaît l'état du registre et donc peut recalculer le solde de chaque compte (en partant de zéro et en ajoutant les montants des transactions vers ce compte et en retirant les montants des transactions depuis ce compte), donc chaque fois qu'un nouveau bloc est reçu, chaque participant peut vérifier si il ne contient que des transactions valides, et ignorer le bloc dans le cas contraire ;
  • [double dépense] si deux transactions dans un même bloc ne respectent pas cette règle c'est un problème de validité et on en revient au point précédent, si elles ne sont pas dans le même bloc alors soit elles ne sont pas simultanées (et on en revient à la validité si le registre est immuable, cf ci-dessous), soit les deux blocs arrivent en même temps et seul l'un des deux pourra être choisi par le réseau pour continuer la chaîne (chaque nouveau bloc dépend directement du précédent, il ne peut y avoir deux précédents, cf ci-dessous également) ;
  • [cohérence] enfin, concernant la cohérence, elle est “gratuite” car comme expliqué ci-dessus, le solde d'un compte n'est écrit nulle part il est calculé depuis la liste des transactions qui concernent le compte.

Immuabilité. Tout cela suppose que l'ensemble des participants voient le registre dans le même état et qu'une fois écrit celui-ci est immuable, c'est à dire qu'on ne puisse pas effacer ou modifier des transactions discrètement dans le registre. C'est pour cette raison que le registre est basée sur une structure de chaîne de blocs : l'identifiant de chaque bloc dépend cryptographiquement de l'intégralité de son contenu ainsi que de l'identifiant du bloc le précédant dans la chaîne, de sorte que modifier le contenu d'un bloc implique la modification de son identifiant et du coup de tous les blocs qui le suivent dans la chaîne.
AJOUT (05/02/2022) : un nouveau billet revient en détails sur ce qui fait l'immuabilité d'une blockchain.

On remarquera ici que malgré toutes les explications techniques que l'on vient de faire, on a pas expliqué, et encore moins justifié, la nécessité de la preuve de travail (ou d'enjeu) dans le cas des cryptomonnaies, mais ce sera l'occasion d'un autre billet !
AJOUT (07/01/2022) : voilà le billet qui revient sur la nécessité de la preuve de travail (ou d'enjeu).

Pour cette fois-ci, on s'arrêtera sur l'idée que dans le cadre des cryptomonnaies, ce qu'on voit appelé un “portefeuille” devrait soit être un “compte” soit un “gestionnaire de compte” ou encore un “client” (au sens réseau, comme on peut parler d'un “client BitTorrent” par exemple), sinon, on laisse penser à tort qu'on aurait affaire à un équivalent numérique de la monnaie fiduciaire alors qu'il s'agit, au mieux[1], de monnaie scripturale.

Pour un véritable portefeuille numérique et décentralisé, il semble qu'à l'heure actuelle la seule option soit Taler, et cette technologie n'est pas basée sur une blockchain[2].

Notes

  1. ^ Je précise "au mieux", car il n'est pas si clair que l'on a réellement affaire à quelque chose qu'on peut légitimement appeler une monnaie (en tout cas, là aussi le vocabulaire peut/doit être sujet à débat).
  2. ^ Je réfléchissais déjà au sujet d'un système de transactions acentré dans un article publié dans Alternative libertaire n°319 (septembre 2021) : Contrôle, surveillance, et monnaie numérique.