Intéressons-nous d’un peu plus près au minage de Bitcoin, activité très particulière, expression concrète d’un procédé assez nébuleux qui se nomme ‘preuve de travail’ (proof of work).

Se donner du mal


À l’origine, la ‘preuve de travail’ est une technique anti-spam mise au point au début des années ‘90 qui oblige tout utilisateur d’un réseau de communication à ‘se donner du mal’ avant de pouvoir expédier son message.

En informatique, ‘se donner du mal’ correspond à effectuer un calcul qui monopolise le processeur (énergie et temps), puis à fournir au réseau la preuve que ce calcul a bien été effectué. Un peu comme s’il fallait mettre un timbre sur chaque courriel.

Dans un tel réseau, il est clair qu’on y regarde à deux fois avant d’envoyer une grande quantité de messages sans importance…

Hachage, la moulinette mathématique

Ce fameux calcul qui monopolise le processeur est particulier : il fait appel à une opération logique appelée ‘fonction de hachage (hash function)’.

Cette fonction est bien connue dans le monde de la cryptographie, car elle en est un peu le couteau suisse. Elle présente en effet un certain nombre de caractéristiques très utiles.

La première est qu’elle est à sens unique – comprenez qu’à partir d’un énoncé, il est très facile de calculer un résultat, mais qu’à partir du résultat, il est extrêmement difficile mathématiquement (impossible en pratique) de retrouver l’énoncé.

La seconde est qu’elle prend en entrée un fichier informatique de nature et de taille quelconques et retourne très facilement un résultat de longueur toujours fixée au préalable : 256 caractères binaires pour la fonction de hachage SHA256, inventée par la NSA et utilisée massivement dans Bitcoin. C’est donc une sorte de moulinette qui mixe le fichier pour en ressortir un reliquat compressé.

Ce reliquat, appelé le ‘hash’, peut être vu comme l’empreinte digitale du fichier d’origine. Il lui est propre et unique tout en ne dévoilant rien de son contenu.

Car, et c’est là la troisième propriété, il n’est pas possible statistiquement de trouver deux fichiers différents qui donnent le même hash.

Ainsi, si vous voulez comparer deux versions d’un grand fichier (par exemple, l’intégrale de l’encyclopédie Universalis), il est bien plus intéressant de calculer le hash de chacune des deux versions. Si c’est le même résultat, vous pouvez être absolument sûr de leur concordance. Si ce n’est pas le même, vous avez la preuve mathématique que les versions sont différentes.

Il existe de nombreux sites où l’on peut s’amuser à calculer le hash d’un contenu, par exemple ici :

https://xorbin.com/tools/sha256-hash-calculator

Mon hash, ma bataille


Observons ce que la preuve de travail permet d’obtenir dans le ‘minage’ de Bitcoin…

Le minage est une opération fondamentale du système. Dans ce réseau dans lequel il n’y a pas d’autorité, ce sont certains participants qui décident librement d’écrire les transactions dans la chaîne de blocs, on les appelle ‘les mineurs’. Si on en restait là, il y aurait alors autant de blockchains différentes qu’il y a de mineurs disposés à écrire… il faut donc trouver un moyen pour les départager.

Pour ce faire, Nakamoto a mis au point une sorte de compétition-loterie basée sur la preuve de travail, donc basée sur du calcul de hash.

Chaque mineur va rassembler des transactions en attente sur le réseau pour constituer un bloc, un fichier ‘paquet’. Une fois ceci fait, il en calcule le hash. Sauf que, pour être accepté par le réseau comme une suite valide de la chaîne, le hash de ce bloc doit présenter un profil spécifique : il doit commencer par un certain nombre de zéros.

Les mineurs sont donc obligés de calculer l’image réciproque d’un hash dont les premiers caractères sont imposés par le système (on l’appelle ‘la cible’).

Comme le hachage est une fonction qui ne va que dans un sens, ils ne peuvent prévoir le résultat à l’avance, ils n’ont pas d’autre choix que de faire varier une petite fraction du bloc (le ‘nonce’) et de calculer, à la volée, le hash résultant, encore et encore, et encore jusqu’à espérer obtenir un résultat qui rentre dans la cible.

C’est ce calcul énormément répétitif qui fait consommer de l’énergie et du temps.

À l’heure d’écrire ces lignes, les mineurs du réseau Bitcoin rassemblent une puissance de calcul d’environ 350 000 000 000 000 000 000 de hashs par seconde… pour un bloc qui parvient à être écrit toutes les 10 minutes en moyenne !

