La preuve de travail, le consensus de Bitcoin

Chapitre I Article g

Maintenant que le fonctionnement général de la blockchain Bitcoin n'a plus de secret pour vous, penchons-nous plus en détail sur les rouages de l'un de ses mécanismes essentiels : le Proof of Work (PoW). Le terme se traduit littéralement par « Preuve de Travail » en français. Après un bref rappel historique, nous verrons l'intérêt de cette invention pour Bitcoin, son fonctionnement, et vous présenterons la manière dont elle est utilisée pour sécuriser le réseau en maintenant l’intégrité de son registre comptable.

Temps de lecture estimé : 19 minutes

Naissance du Proof Of Work

Ceux d'entre vous qui ont pris connaissance des dates clés de l'histoire de Bitcoin savent déjà que l'invention du mécanisme de preuve de travail est bien antérieure à celle de Bitcoin.

Le concept est imaginé en 1993 par Cynthia Dwork et Moni Naor, dans le but de prévenir des attaques de spam ou DDOS qui pullulent à cette époque.

Comme son nom l'indique, l'idée est de demander une preuve qu'un travail a été réalisé. Le travail consiste à utiliser la puissance de calcul d'un ordinateur pour résoudre une énigme mathématique. La preuve est la réponse de l'énigme. Elle doit être facilement vérifiable mais difficile à produire.

Le concept est ensuite repris en 1996 par Adam Back, auquel il inclut les fonctions de hachage cryptographiques. Son invention appelée « hashcash » servira d'inspiration à Satoshi Nakamoto.

Ce dernier y ajoute la notion de récompense financière qui sert à inciter à venir sécuriser le réseau Bitcoin.

Le problème de Bitcoin résolu par le Proof of Work

Le problème des généraux byzantins

Afin de décentraliser la maintenance du registre comptable et assurer la création des unités monétaires de Bitcoin, Satoshi Nakamoto chercha une solution robuste au fameux problème des généraux byzantins.

Ce problème classique de l’algorithmique est le suivant : comment garder l’intégrité d’une information et assurer sa transmission au sein d’un réseau comportant des acteurs malicieux ? Il est nommé ainsi par analogie historique, qui permet de mieux le conceptualiser.

Imaginons une cité, assiégée par plusieurs corps d’armées, dirigés par leurs généraux respectifs. Ces derniers ne peuvent communiquer que par le biais de messagers, se déplaçant à cheval (ou plutôt à dos de chameau). Ils doivent s’entendre sur l’heure et les modalités de l’attaque finale. Elle ne pourra réussir que si les troupes tombent parfaitement d’accord et attaquent de façon coordonnée.

Le problème, c’est qu’il y a au sein des généraux, tout comme parmi leurs messagers, des traîtres. Ils ne sont pas identifiés et vont tenter de fausser l’information.

Comment trouver un mécanisme permettant de maintenir le consensus entre les généraux loyaux ?

Blockchain - Problème des généraux byzantins
Schéma original du papier de Leslie Lamport, Robert Shostak et Marshall Pease sur le problème des généraux byzantins

En informatique, il s’agit de s’assurer qu’au sein de réseau de machines, une majorité suffisante continue de suivre le bon protocole de fonctionnement, malgré la présence éventuelle d’éléments défectueux. La première solution formelle fut proposée en 1982 par Leslie Lamport, Robert Shostak et Marshall Pease.

Vous l’aurez compris, dans le cas du réseau Bitcoin, il s’agit de s’assurer que tous les nœuds maintiennent la comptabilité monétaire du système, en suivant un ensemble de règles communes (consensus), tout en se préservant des attaques diverses ou des pannes.

La preuve de travail

C’est ici qu’entre en jeu la preuve de travail (aussi appelée « algorithme de consensus de Nakamoto »), brique technique essentielle au fonctionnement de la blockchain de Bitcoin.

Cet algorithme est tout simplement la meilleure solution qui ait été trouvée au problème des généraux byzantins. Elle permet de s’assurer que le réseau Bitcoin maintiendra un consensus autour de sa comptabilité de référence, même en présence de 50% d’acteurs malicieux (contre 33 % pour les protocoles classiques).

