La preuve de travail (Proof-of-Work en anglais) est un mécanisme utilisé dans Bitcoin, au sein du principe de Consensus de Nakamoto, afin que le système de paiement soit résistant aux attaques Sybil. Ce type d’attaque se caractérise par la création de multiples fausses identités afin de corrompre le réseau pair-à-pair.
Le Consensus de Nakamoto est le principe qui permet aux utilisateurs de Bitcoin de s’entendre sur une version unique de la blockchain dans le but de parvenir à un accord sur la question : « qui possède quoi ? ». On l’appelle « consensus par preuve de travail » puisqu’il spécifie que les nœuds s'entendent sur la blockchain disposant de la plus grande quantité de travail accumulé. Cette preuve de travail est réalisée par des ordinateurs que l’on appelle les « mineurs », en référence au processus d’extraction de l’or. Le minage de bitcoins (mining) est ainsi l’action de s’adonner à la preuve de travail.
Cet article sur la preuve de travail est la suite logique de l’article de la semaine passée sur le fonctionnement général de Bitcoin. Je vous conseille également de le lire en cliquant sur le lien ci-dessous.
➤ En savoir plus sur le fonctionnement de Bitcoin.
Comment fonctionne la preuve de travail ? (Proof-of-Work)
La preuve de travail, c’est simplement la recherche d’une valeur qui, une fois passée dans une fonction mathématique aléatoire, donne un résultat inférieur à un nombre cible.
Concrètement, les mineurs rassemblent les transactions en attente dans un bloc, en respectant la limite maximale de poids, et y incrémentent des valeurs modifiables.
Ils vont passer l’entête de ce bloc candidat dans une fonction aléatoire et irréversible. L’objectif est de trouver une empreinte (résultat de la fonction) inférieure à la cible. Si leur bloc ne remplit pas la condition, ils peuvent changer les valeurs modifiables (nonces) et réessayer de passer leur nouvel entête dans la fonction. Ils auront alors un résultat complètement différent du premier. Le mineur continue ce processus de modification des nonces et de comparaison du résultat obtenu avec la cible jusqu’à qu’un bloc valide soit trouvé.
Puisque la fonction SHA256 ne peut pas être inversée, les mineurs ne peuvent qu'essayer une à une toutes les possibilités. C’est un calcul par tâtonnement. Le premier mineur qui trouve un bloc remplissant cette condition remporte le droit de l’inscrire sur la blockchain de tous les utilisateurs, et empoche la récompense pécuniaire associée. Cette rémunération des mineurs est composée de deux parties distinctes :
les frais des transactions inclues dans le bloc,
et la récompense coinbase qui vient créer de nouveaux bitcoins.
➤ En savoir plus sur la récompense coinbase, les halvings et l’émission monétaire dégressive.
La validation d’un bloc implique également une première confirmation de paiement pour toutes les transactions inclues dans celui-ci.
Les utilisateurs du réseau Bitcoin, représentés par leurs nœuds, peuvent ainsi tous s'entendre sur une version du registre des comptes en ajoutant à leur base de données les blocs valides créés par les mineurs. Chaque nœud garde en mémoire un état de la blockchain et enregistre les nouveaux blocs créés après les avoir individuellement vérifiés. La blockchain faisant foi est celle disposant de la plus grande quantité de travail accumulé. Ce principe d’accord entre tous les utilisateurs est ce que l’on nomme : « Consensus de Nakamoto par preuve de travail ».
L’ajustement de la difficulté du minage
L'algorithme de consensus inclut un ajustement de la valeur cible afin de maintenir une vitesse stable de la création des blocs à 10 minutes. Lorsque les blocs sont trouvés trop rapidement par rapport à l’objectif, la difficulté de minage augmente, et inversement. Ce large intervalle entre les blocs permet de laisser le temps à tous les nœuds de bien se synchroniser sur le même état de la chaîne de blocs.
Concrètement, tous les 2016 blocs (environ toutes les deux semaines), les nœuds vont calculer une nouvelle cible pour la preuve de travail afin d’ajuster la difficulté du minage.
Pour rappel, les mineurs doivent trouver un bloc qui, une fois passé dans une fonction aléatoire, donnera un nombre inférieur à la cible. Si durant la dernière période de 2016 blocs, ils furent trouvés en moyenne plus rapidement que 10 minutes chacun, cela veut dire qu’il y a eu une augmentation de la puissance de calcul déployée sur le réseau. Les nœuds vont donc augmenter la difficulté du minage en ajustant la cible à la baisse afin d’augmenter le temps nécessaire pour trouver un bloc valide. L’objectif est que cette valeur se rapproche en moyenne de 10 minutes. À l’inverse, si durant la dernière période de 2016 blocs, ils furent validés en moyenne plus lentement que 10 minutes chacun, cela veut dire qu’il y a eu une baisse de la puissance de calcul déployée par les mineurs. Les nœuds vont alors abaisser la difficulté en ajustant la cible à la hausse.
Pour calculer la nouvelle cible, tous les 2016 blocs, les nœuds vont effectuer le calcul suivant :
- Nouvelle cible = Ancienne cible * ( temps total des 2016 derniers blocs en secondes / 1 209 600 secondes)
Ce nombre cible est ainsi un outil d'ajustement. En le modifiant, on change en termes de probabilité le temps nécessaire pour trouver une empreinte remplissant la condition. Grâce à cela, la production des blocs sur Bitcoin tend naturellement vers une fréquence stable avec des intervalles de 10 minutes, quel que soit le nombre d’ordinateurs qui minent.
Cet intervalle de 10 minutes a été choisi arbitrairement par Satoshi Nakamoto lors de la création de Bitcoin. Le temps cible entre chaque bloc représente un compromis entre la sécurisation du réseau et l’efficacité du système de paiement. Un temps plus court permet d’obtenir des confirmations plus rapides pour les utilisateurs, alors qu’un temps plus long permet d’éviter les séparations de chaîne. Ces « splits », en anglais, causent un gaspillage de la puissance de calcul sur des blocs orphelins, et donc viennent réduire la sécurité globale du système. Un temps cible de 10 minutes est un bon compromis entre efficacité et sécurité. C’est pourquoi cet intervalle n’est pas une « faiblesse » de Bitcoin, mais bien une fonctionnalité essentielle.
À quoi sert la preuve de travail sur Bitcoin ?
La preuve de travail permet de protéger le réseau Bitcoin face aux attaques Sybil. En effet, ce mécanisme permet d’empêcher à un acteur malveillant de prendre le contrôle du réseau de paiement en multipliant les identités. Au lieu de s'établir sur un système de vote par ordinateur, Bitcoin s'établit sur un système de vote par puissance de calcul. Puisque ce calcul requiert une dépense énergétique, on dispose alors d’une manière tangible, universelle et externe au réseau de choisir de qui dispose du droit d’inscrire un bloc au registre distribué.
Un attaquant souhaitant modifier l’état de propriété des bitcoins devra forcément diffuser sa propre version de la chaîne. Pour que cet état malveillant soit accepté, il faut que celui-ci respecte le protocole Bitcoin et notamment le chaînage des blocs entre eux. Il devra également disposer de plus de quantités de travail accumulé que la chaîne honnête. Cela veut dire que l’attaquant doit refaire tout le travail de calcul postérieur au bloc qui a subi sa modification frauduleuse. S’il ne dispose pas de plus de puissance de calcul que tous les autres mineurs honnêtes, il ne parviendra jamais à faire accepter sa version de la chaîne aux nœuds honnêtes, et échouera dans sa tentative d’attaque.
Grâce à l’utilisation de la preuve de travail, les mineurs sont naturellement incités à rester honnêtes. En effet, une attaque nécessiterait de déployer une puissance de calcul phénoménale et de la maintenir dans le temps. Cela veut dire qu’une attaque consommerait énormément d’électricité, et serait donc particulièrement couteuse, sans pour autant avoir un résultat garanti. Il est alors bien plus intéressant d’utiliser ses machines pour miner honnêtement et recevoir les récompenses données pour avoir trouvé un bloc valide.
Au-delà de ce travail de protection face aux attaques Sybil, la Proof-of-Work tient aussi un rôle essentiel pour la résistance à la censure du système de paiement. En effet, avec le Consensus de Nakamoto, elle permet d’attribuer ponctuellement le droit d’inscrire un bloc dans le registre en choisissant un mineur de façon aléatoire, proportionnellement à la puissance de calcul déployée. Toutes les 10 minutes, ce mécanisme donnera le droit à un nouveau mineur de pousser son bloc, avec toutes les transactions qu’il contient. Grâce à cela, les utilisateurs de Bitcoin bénéficient de l’incensurabilité au niveau de la confirmation de leurs transactions. Si un mineur censure un utilisateur et refuse d’inclure ses transactions dans son bloc pour une raison extérieure aux règles du protocole, ce n’est pas grave. D’autres mineurs qui ne censurent pas ce même utilisateur l’incluront. Elle sera confirmée dès qu’ils fourniront un bloc remplissant la condition de preuve de travail.
Par ailleurs, l’utilisateur censuré peut augmenter ses frais de transaction afin d’inciter d’autres mineurs à l’inclure dans un bloc. Cela créera une pression financière sur les mineurs censeurs, et favorisera naturellement les mineurs loyaux par un processus naturel de marché.
Conclusion
Le Consensus de Nakamoto par preuve de travail est le principe utilisé pour établir un accord sur une version unique du registre distribué entre les différents nœuds du réseau. Il est établi sur le mécanisme de la preuve de travail, qui est simplement un système de résistance aux attaques Sybil.
La preuve de travail est la recherche d’une valeur qui, une fois passée dans une fonction aléatoire, donne un résultat inférieur à une cible déterminée. Ce travail de recherche est effectué par des acteurs, utilisant des ordinateurs spécialisés, que l’on nomme « les mineurs ».
La cible de la preuve de travail est ajustée tous les 2016 blocs par les nœuds. C’est ce que l’on appelle « l’ajustement de la difficulté ». On abaisse le nombre cible pour augmenter la difficulté de minage, ou on l’augmente pour baisser la difficulté, en fonction de l’évolution de la puissance de calcul déployée par les mineurs durant la période précédente.
Attention à ne pas confondre la preuve d’enjeu (PoS) avec la preuve de travail (PoW). Ces deux mécanismes sont très différents. Contrairement à la preuve de travail, le processus de décision majoritaire de la preuve d’enjeu n’est établi sur aucun élément tangible externe au réseau et cela apporte de nombreux problèmes aux systèmes de paiement l’utilisant. Cette comparaison PoW / PoS fera l’objet d’un prochain article détaillé.
➤ En savoir plus sur les différences entre Bitcoin et les autres cryptomonnaies.