Remarques

Dans les médias, on présente souvent le minage comme des ‘calculs extrêmement complexes’. C’est faux. Pour un ordinateur, exécuter un hash est archi-simple et ultra-rapide. C’est du reste ce que font les nœuds du réseau pour vérifier la légitimité de certaines informations : ils recalculent les hashs (entre autres).

En réalité, le minage consiste à faire un calcul simple, mais un nombre de fois extrêmement grand et le plus vite possible.

Cette dépense d’énergie électrique, qui fait tant s’émouvoir dans les salons feutrés des lobbyistes, n’est pas réellement un problème et nous en parlerons prochainement…

La récompense du devoir accompli ?


Les mineurs ne vont tout de même pas se donner autant de mal pour rien !

Non, effectivement, il y a une incitation : chacun a le droit de mettre dans le bloc sur lequel il travaille une transaction qui crée une nouvelle quantité de bitcoins (6,25 actuellement) et qui va pointer vers une adresse qui lui appartient. Cette transaction se nomme la ‘coinbase’.

C’est de cette manière que de nouveaux bitcoins sont ajoutés au système (de manière dégressive dans le temps)

Il est d’autant plus intéressant de le signaler que, de par ce fait, chaque mineur travaille sur le hash d’un bloc qui lui est propre puisque le contenu est différent (il y a au moins cette transaction qui est différente).

Il s’agit donc à la fois d’une compétition, mais également d’une loterie, et ce n’est pas forcément le mineur qui possède la plus grande puissance de calcul qui va systématiquement gagner. Tout est question de probabilité.

Celui qui parvient à calculer le bon hash de son bloc avant les autres verra donc ce dernier légitimement chaîné et possédera alors réellement 6,25 bitcoins de plus sur le registre blockchain.

Cette récompense en échange du mal qu’on s’est donné pour le réseau n’est pas anodine : en rémunérant le mineur gagnant avec la monnaie du système, Nakamoto jette un pont entre son réseau informatique et les lois de la physique, en particulier celles de la thermodynamique. Chaque bitcoin vaut concrètement un travail fourni.

Il rend enfin extrêmement difficile la falsification de toute transaction chaînée puisque la moindre modification obligerait un attaquant à refaire toute la preuve de travail du bloc concerné (ainsi que de ceux qui suivent, le cas échéant) en battant de vitesse les mineurs qui continuent.

Ce qui équivaut à dire qu’au bout d’un certain nombre de blocs, la transaction est devenue immuable, comme gravée dans du marbre numérique.

‘L’art est dans la difficulté’ (A. Gide)

Pour terminer cet article un peu indigeste, remarquons enfin que la ‘cible’ évoquée plus haut est susceptible de varier en fonction de la puissance de calcul présente sur le réseau. C’est un ajustement de la difficulté.

Tous les 2016 blocs (deux semaines environ) le système s’auto-audite et calcule le temps moyen nécessaire au minage de ces blocs. S’il est inférieur à 10 minutes, cela signifie qu’une plus grande puissance est disponible et la difficulté va augmenter. A contrario, s’il est supérieur à 10 minutes, cette difficulté va s’ajuster à la baisse.

Encore une fois, il s’agit là d’un procédé ingénieux qui permet de tenir compte aussi bien des progrès techniques (processeurs plus performants) que des éventuelles variations d’intérêts pour le système (s’il y a moins de mineurs, leur probabilité d’être récompensés augmente), tout en garantissant le maintien d’un rythme moyen stable d’écriture des blocs.

La preuve d'enjeu


Signalons pour terminer que d’autres blockchains emploient différents algorithmes de la preuve de travail, plus ou moins élaborés, généralement pour tenter d’échapper à cette dépense énergétique.

Un des plus connus est la ‘preuve d’enjeu’ (proof of stake) qui est implémentée par exemple sur Ethereum depuis l’an dernier, en remplacement de la preuve de travail.

Loin de nous l’idée de rentrer dans une guerre d’algorithmes… Il n’en reste pas moins que, dans un réseau qui se veut véritablement décentralisé, la preuve de travail constitue la solution de confiance la plus simple et la plus formelle.

Et pour nous, qui sommes friands de métal, la preuve de travail demeure la véritable manifestation d’une dépense de ressources à la recherche du précieux : on n’a jamais trouvé de l’or en montrant juste ses biceps, mais bien en les faisant travailler !