C'est ici que réside tout le génie de Satoshi Nakamoto ! Afin de résoudre au mieux ce problème, en plus des mathématiques pures, il introduisit une nouvelle variable, une tendance naturelle de l'être humain : la cupidité. Grâce à un savant jeu d’incitations économiques, attaquer le réseau devient si coûteux qu’il est beaucoup plus rentable de le sécuriser.

Et si 51% ou plus des acteurs étaient malicieux ? Nous reviendrons sur ce point en fin d'article dans le paragraphe « l'attaque des 51% ».

Les éléments incontournables du Proof of Work de Bitcoin

Nous devons commencer par présenter différents éléments et acteurs de Bitcoin, pour comprendre comment ils s'articulent afin de permettre au mécanisme de preuve de travail de fonctionner.

Les nœuds et les mineurs

Les nœuds sont des machines qui exécutent le logiciel Bitcoin, sont connectés au réseau et conservent une copie de la blockchain. Leur rôle est de valider, diffuser, traiter et stocker les transactions en bitcoins.

À l’origine, avec les premières versions du logiciel Bitcoin (aujourd'hui appelé « Bitcoin Core »), toutes ses fonctionnalités étaient rassemblées sur chaque nœud. Avec le temps et les évolutions du réseau, les nœuds se sont spécialisés, et peuvent être classés en différentes catégories :

  • Les nœuds complets (full nodes) : comme leur nom l'indique, ils sont capables de jouer tous les rôles. Ils peuvent diffuser, valider et archiver les transactions en BTC. Ils possèdent une copie complète et à jour de la blockchain. Ils vérifient que les transactions et les blocs respectent les règles du protocole Bitcoin, et ils rejettent ceux qui ne les respectent pas.
  • Les nœuds légers (light nodes) : ce sont des nœuds qui ne possèdent pas une copie complète de la blockchain, mais seulement une partie des en-têtes de blocs. Ils se basent sur les nœuds complets pour obtenir les informations dont ils ont besoin, comme la validité d’une transaction ou le solde d’une adresse.
  • Les nœuds miniers (ou mineur) : ce sont les nœuds qui nous intéressent concernant la preuve de travail. Ils se chargent de la création des nouveaux blocs. Ils doivent travailler pour résoudre un problème mathématique et en apporter la preuve. Cela leur permet de gagner des BTC. Il peut s'agir de nœud complet ou léger. Dans ce cas, ils sont souvent regroupés avec d'autres dans des pools de minage, où ils mettent en commun leur puissance de calcul et partagent les récompenses obtenues en fonction de leur contribution.

Les fonctions de hachage cryptographiques

ZKP - Crypto - Maths

Une fonction de hachage est un algorithme qui associe des valeurs de taille fixe (appelée valeur de hachage, empreinte, signature ou hash) à des données de taille quelconque.

Dans le cas du hachage cryptographique, la fonction est à sens unique. Cela signifie qu'il est impossible de retrouver les données d'origine à partir de leur signature.

Bitcoin utilise une fonction de hachage cryptographique appelée SHA-256. Sans entrer dans les détails de son fonctionnement, elle prend en entrée des données de n’importe quelle taille et produit en sortie une valeur de hachage de 256 bits (32 octets). Cette valeur de hachage est unique pour chaque entrée.

Voici un exemple pour mieux pour illustrer ces propos. Prenons la phrase : « Le journal du coin vous présente son encyclopédie » comme donnée d'entrée. En lui appliquant l'algorithme de hachage SHA-256 nous obtenons cette signature :

52bfdf631465247ab5773f656903f5d3866954a6a8971a7ca6a1321e50748b1c

Si nous modifions un seul caractère, en remplaçant le « j » de journal du coin, par un « J » majuscule, le hash obtenu n'a alors absolument rien à voir avec le précédent :

989017c96c09e9a6e5ab1277d465dc13e29f3aad25f991e430c08628ce3f0c04

Il est impossible de retrouver notre phrase initiale à partir du hash que nous avons obtenu.

Nous verrons plus bas comment les mineurs Bitcoin utilisent la fonction de hachage SHA-256 pour valider les blocs.

Fonctionnement du Proof Of Work

Le travail des mineurs et sa preuve

Le rôle des mineurs est de récupérer les transactions en attentes pour les intégrer avec d'autres données dans un bloc, qui doit ensuite être intégré à la chaîne de blocs.

L'ensemble des données contenu dans le bloc (dont nous avons vu la structure dans l'article précédent) doit passer par l'algorithme de hachage SHA-256 pour produire une signature.

