jeudi 6 janvier 2022

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 papiers, 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) :

  • [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 nul 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.

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 !
EDIT (07/01/2022), le voici : 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).

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[1].

Note

  1. ^ 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.

mercredi 5 janvier 2022

Vocabulaire : consensus

Dans les discussions concernant la technologie de la blockchain, on entend souvent parler de consensus. Par exemple on peut lire des choses comme « une blockchain est un registre distribué qui enregistre les transactions qui font consensus sur le réseau ». Mais qu’entend-on par “consensus” ici ?

Poignée de main digital (5 dans chaque)
Illustration classique mais trompeuse de la notion de consensus des blockchains.

Dans le langage courant, le mot consensus a une signification sociale et politique. Il s’agit de l’accord (au sens du choix, du consentement) du plus grand nombre (dans un sens très large, proche de l’unanimité) avec l’idée ou la décision qui fait consensus. On parle par exemple d’adopter une décision “au consensus” quand il n’y a pas de désaccord exprimé contre l’adoption.

Pour être bien clair, la notion d’accord ici correspond à “je suis d’accord, c’est ce que je veux, ça correspond à mes convictions” (consensus fort) ou à “je ne suis pas contre, ça me convient” (consensus mou).

En informatique, on appelle consensus le problème consistant pour un ensemble de machines de se mettre d’accord sur une valeur. Il n’est plus question ici de choix politique ni de consentement d’ordre “moral” dans une décision à prendre (la valeur à choisir) mais bien simplement que toutes les machines finissent par tomber d’accord sur une valeur, quelque soit cette valeur[1]. On veut simplement qu’en un temps fini, l’ensemble des machines concernées aient décidées d’une même valeur. Techniquement l’une des machines pourrait servir de “dictateur” et le processus consisterait alors simplement à ce que la valeur décidée par cette machine soit transmise à toutes les autres[2].

Pour être bien clair, la notion d’accord ici correspond à “ok d’accord, j’ai compris, on fait comme ça”. On voit bien ici que la notion informatique est tout à fait distincte de celle du langage courant (on ne parlerait même pas de consensus mou ici).

Dans les blockchains, il y a essentiellement deux familles de méthodes utilisées pour atteindre le consensus.

Les blockchains à “preuve de travail” posent des contraintes a priori sur les valeurs de consensus possibles de sorte à ce que cela demandent beaucoup de calculs aléatoires pour trouver une solution, i.e., un bloc valide. Dans ce cas, celui-ci est transféré aux autres participants qui vérifient si il respecte effectivement les contraintes, et si c’est le cas il est adopté et les contraintes sont mises à jour pour prendre en compte ce nouveau bloc (pour que tous les calculs soient forcés à recommencer de zéro en quelque sorte)[3].

Dans les blockchains à “preuve d’enjeu” le principe est que la prochaine valeur sera choisi par un participant choisi aléatoirement avec un tirage au sort qui donne un avantage proportionnellement lié à l’intérêt supposé du participant à ce que tout se passe bien et en confiance (sans triche) sur la blockchain, parce qu’il y a le plus gros enjeu (réel, i.e., financier) et depuis le plus longtemps.

On remarque que dans les deux cas, le fonctionnement de l’algorithme de consensus dépend directement du fait que la blockchain soit porteuse de valeur (au sens monétaire). Dans la preuve de travail parce qu’il faut une façon d’inciter aux dépenses énergétiques liées aux calculs aléatoires inutiles par ailleurs (ce qui est fait en accordant une récompense au participant qui a trouvé le bloc valide). Dans la preuve d’enjeu parce que pour qu’elle ait un sens il faut que l’enjeu dont il est question en soit effectivement un (perte financière si la blockchain n’est plus fiable) et que les participants aient intérêt à vouloir être sélectionné et donc à conserver un enjeu réel sur la blockchain (même système de récompense).

Donc non seulement dans les deux cas il s’agit de sélectionner aléatoirement un “dictateur” pour ce tour-ci, mais en plus on sait que la décision qui sera prise par celui-ci et imposée à tous les participants sur le réseau n’aurait été choisie par absolument aucun autre, puisqu’elle inclut l’auto-attribution de la récompense. Dans le cas des blockchains, non seulement c’est de la notion informatique de consensus qu’il est question, mais en plus on ne pourrait pas être plus éloigné de la notion politique du langage courant.

