Pour vulgariser le fonctionnement de la preuve de travail dans une blockchain, il est souvent dit qu'il s'agit de résoudre une énigme mathématique
ou de faire des calculs mathématiques complexes
. Cela peut laisser l'impression que ces calculs pourraient être utiles ou qu'il s'agirait de résoudre de véritables problèmes mathématiques qui se posent effectivement dans la vraie vie. En fait, dans le modèle de sécurité d'une blockchain à preuve de travail, non seulement les résultats de ces calculs doivent être inutiles, mais même leurs effets de bord, comme la chaleur produite par ce colossal gaspillage d'énergie[1], ne doivent surtout pas avoir de valeur.
Les calculs de preuve de travail d'une blockchain doivent être entièrement inutiles[2], pour deux sortes de raisons : des raisons techniques et des raisons économiques.
Commençons par la technique. Il y a deux types de résultats “calculatoires” qui peuvent être qualifiés d'utiles : les solutions génériques à une famille de problèmes (par exemple, un algorithme générique qui calcule le chemin vers la sortie d'un labyrinthe, quelque soit le labyrinthe qu'on lui donne), et les solutions spécifiques de cas particuliers à l'intérieur d'une famille de problèmes (trouver le chemin pour sortir d'un labyrinthe donné).
Dans le premier cas, qui serait évidemment le plus utile, la résolution consiste à trouver une nouvelle méthode de calcul (un nouvel algorithme) qui permet de résoudre efficacement l'ensemble des problèmes similaires. Il ne peut évidemment pas s'agir de ça dans le cadre de la preuve de travail puisqu'on veut être sûr qu'une solution va être trouvée dans un temps imparti. Un problème dont on ne sait pas encore calculer la solution (ni parfois même si c'est possible !) ne peut donc pas être utilisé. D'autre part, cela voudrait dire qu'à chaque fois qu'une solution est trouvée, il faudrait passer à un nouveau problème puisqu'on dispose maintenant d'une solution générique pour celui utilisé précédemment.
On doit donc forcément avoir recours à des cas particuliers d'une famille donnée de problèmes. Mais alors pourquoi ne pas choisir une famille de problème dont les résultats de cas particuliers peuvent être utiles ? Pour que la résolution d'un cas particulier d'un problème soit utile, il faut que celui-ci se pose dans la vraie vie (que ce soit un labyrinthe qui existe bien quelque part, pour reprendre notre exemple). Cela pose d'emblée plusieurs soucis : quelle famille de problèmes choisir ? qui listerait les cas particuliers utiles ? comment s'assurer que personne n'en a déjà la solution ?
Le choix de la famille de problèmes serait déjà un choix de à qui les résultats vont servir, car ce ne sont pas les mêmes problèmes qui se posent selon les secteurs d'activités, selon les types de clients, selon les législations, etc. Le choix du type de problèmes dont certains cas sont utiles impacte donc directement qui pourra dire quels sont, justement, les cas effectivement utiles. Cela reviendrait donc à désigner ce ou ces acteurs à qui les résultats peuvent servir comme tiers de confiance pour le bon fonctionnement de la blockchain dont il est question, ce qui casserait complètement le modèle de sécurité de défiance généralisée censé justifier le recours à une blockchain en premier lieu. En effet, qu'est-ce qui garantie que les acteurs en charge de désigner les problèmes à résoudre n'en connaissent pas déjà la solution (ou ne sont pas de mèche avec des acteurs pour qui c'est le cas), ou même une solution partielle, ce qui permettrait de tricher ? C'est pour cette raison que les cas particuliers de problèmes à résoudre ne peuvent pas être choisis mais doivent au contraire dépendre d'une information aléatoire qui n'est connue qu'au dernier moment par tous les participants en même temps[3]. Ce dernier point est indispensable pour permettre de contrôler la vitesse de création et l'ordonnancement des blocs, sans quoi on pourrait avoir intérêt à conserver des blocs valides d'avance et les utiliser pour tricher au moment opportuns (voir ci-dessous, sur la possibilité de double dépense).
Maintenant, et bien que ce soit parfaitement saugrenu[4] hautement invraisemblable, imaginons qu'il existe une famille de problèmes dont les résultats de cas particuliers aléatoires puissent être utiles à tout le monde[5], ou même à n'importe qui… Il reste encore les raisons économiques à l'exigence de l'inutilité des calculs de preuve de travail.
Pour expliquer ces raisons économiques, il faut d'abord rappeler à quoi sert la preuve de travail, c'est-à-dire quel est son rôle dans le fonctionnement d'une blockchain. Comme je l'expliquais dans mes billets sur la nécessité de la preuve de travail ou d'enjeu et sur l'immuabilité d'une blockchain, la preuve de travail est un mécanisme de consensus distribué dont le rôle se limite à effectuer un tirage au sort non contestable dans un contexte de défiance généralisée[6].
Les raisons économiques donc, sont doubles. Premièrement, cela introduit des inégalités. Si les calculs de preuve de travail permettent par eux-mêmes à certains “mineurs”[7] de gagner de l'argent à tous les coups, et non plus seulement de gagner une récompense en crypto-actifs lorsqu'ils sont tirés au sort, cela avantage économiquement les “mineurs” en question. Ceux-ci peuvent alors décider d'utiliser ces gains pour investir dans de la puissance de calcul supplémentaire qui a son tour va leur rapporter immédiatement et de façons sûres, ce qui par effet boule de neige, va finir par les amener à prendre le contrôle de la majorité de la puissance de calcul du réseau. Mais sans même aller jusqu'à ce scénario, le fait que les calculs mêmes qui peuvent servir à monter une attaque puissent rapporter quoi qu'il arrive pose un sérieux soucis d'incitation.
En effet, et c'est le second point, le fait qu'il soit possible de gagner de l'argent quoi qu'il arrive avec les calculs signifie que les “mineurs” peuvent avoir intérêt à diviser leur puissance de calcul, ce qui sort complètement du modèle de sécurité des blockchains. Quand le seul moyen de gagner de l'argent est d'être tiré au sort, il n'y a pas d'autre choix que de concentrer sa puissance de calcul sur une seule preuve de travail pour maximiser ses chances. Quand ce n'est plus le cas, on peut choisir de répartir sa puissance de calculs sur deux preuves de travail différentes pour faire coexister temporairement deux versions distinctes de la chaîne, permettant ainsi une double dépense[8] (une version où de la “cryptomonnaie” a été utilisé pour une transaction, et une autre version où la même “cryptomonnaie” n'a pas été dépensée, voire a été utilisée pour une autre transaction). Bref, donner de la valeur aux calculs de preuve de travail eux-mêmes est une mauvaise idée.
Une fois cela compris, il devient évident que non seulement les résultats des calculs doivent être inutiles, mais que rien ne doit pouvoir donner de la valeur aux calculs, y compris la chaleur produite par les machines qui les font. Du point de vue du modèle de sécurité d'une blockchain, même la réutilisation de la chaleur produite par les calculs dans les ferme de “minage” est un problème car cela donne une valeur à ces calculs. C'est pour cela que la preuve de travail (PoW pour “proof of work” en anglais) est souvent et à raison appelée plutôt “preuve de gaspillage” (qui reste habilement PoW, pour “proof of waste” cette fois, en anglais, mais on peut utiliser “PDG” en français…). C'est pour cela aussi que, bien que certains propagandistes ne s'en privent pas, il est parfaitement délirant de revendiquer un quelconque aspect écologique aux blockchains.
Enfin, il est peut-être utile de rappeler qu'historiquement, la preuve de travail a été inventée à la base pour lutter contre le spam[9], en étant un moyen de rendre prohibitif le coût de l'envoie massif d'e-mails. C'est le principe même du concept d'être un coût non-recouvrable, donc nécessairement inutile. Et c'est précisément pour cette raison que cela a été choisit comme mécanisme de consensus dans la conception des blockchains.
Notes
- ^ Le gaspillage est consubstantiel aux blockchains dont le coût est toujours un surcoût, indépendamment du mécanisme de consensus choisi, y compris donc en l'absence de preuve de travail, comme je l'expliquais dans mon billet “Le coût d'une blockchain”.
- ^ En dehors bien sûr de leur rôle dans le mécanisme de consensus distribué par preuve de travail, c'est-à-dire que les calculs ne doivent servir à rien d'autre qu'au tirage au sort de qui écrira le prochain bloc dans le registre. À chacun·e ensuite de décider de l'utilité des blockchains et du rôle des crypto-actifs pour conclure sur l'inutilité totale ou non de ces calculs.
- ^ En pratique dans les blockchains existantes, il s'agit du condensat cryptographique servant d'identifiant au dernier bloc ajouté à la chaîne, qui dépend de la preuve de travail de ce bloc.
- ^ Sur Bluesky, David Madore me fait remarquer que formellement, il serait difficile de véritablement prouver l'inexistence d'un tel problème, sans pour autant croire lui-même qu'il en existe.
- ^ Comme le fait remarquer David Madore, dans le cas d'un problème dont la résolution serait utile à tout le monde, on aurait de toutes façons largement intérêt à coopérer pour sa résolution plutôt que diviser nos forces pour s'en servir dans le contexte compétitif d'une blockchain.
- ^ Contexte dont on peut sérieusement remettre l'existence en question, cf mon billet “La vérité sur la blockchain”.
- ^ Je mets le terme “mineurs” entre guillemets pour les raisons expliquées dans mon billet sur la notion de “minage” dans les blockchains.
- ^ La notion de double dépense est expliquée dans mon billet concernant l'usage du terme “portefeuille” dans les blockchains.
- ^ Voir la page Hashcash sur Wikipédia.