Jusqu'ici rien de bien difficile.

Sauf que pour être considéré comme valide, le hash doit répondre à des critères bien précis. Il doit commencer par certain un nombre de zéros et rester inférieur à une valeur donnée appelée la cible (voir paragraphe suivant).

Et c'est là que les choses se corsent. Pour obtenir un hash valide, les mineurs ne peuvent changer dans les données du bloc que le « nonce » qui est un nombre aléatoire. En d'autres termes, le travail principal des mineurs consiste à trouver un nonce permettant d'obtenir une signature valide.

Ils doivent donc en essayer un maximum, le plus rapidement possible, pour trouver la solution avant les autres mineurs. Car c'est une compétition : seul le premier qui trouve voit son bloc validé et touche la récompense associée !

Le fait de trouver un hash valide constitue la preuve du travail de calcul effectué.

Pour vous donner une idée du nombre de nonces que les mineurs doivent essayer avant de trouver la bonne, parlons des machines qu'ils utilisent pour miner.

Le nombre de hash qu'une machine peut effectuer par seconde est appelé le hashrate. Les machines de minage actuelles peuvent miner plus de 110 Tera Hash par seconde (110 TH/s). Sachant qu’un Tera Hash représente 1 000 000 000 000 000 opérations par seconde, vous pouvez imaginer la quantité de nonces qu'une seule machine essaye en 10 minutes !

Ajustement de la difficulté

La difficulté du problème, c’est-à-dire les critères de validité du hash, est ajustée par le protocole tous les 2016 blocs (soit environ toutes les 2 semaines), afin de l'aligner sur la puissance de hachage globale du réseau. Le but est qu'un bloc puisse être validé toutes les 10 minutes en moyenne.

Si la moyenne a dérivé à la hausse au moment du réajustement, on réduit la difficulté. À l’inverse si le minage des blocs est trop facile, on augmente la difficulté.

Pour mieux comprendre à quoi correspond la difficulté, faisons une analogie avec un lancer de dés. Si demande à une personne de lancer 10 dés, elle peut obtenir un résultat compris entre 10 (10 x 1) et 600 (10 x 6).

Imaginons que l'on décide que la cible à atteindre est 400. Si le jet de dés est supérieur, alors le joueur doit recommencer jusqu'à ce qu'il atteigne un chiffre inférieur ou égal à 400.

Si le joueur met moins de 10 minutes à réussir, alors la difficulté peut être augmentée, en demandant de faire un score maximal de 300. Par contre si le joueur met plus de 10 minutes à réussir, alors on peut réduire la difficulté, en augmentant le maximum de points auquel il à droit.

Pour un mineur, une difficulté cible ressemble plus à ça :

1000000000000000000000000000000000000000000000000000000000000000

Ici, cela signifie que le résultat de son calcul doit commencer par un 0. Un hash valable serait par exemple :

0487a6dd6e0727f7f8058fbef45f5c37fe89086ad4e78a1521d06505bcb4522c

Si on décide d'augmenter la difficulté, on peut modifier la cible pour que le hash commence par deux 0. Cette dernière devient alors :

0100000000000000000000000000000000000000000000000000000000000000

Et un exemple de hash valide pourrait être :

00da28957bd4ba06a5af9e6c81226d743fca7028cf9a08fa125e39f15cae49bd

Plus la puissance de calcul du réseau est élevée, plus la valeur de la cible est faible (c'est-à-dire qu'il y a plus de zéros au début) et plus la difficulté est grande (c'est-à-dire qu'il y a peu de solutions à ce problème). Une puissance de calcul considérable doit être déployée pour trouver cette solution - ce hash - par génération aléatoire. Si, en revanche, la puissance de calcul du réseau diminue, la difficulté sera revue à la baisse.

D'une manière générale, la difficulté augmente avec le temps. Il fallait par exemple une signature commençant par 16 zéros en septembre 2022, alors qu'il en fallait 19 en avril 2023.

