Le consensus qui permet de sécuriser la blockchain, et donc de miner les bitcoins est le Proof of Work. Le terme se traduit littéralement par “Preuve de travail” en français. Pour la suite de l’article nous utiliserons souvent l’acronyme PoW, qui est le plus utilisé dans le domaine du minage et de la blockchain de manière générale.
Sommaire
Naissance du Proof Of Work et utilisation pour Bitcoin
Le fonctionnement du PoW n’est pas issu du minage, ou de la blockchain. Au départ cette méthode de travail a été imaginée dans le but de prévenir des attaques de spam ou DDOS qui pullulaient dans les années 1990. Sa première utilisation réelle se fait en 1996, et il faudra attendre plus de 10 ans pour que Satoshi ne décide de l’utiliser pour donner naissance à Bitcoin.
Le principe de fonctionnement comme défini à ce moment là implique qu’un mineur doit effectuer des calculs mathématiques, afin de pouvoir ajouter des transactions dans un nouveau bloc. Ce travail sera alors récompensé, dans notre cas par le don d’un certain nombre de bitcoins.
Fonctionnement du POW
Pour miner un bloc, il faut avoir résolu un calcul mathématique. Ce calcul a une difficulté qui lui est propre, et qui est revue tous les 2016 blocs.
Le but étant qu’avec cette difficulté, le temps moyen de minage d’un bloc soit de 10 minutes. Si la moyenne dérive à la hausse, au moment du réajustement on réduira la difficulté, et si le minage des blocs est trop facile, alors on augmentera la difficulté.
On peut illustrer cette difficulté avec le fait de lancer un dé. Si on donne 10 dés à une personne, et qu’elle les lance, 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 a atteindre est 400. Si le jet de dés est supérieur, alors le joueur doit recommencer, jusqu’à atteindre un chiffre inférieur ou égal à 400.
Si le joueur met moins de 10 minutes à réussir, alors la difficulté pourra être augmentée, en demandant de faire un score maximal de 300. Par contre si le joueur met plus de 10 minute à réussir, alors on pourra réduire la difficulté, en augmentant le maximum de points auquel il à le droit.
Comment cette difficulté se traduit pour le mineur ? Par l’utilisation d’un nonce.
Un nonce est un nombre aléatoire, généré de manière arbitraire, et qui est codé sur 32 bits dans le cas du Bitcoin. Le but du mineur est d’arriver à générer un nombre qui soit inférieur ou égal à la cible qui a été définie, en utilisant ce nonce. Pour se faire, il va utiliser une technologie de hachage, qui va générer une chaine de caractère, qui sera unique. Cette chaine contiendra un certain nombres d’informations obligatoires dans le bloc, comme le numéro du bloc, son horodatage, les données à intégrer, le nonce et le hash du bloc précédent.
Une fois ces données hashées, le mineur obtient un résultat. Si le résultat ne correspond pas à la difficulté attendue, alors le mineur doit refaire son calcul. Et pour cela il devra générer un nouveau nonce, avec une valeur complétement différente, ce qui donne un résultat lui aussi différent du précédent après le hashage.
Si je prends par exemple la phrase : « Le journal du coin vous présente son encyclopédie » et que j’utilise l’algorithme de hashage SHA-256 utilisé pour Bitcoin, j’obtiendrais ce résultat :
52bfdf631465247ab5773f656903f5d3866954a6a8971a7ca6a1321e50748b1c
Si je modifie un seul caractère, en remplaçant le “j” de journal du coin, par un J majuscule. Mon hash n’aura alors absolument plus rien à voir avec le précèdent.
989017c96c09e9a6e5ab1277d465dc13e29f3aad25f991e430c08628ce3f0c04
Si une simple lettre, minuscule ou majuscule, à une telle incidence sur le hash, imaginez la difficulté que va avoir le mineur à prévoir son résultat et surtout le faire correspondre à la cible de difficulté.
Prenons en exemple une difficulté cible qui est celle-ci :
1000000000000000000000000000000000000000000000000000000000000000
Pour le mineur, cela implique que le résultat de son hash devra commencer par un 0. Par exemple un hash valable serait :
0487a6dd6e0727f7f8058fbef45f5c37fe89086ad4e78a1521d06505bcb4522c
Si, après réévaluation de la difficulté, on décide de l’augmenter, on peut se dire que le hash devra commencer par deux 0.
Notre hash précédent n’est donc plus valide !
La cible de difficulté est devenue :
0100000000000000000000000000000000000000000000000000000000000000
Et un exemple de hash valide pourrait être :
00da28957bd4ba06a5af9e6c81226d743fca7028cf9a08fa125e39f15cae49bd
Etant donné que les machines qui effectuent les calculs sont de plus en plus puissantes, la difficulté augmente de manière très rapide dans le temps.
Machines de minages
Pour valider le minage, et donc utiliser le consensus de Proof Of Work, les mineurs doivent utiliser du matériel informatique.
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.
La difficulté augmentant, il faut des machines de plus en plus puissantes. Comme les machines sont puissantes, elles ont tendance à consommer beaucoup d’électricité.
C’est pourquoi le consensus de PoW est souvent décrié, car réputé énergivore.
Dans le cadre du minage du Bitcoin, malgré le fait que la consommation soit un élément non négligeable, plus de 50% des blocs sont générés par des mineurs qui sont stockés dans des fermes de minages, et qui utilisent de l’énergie dite verte, qu’elle soit hydraulique, solaire, ou par vapeur.
Le Proof of Work et la sécurité
Le but d’une blockchain est simple. Stocker des données de manière claire, transparente et surtout sécurisées.
Cette sécurisation est assurée par le minage, c’est de cette manière que sont ajoutés les blocs sur une blockchain utilisant le POW.
Le but de ce consensus est d’apporter la preuve qu’un travail a été nécessaire pour produire un bloc, que de l’énergie a été utilisée dans ce but. C’est d’ailleurs pour ça que l’on utilise le terme “miner”. Comme à l’époque de la ruée vers l’or, un mineur doit dépenser de l’énergie pour obtenir sa récompense.
Ce fonctionnement implique qu’une personne qui souhaiterait ajouter un bloc contenant de fausses données, doit dépenser une énergie incroyable pour, calculer un hash qui soit utilisable, et en plus être la machine sélectionnée pour créer le nouveau bloc.
Cela implique que pour réussir à réaliser une dépense frauduleuse, il faudrait que le pirate détienne au moins 51% de la puissance de calcul totale sur le réseau. Ce qui est complètement inimaginable avec le Bitcoin.
Ajoutons à cela le fait que n’importe qui, s’il le désire, peut devenir un mineur (moyennant finances bien sûr). Et que si des mineurs souhaitent arrêter leurs machines, le réseau continuera de fonctionner.
Le taux de hachage sera réduit, la difficulté évoluera, mais la création de nouveau bloc continuera.