Ce qu’on peut lire, voir, ou entendre concernant les blockchains laisse le plus souvent ambiguë la notion de consensus, et va parfois jusqu’à l’utiliser comme argument (dans de plus ou moins grandes envolées lyriques sur la démocratie, la décentralisation, et le consensus) comme si il s’agissait de la notion du langage courant. Bon, il faut reconnaître que ça ne semble pas toujours être fait de mauvaise foi mais bien souvent par pur incompréhension du sujet… ce qui n’est pas vraiment mieux. Mais bref, il me semblait important de clarifier ce que veut dire consensus quand on parle de blockchain.

Notes

  1. ^ Il y a quand même quelques contraintes : par exemple, la valeur doit avoir été proposée par au moins l’une des machines participantes, mais pas forcément par la majorité !
  2. ^ En fait on souhaite généralement que ces algorithmes soient distribués et tolérants aux pannes, donc on ne peut pas se contenter désigner une machine qui serait le “dictateur” pour toujours : ça ne fonctionne plus si celle-ci tombe en panne. Si en revanche on se place dans un système centralisé et pas distribué, ou il existe une machine qui est supposée fonctionner tout le temps, il n’y a plus de “problème du consensus” et c’est bien comme ça que ça fonctionne.
  3. ^ Il se peut que deux solutions valides soient trouvées en même temps, dans ce cas les participants qui reçoivent les deux doivent choisir à partir de laquelle ils redémarrent leurs calculs : soit parce qu’ils ont un intérêt à l’une deux deux soit au hasard. Quoi qu’il en soit celle qui gagnera sera en pratique celle par dessus laquelle la prochaine solution sera trouvée, même si elle était minoritaire parmi les participants.

lundi 25 octobre 2021

Facebook, 4 octobre 2021 : une panne politique

Le 4 octobre 2021, Facebook et toutes ses plateformes (dont Instagram et WhatsApp) ont disparus d’Internet pendant presque 7h. L’existence de cette panne et sa durée exceptionnellement longue sont la conséquence de décisions politiques.

De nombreux médias ont déjà expliqué la panne en détails et ce n’est donc pas l’objet de ce billet, mais il nous est tout de même nécessaire pour contextualiser notre propos de faire quelques rappels.

Un réseau est un ensemble de machines connectées entre elles, et qui, à l’intérieur de ce réseau, savent comment s’adresser les unes aux autres. Internet est, comme son nom l’indique, un réseau de réseaux. Il est pensé pour être résilient. Cette résilience passe par une architecture décentralisée : il n’y a pas d’entité centrale qui joue le chef d’orchestre pour décider de qui peut être sur le réseau, ni des chemins que peuvent prendre les données qui transitent dessus.

Les différents réseaux d’Internet parlent entre eux à l’aide du protocole BGP (border gateway protocol). Avec, chaque réseau annonce régulièrement à ses voisins les adresses des machines auxquelles il permet d’accéder, que ce soit en interne ou même via un autre réseau voisin qui lui a communiqué les adresses de ses machines à lui. Ainsi il y a (presque) toujours plusieurs chemins possibles entre deux machines, et si l’un est cassé on peut passer par un autre.

C’est suite à une annonce BGP erronée que Facebook a disparu d’Internet : ses réseaux voisins ne savaient plus comment s’adresser aux machines de Facebook, et ne pouvaient donc plus le permettre à leurs utilisateurices, ni à leurs propres réseaux voisins, et ainsi de suite.

La panne du 4 octobre 2021 est un symptôme du phénomène qu’on appelle la « contraction » d’Internet. C’est à dire une forme de « recentralisation ». On sait que comme les autres capitalistes de surveillance, Facebook cherche à enfermer ses utilisateurices dans son écosystème. Mais au-delà de ça, il semble que même les choix techniques de l’entreprise sont en partie guidés par cette idéologie de contrôle centralisé : le géant Facebook ne repose que sur un seul réseau !

Même en restant une plateforme centralisée, Facebook pourrait tout à fait reposer sur une architecture décentralisée telle qu’Internet est pensé. Elle serait alors composée d’un ensemble de réseaux (tous contrôlés par l’entreprise) reliés directement entre eux, et qui participent conjointement à Internet. Non seulement la panne du 4 octobre 2021 aurait vraisemblablement été cloisonnée à un seul de ces réseaux, mais elle aurait aussi pu être bien plus vite réparée : un autre réseau de Facebook qui fonctionne encore aurait pu faire les annonces BGP nécessaires à corriger l’erreur diffusée. Au lieu de ça, Facebook s’est retrouvé coupé du monde, sans aucun moyen immédiat de corriger son erreur.