Ceci est dû au hashrate total du réseau qui augmente avec l'évolution des machines et le nombre de mineurs connectés. À l'heure de l'écriture de ces lignes il se situe à environ 360 millions de Tera Hash par seconde.

Hashrate du réseau Bitcoin - source : https://www.blockchain.com/charts/hash-rate

Le Proof of Work et la sécurité du réseau

Vous savez maintenant en quoi consiste le travail des mineurs et comment ils prouvent qu'ils l'ont bien effectué. Mais en quoi ce mécanisme rend-il le registre des transactions (la blockchain) immuable ?

Ceci vient du fait que chaque bloc est en « relation mathématique » avec tous les blocs qui le précède. En effet, parmi les données qui constituent un bloc, se trouve le hash du bloc précédent.

Et vous savez qu'il est impossible de modifier les données d'un bloc précédents sans modifier son hash. Étant donné que le hash de chaque nouveau bloc dépend des précédents, si un attaquant souhaite falsifier une transaction, il doit recalculer tous les blocs situés chronologiquement avant celui qu'il souhaite modifier, ce qui est techniquement impossible.

De plus l'horodatage des blocs empêche également à un acteur malicieux d'effectuer une double dépense (qui consiste à dépenser 2 fois les mêmes jetons, c’est-à-dire de les dupliquer). S'il est tout à fait possible de diffuser sur le réseau deux transactions dépensant les mêmes bitcoins vers deux adresses différentes, seule la première transaction inscrite sur la blockchain sera valide. Grâce à l'horodatage, l'ensemble du réseau pourra voir que la deuxième transaction (la tentative de double dépense) est invalide.

En conséquence, la preuve de travail permet bien d’assurer l’intégrité des transactions et d’éviter la double dépense !

Cependant, ceux qui se souviennent du début de l'article auront sûrement remarqué qu’il reste une possibilité de falsifier un bloc pour un (ou un groupe de) mineur(s) malhonnête(s). Il faut que ce dernier possède plus de puissance de calcul que le reste du réseau. Il pourrait alors falsifier un bloc puis miner les suivants lui-même, pour tenter de créer une chaîne plus longue que celle de ses concurrents.

On parle alors d'« attaque des 51% » ou de « goldfinger attack ».

L'attaque des 51%

EncyclopedieDuCoin_Attaque_51pourcent_Mining

Pour qu’un groupe de mineurs puisse espérer pouvoir modifier la blockchain à son avantage, il faudrait qu’il détienne au moins 51% de la puissance totale.

Ainsi, il pourrait décider d’annuler des transactions effectuées par d’autres utilisateurs, ce qui lui donnerait un droit de censure sur le réseau. Il pourrait aussi effectuer des doubles dépenses. À terme, il pourrait produire une chaîne de blocs plus longue que celle de ses concurrents, qui serait ainsi celle de référence.

Heureusement, si dans l'absolu cette attaque est possible, dans la pratique il y a beaucoup moins de chance que cela se produise.

D'une part, le coût d’achat de matériel, plus celui de l’énergie nécessaire pour le minage est tellement élevé, qu’il n’y a aucun intérêt (économique) à le faire.

Des estimations faites en 2018 montrent que le coût d'une telle attaque menée pendant 10 jours aurait coûté environ 1,4 milliard de dollars US (énergie et matériel compris). Le hashrate total était alors seulement de 30 millions de TH/s.

Aujourd’hui, avec près de 360 millions de TH/s, l'attaque coûterait plus d'1.2 millions de dollars par heure.

Coûts d'une attaque des 51% - source : https://www.crypto51.app/

D'autre part, la logistique (matériel + énergie + humain) serait compliquée à mettre en place. Il faudrait acheter, fabriquer ou récupérer des milliers de machines de minage, assurer leur alimentation en électricité et les installer et les brancher sur le réseau.

En d'autres termes, seul un Etat ou une riche entité motivé par la « destruction » de Bitcoin pourrait envisager une telle attaque, à condition d'accepter de perdre l'argent dépensé. Mais sachant que la guerre en Ukraine a coûté plus de 1600 milliards de dollars en 2022, le coût de la guerre contre Bitcoin pourrait paraître dérisoire. L'attaque des 51% reste donc tout à fait possible économiquement parlant si un Etat venait à considérer Bitcoin comme un ennemi à abattre.

