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, quelle que soit cette valeur[1]. On veut simplement qu'en un temps fini, l'ensemble des machines concernées aient décidé 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 demande 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 choisie 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és 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 pure 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é, où 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 : en théorie soit parce qu'ils ont un intérêt à l'une deux deux soit au hasard, en pratique la première qu'ils reçoivent pour se relancer dans la course au plus vite. Quoi qu'il en soit celle qui gagnera sera au final celle par dessus laquelle la prochaine solution sera trouvée, même si elle était minoritaire parmi les participants.