Au-delà de son architecture interne, la contraction opérée par Facebook est telle que la panne, en plus des différentes plateformes du groupe, a impacté tout un tas de plateformes tierces qui dépendent de leurs services comme « se connecter avec Facebook » par exemple. Sans parler du surplus de trafic lié à la gestion des erreurs qui a pu provoquer des ralentissements du réseau.

Décidément, on n’insistera jamais assez sur l’importance de la décentralisation.

lundi 7 juin 2021

La vérité sur la blockchain

Depuis quelques années, la technologie de la blockchain est sujet à un tel buzz qu’elle est mise à toutes les sauces. Les projets utilisant cette technologie se multiplient sans que le choix de l’utiliser ne semble être justifié par la nature des projets en question. La raison à cela semble être le fruit d’un pur effet de mode (lui même assez directement lié à l’idéologie aveuglée du solutionnisme technologique) et des possibilités de financements qui en découlent.

En règle générale, le principe de ces projets est d’enregistrer des informations dans une blockchain en prétendant que cette technologie apporte une certaine forme de garantie. On voit par exemple régulièrement passer des projets qui consistent à mettre dans une blockchain des informations de traçabilité, des actes notariés, ou encore des diplômes, en promettant par ce biais des garantie de sécurité et de validité de ces informations tout en permettant une désintermédiation.

Il faut comprendre que l’intérêt d’une blockchain est de permettre l’établissement d’un consensus[1] distribué. C’est à dire permettre à un ensemble de systèmes autonomes de se mettre d’accord sur une donnée commune, 1- sans avoir besoin d’une autorité centrale, et 2- dans un contexte conflictuel (personne ne fait confiance à qui que ce soit). Quand on a pas ce besoin spécifique, l’utilisation d’une blockchain n’a aucun intérêt.

Cet éclaircissement fait, il est évident que bon nombre des projets autour des blockchains n’ont aucun sens. Déjà, tous ceux qui consistent à avoir une blockchain gérée par une autorité particulière, ou qui implémentent une forme de contrôle d’accès… Mais aussi tous ceux qui prétendent pouvoir rendre obsolète le recours à une autorité pourtant intrinsèquement nécessaire.

Prenons l’exemple des diplômes. Un diplôme universitaire est nécessairement délivré par un établissement d’enseignement supérieur habilité à le faire par un état (ou une autre institution, peu importe). Vouloir mettre des certifications de diplôme dans une blockchain n’a donc aucun sens car seul l’établissement qui a délivré le diplôme est réellement en mesure de certifier son authenticité. On a donc affaire à une autorité centrale indispensable à la certification du diplôme, quelque soit la façon dont celui-ci existe, sur papier ou numériquement. Il n’y a donc pas besoin de blockchain, et c’est même contre-productif d’en utiliser une. Si certifier numériquement des diplômes est utile, alors c’est faisable de manière plus efficace et moins coûteuse sans blockchain (et on sait très bien faire ce genre de choses, c’est comme ça que fonctionne les certificats TLS utilisés pour les connexions sécurisées en HTTPS sur le web par exemple).

Mais le souci avec ces projets autour de blockchains est en fait bien plus profond que ça. Ce que beaucoup de monde semble ne pas comprendre (ou ne pas vouloir comprendre) c’est qu’en règle générale, ce qui est écrit sur une blockchain n’a aucune valeur de vérité dans le monde réel, si ce n’est pas appliqué/imposé par une autorité tierce. Exactement de la même manière que le contenu d’un contrat écrit sur du papier n’a de valeur que tant que l’ensemble des parties restent d’accord avec, ou qu’il existe une autorité tierce qui a la capacité de contraindre les parties récalcitrantes à honorer le contrat.

La seule vérité qui est garantie par l’écriture d’une information sur une blockchain, c’est que l’information en question est écrite sur la blockchain en question.

Cela n’a donc d’intérêt que si c’est l’écriture elle même qui définie la vérité. C’est à dire qu’il s’agit d’une écriture performative. C’est le cas avec les cryptomonnaies, où le montant contenu dans un portefeuille[2] est calculé à partir des transactions écrites sur la blockchain, c’est à dire où la vérité (une vérité très locale qui n’a de sens que “dans” ladite blockchain) est définie par l’écriture.