Dans les autres cas de figure, il serait bien moins rentable de vouloir attaquer le réseau que d’être honnête et contribuer à le sécuriser (du fait des récompenses de blocs).

Si aujourd'hui il est beaucoup moins probable que cela se produise à nouveau, en 2014 la pool de minage GHash a d'ailleurs détenu plus de 51% du hashrate total du réseau pendant quelque temps. Elle a choisi de maintenir la sécurité plutôt que de produire des transactions frauduleuses.

Enfin, même si une entité arrivait à réussir une attaque de 51%, le reste du réseau pourrait choisir de forker la chaîne pour la reprendre celle qui existait avant l'attaque, et choisir d'exclure le groupe de mineurs malhonnêtes. Ceci aurait donc causé des dégâts à courts termes, mais n'aurait pas réellement détruit Bitcoin.

La communauté a déjà utilisé un fork pour remédier à une faille qui avait été exploitée pour produire 184 milliards de bitcoins ex nihilo le 15 aout 2010.

Minage et centralisation

Vous l'avez compris, les mineurs jouent un rôle essentiel au sein du réseau Bitcoin.

Pour que le réseau reste décentralisé, il ne doit pas y avoir de monopole et les mineurs doivent rester en concurrence.

Ceci est un défi permanent car tous cherchent des sources d’énergie peu coûteuses, afin de maximiser leurs profits. Certains pays sont ainsi susceptibles d'attirer et de concentrer l'activité minière comme c'était le cas pour la Chine avant qu'elle ne chasse les mineurs.

Par ailleurs, l’augmentation de la difficulté de minage rend le coût des machines efficace élevé. Ceci crée une barrière à l’entrée et réduit grandement le nombre d'acteur capable de participer.

Voici ci-dessous l'évolution de la distribution du hashrate entre les 6 derniers mois et les 3 dernières années. On peut voir que le nombre d'acteur reste limité même si leur poids tend à changer avec le temps.

Répartition du hashrate sur Bitcoin source : https://www.blockchain.com/explorer/charts/pools

Au niveau de la répartition géographique, vous pouvez constater que la décentralisation est encore loin d'être optimale.

Répartition géographique du hashrate de Bitcoin - source : https://chainbulletin.com/bitcoin-mining-map/

Quelques données sur le minage

Pour avoir une chance de trouver le nonce menant à un hash valide pour le réseau, il faut soit être très chanceux, soit utiliser du matériel informatique puissant.

Au départ, un simple ordinateur personnel (celui de Nakamoto par exemple) suffisait à miner. La puissance du processeur était suffisante. Puis avec le temps, la difficulté augmentant, il a été nécessaire d'utiliser des GPU, des cartes graphiques.

Aujourd'hui ce n'est plus possible, l'algorithme de minage nécessite du matériel puissant et spécifique, que l'on appelle des ASIC.

Antminer S7

Au moment de la rédaction de cet article, il est par exemple possible de se procurer un Antminer S7 pour 6380 euros développant une puissance de calcul de 9.5GH/S pour une puissance 3425 W.

Les profits qu'il est possible d'en tirer dépendent de trois facteurs essentiels : le prix de l'électricité, le cours du bitcoin et le nombre de bitcoin remis comme récompense de bloc (divisé par 2 tous les 4 ans).

Vous trouverez ci-dessous l'évolution des revenus des mineurs en dollars US depuis 2010.

Evolution du revenu des mineurs - source : https://www.blockchain.com/explorer/charts/miners-revenue

À l’instar de ceux qui gagnent à la loterie, il arrive assez fréquemment que des mineurs isolés avec une faible puissance de calcul parviennent à valider un bloc. C'est alors le jackpot pour eux !

L'évolution de Bitcoin (avec par exemple l'arrivée des Ordinals) peut aussi amener les utilisateurs à devoir payer des frais importants pour valider leurs transactions, qui pourraient alors constituer la principale motivation économique des mineurs s'ils dépassent les récompenses de blocs.

Pour comprendre comment fonctionne une transaction sur Bitcoin en détail, rendez-vous sur l'article suivant !