Avec la médiatisation des cryptomonnaies, des NFTs et autres produits basés sur des technologies type "blockchain", on entend régulièrement parler de vérification par POW.

POW est l'abbréviation pour "Proof Of Work" (ou "preuve de travail" en Français).

Pour ne prendre que l'exemple le plus connu du Bitcoin, ce dernier utilise le concept du Proof Of Work pour le minage de nouveaux blocs par exemple, mais qu'est-ce que cela signifie réellement, nous allons le découvrir ensemble !

Théorie

En 1993, Cynthia Dwork et Moni Naor cherchent une solution pour réduire drastiquement le spam reçu au travers d'un réseau d'adresses e-mails devenant critique.

Ces derniers en arrivent à l'idée d'un protocole de vérification asynchrone, donnant du fil à retordre aux spammeurs, tout en gardant la vie facile des récipiendaires.

Cette méthode, c'est le "Proof Of Work" : le concept est de demander un travail de calcul aux machines souhaitant envoyer des e-mails, comme pour montrer une preuve de "motivation".

Comme un captcha, mais réservé aux machines cette fois !

Imaginons celà dans la vie réelle : Même si vous êtes devant moi, j'ai décidé de ne vous écouter que si vous trouvez (sans l'aide d'un dictionnaire), un mot français valide, contenant 9 lettres, commençant par "g" et finissant par "t".

Il y a de fortes chances que vous passiez des dizaines de minutes à trouver un tel mot, et si votre message n'est pas de la plus haute importance, vous ne ferez pas l'effort d'effectuer ce "calcul".

Pourtant, si vous le trouvez, de mon côté, la validation est très simple : je regarde le mot, je compte les lettres, je regarde le début et la fin et j'accepte de vous parler.

Le concept théorique de Proof Of Work se limite donc à demander un effort de calcul/algorithmie à une machine, tout en rendant la validation sans effort !

Mise en pratique

Reprenons notre exemple du Bitcoin, cette célèbre cryptomonnaie utilise la preuve de travail en tant que protocole de consensus pour deux tâches disctintes :

  • Miner de nouveaux blocks (créer de nouveaux "coins")
  • Valider les transactions existantes
Un protocole de consensus permet à un ensemble de noeuds d'un système décentralisé de tomber d'accord.

Et en l'occurence, tomber d'accord sur la véracité des données, si jamais des données illégales ont été injectée.

Lorsque l'une des machine a trouvé la solution à la problématique posée pour créer un nouveau bloc par exemple, toutes les autres machines du réseau peuvent instantannément valider le résutat.

Le protocole de Proof of Work permet d'éviter que ce soit simplement le nombre de machines qui puisse peser dans la balance, mais également la puissance de calcul et l'implication dans le réseau.

On rend plus difficile l'accès aux machines malveillantes, car le retour sur investissement d'une attaque est alors inintéressante.

L'algorithme PoW derrière le Bitcoin

Je vous ai vulgarisé un algorithme théorique avec un mot à trouver dans le début de cet article, mais vous allez voir que l'algorithme réel n'est pas si loin que ça, simplement plus "informatique" et "cryptographique".

Cet algorithme est communément appelé "HashCash", le nom du premier projet dans lequel ce dernier a été implémenté et est basé sur la méthode de hachage "SHA-256".

Pour qu'une machine puisse valider un bloc, elle devra partir d'une chaine, et en ajoutant un nombre à cette chaine (appelé le "nonce"), faire que le hash-256 de cette dernière commence par quatre zéro par exemple.

Ce qui donnerait:

  • Chaine de base : "Hello, world!"
  • On ajoute l'entier "Hello, world!0"
  • Le hash de la chaine+nonce : "1312af178c253f84[...]ec81976192e2ec934c64"

Est-ce que ce hash commence par 4 zéros ? Non, alors on continue d'incrémenter :

  • "Hello, world!1" : "e9afc424b79e4f6ab42d99[...]be78e948a9332a7d8"
  • "Hello, world!2" : "ae37343357a829759162e[...]32aa475cf05fd4266b7"
  • ...
  • "Hello, world!4250" : "0000c3af42fc31103f1fd[...]7cc52ea464e12dcd4e9"
Bingo ! Le "nonce" valide est donc 4250, il ne reste plus qu'à ce que les autres noeuds du réseau valident mon résultat, et j'aurais validé un bloc !

À noter qu'en réalité, l'algorithme PoW du Bitcoin n'utilise pas un nombre de zéros pour la vérification, mais un entier naturel cible dont le hash doit être strictement inférieur, mais le concept est le même.

J'espère que cet article vous aura été utile, et à bientôt sur le blog !

Les articles les plus populaires du blog

Envie de continuer à lire des articles autour du développement web (entre autres) ? Voici la sélection des articles de mon blog les plus lus par la communauté !

Voir la sélection 🚀

Recevez les articles de la semaine par e-mail pour ne rien manquer !

S'abonner à la newsletter 📧

À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage d'expériences et de connaissances.

Aujourd'hui je suis aussi coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !


Photo par Ricky  Kharawala sur Unsplash