Il ne faut pas confondre ce qu’on écrit parce qu‘on a décidé (par ailleurs) que c’est vrai, et ce qui est vrai parce que c’est écrit.

En dehors des cryptomonnaies donc, je n’ai jusqu’à présent vu aucun autre exemple d’utilisation justifiée[3] de blockchain. Et pour cause : on vient de démontrer que dès que ce qui est écrit dans une blockchain concerne une chose qui est extérieure à cette blockchain, alors l’utilisation d’une blockchain n’apporte strictement aucune garantie de plus que l’écriture par exemple sur un morceau de papier quelconque. Et donc que la blockchain ne peut être un remplacement que du papier et du papier seulement (en moins pratique, moins efficace, plus coûteux, plus polluant, moins respectueux de la vie privée, etc.). Et donc que toutes les institutions et autorités qui existent autour pour donner un sens et une valeur au dit papier (que ce soit un acte notarié, un titre de propriété, un diplôme, etc.) sont toujours nécessaires. En utilisant une blockchain, on paye le coût de la décentralisation et de l’absence de confiance, mais sans rien décentraliser du tout, et sans éliminer aucun besoin de confiance.

Notes

  1. ^ Il faudra que j’écrive un billet à propos de ce qu’on appelle « consensus » dans le cadre des blockchains car c’est une utilisation extrêmement trompeuse de ce mot. EDIT (05/01/2022) : c’est fait ! Voir Vocabulaire : consensus.
  2. ^ Là aussi, cela mériterait des billets pour discuter les termes de « cryptomonnaie » et de « portefeuille » qui sont à mon avis particulièrement mal choisis. EDIT (06/01/2022) : c’est en partie fait ! Voir Vocabulaire : portefeuille.
  3. ^ Cela ne veut pas dire que l’existence des cryptomonnaies est justifiée, mais simplement que le concept de cryptomonnaie tel qu’il existe nécessite effectivement une blockchain.

vendredi 4 juin 2021

Le retour de p4bl0.net

Le site p4bl0.net hébergeait mon blog personnel de 2007 à 2010 environ (en fait, ce blog avait même commencé quelques années avant ça à une autre adresse avant que je fasse l’acquisition de ce nom de domaine). Depuis cette période il hébergeait une archive statique du blog (qui tournait avant ça sur un moteur fait maison), et il y a quelques années suite à une mauvaise manip de nettoyage j’ai écrasé une bonne partie du contenu. Bon, de toutes façons ça faisait déjà des années que je ne l’avais plus alimenté, et puis surtout, le site n’était plus tellement visité…

De 2010 à 2013 j’ai un peu écrit sur un autre blog (shebang). Mais depuis quelques temps il me prends régulièrement l’envie de dire certaines choses sans que je n’ai réellement d’espace approprié pour cela. Il m’est arrivé de temps à autres d’écrire dans la revue 2600, dans Alternative libertaire, ou bien sur un blog Mediapart, mais aucun de ces endroits ne sont vraiment « chez moi ». Et les threads Twitter et Mastodon ont un aspect trop éphémères pour que ce soit réellement motivant : les écrits sont très vite perdus dans les méandres de ces plateformes.

Et donc : voilà ! p4bl0.net renaît. Cette fois-ci en utilisant le moteur de blog Dotclear car je voulais quelque chose de libre, suffisemment avancé en terme de fonctionnalités mais qui reste simple, et surtout qui soit déjà fait et qui ne me prenne pas trop de temps à bidouiller. Bon sur ce dernier point c’est relativement un échec puisque j’ai passé plusieurs heures à la création d’un thème entièrement personnalisé ^^’… Mais j’ai fait ça bien : c’est responsive et mobile-first tout comme il faut ! Et j’utilise la famille de polices Luciole qui est spécialement conçu pour améliorer l’accessibilité.

Cette fois-ci le contenu sera a priori plus politique et moins geek, donc j’ai décidé d’appeler ce blog « Pavillon rouge et noir », en référence au Jolly Roger, parce que les pirates ♥, et aussi parce que le rouge et le noir sont mes couleurs politiques : celle du syndicalisme révolutionnaire et du communisme libertaire. Il se trouve aussi que les initiales « PRN » me parlent pas mal parce que c’est comme ça que j’appelle dans ma tête ma page perso dont l’adresse est pablo.rauzy.name.

Bref, bienvenu à bord !

page 2 de 2 -