Accueil » Proof of Work (POW) de la Blockchain Bitcoin en 5 minutes

Proof of Work (POW) de la Blockchain Bitcoin en 5 minutes

De nombreux articles se contentent de tourner autour de la notion de la blockchain tout en utilisant des terminologies du type PoW, Hash. Mais peu d’articles s’intéressent réellement à la manifestation technique de ce que nous appelons la Proof of Work. Qwantic revient sur quelques bases et vous décrit dans les détails ce que représente concrètement la preuve de travail.

Le Hashage, la clé de la compréhension :

Imaginez que vous créez une oeuvre numérique unique et que vous souhaitez en garder la paternité et éviter des contrefaçons, comment procéder ?

Dans le monde physique, les solutions sont nombreuses, mais dans le monde numérique où tout est 0 et 1, la copie et la transformation sont simples. Ainsi, comment assurer l’intégrité d’une oeuvre ? Autre exemple, vous souhaitez stocker un mot de passe sur une base de donnée, mais vous ne souhaitez pas l’écrire noir sur blanc, comment faire ?

La solution à ses différents problèmes : le hashage. En d’autres termes, une opération mathématique qui permet de passer d’un élement complexe à une simple empreinte numérique sans pouvoir procéder à l’opération inverse. Cette empreinte numérique, appelé hash est complètement liée au contenu de ce fichier, mot de passe ou archive.

Hashage, de quoi parle-t-on?

Imaginez que vous créez une oeuvre numérique, l’identifiant de ce fichier (ou Hash) est le « ABCDEF100 » obtenu suite à une opération mathématique. A chaque fois qu’une personne achète votre contenu, elle peut recalculer l’identifiant du portrait en appliquant l’opération standard et voir si elle obtient le même résultat ou Hash « ABCDEF100 ». Si une personne mal intentionnée modifie l’oeuvre, le résultat du Hash sera différent et prouvera que l’oeuvre a été contrefaite. Souvent ces vérifications sont automatiques, par exemple, lors de la mise à jour d’un contenu sur votre ordinateur, le fichier est vérifié en comparant son Hash avec celui de l’éditeur.

Le Hash est un identifiant lié à un fichier et qui est totalement dépendant du contenu. Il permet de vérifier l’intégrité d’un fichier.

Inspiré de l’article https://fr.wikipedia.org/wiki/Fonction_de_hachage

Le deuxième avantage des Hashs est de pouvoir stocker, avec une taille limitée, des données, sans compromettre la donnée initiale. L’utilisation la plus courante est le stockage des mots de passe. Lorsque vous vous connectez sur https://platform.qwantic.io, le site web vous demande votre mot de passe et il doit vérifier si ce qui est soumis correspond à votre mot de passe. L’opération réellement effectuée est la comparaison du Hash du mot de passe écrit avec le Hash enregistré. Si les deux correspondent, alors le mot de passe soumis est le bon. Enfin, si la base de donnée est piratée, on ne pourra pas remonter au mot de passe, la propriété de la fonction de hachage l’en empêche : la seule donnée du Hash ne permet pas de remonter à la donnée initiale.

L’opération de Hashage – Fonction de Hachage

Le premier paragraphe abordait la notion sans entrer dans les détails techniques. Derrière cette théorie, il a fallu développer des opérations mathématiques capables de créer une empreinte numérique et possédant certaines propriétés.

Schéma de principe du Hash d’un fichier texte

Les propriétées de notre fonction de Hashage doivent être :

  • Il est difficile de remonter au message initial à partir de l’empreinte numérique (ou Hash)
  • Il est très difficile de créer un message pour donner un hash précis
  • Il est très difficile de trouver deux messages aléatoires donnant le même hash (on parle de collision)
  • Une légère modification du message initiale change complètement l’empreinte
  • Le même message numérique doit toujours donner la même empreinte

Par la notion de très difficile, nous entendons qu’il est techniquement impossible en pratique (nécessitant des puissances et temps de calculs impossible à atteindre à notre échelle).

Il est intéressant de noter que cette définition de fonction de Hashage est liée à la technologie. Lorsque nous définissons une opération en fonction de sa complexité, nous sommes directement liés à l’évolution de l’informatique. La notion de fonction de Hashage est ancienne et des opérations techniquement impossibles il y a 20 ans sont aujourd’hui réalisables depuis un ordinateur personnel. Ainsi de nombreux candidats ont vu le jour et ont disparu. De nos jours, la fonction de Hashage la plus commune est la fonction SHA-256.

Pour essayer de coder quelques messages, vous pouvez visiter le site https://www.dcode.fr/hash-sha256

Bitcoin, Blockchain et SHA-256

Dans les premiers paragraphes, nous avons introduit la notion de Hash et de Fonction de Hashage. En d’autres termes, nous avons soulevé la question « Comment assurer l’intégrité d’un fichier numérique ? ». La réponse à cette question, affecter à chaque fichier numérique une empreinte, comme une signature, non falsifiable et pouvant être simplement vérifiée.

Si nous nous attardons sur la définition du Bitcoin et de la Blockchain, nous faisons face à la même problématique. Le réseau de bloc, qui correspond simplement à une suite de « livre de compte » ou « carnet de transaction », doit pouvoir être intègre, simplement vérifiable et ne doit pas pouvoir être modifié.

Notion de Blockchain :

Notre but n’est pas de rentrer dans la définition pure et dure de la blockchain, de nombreux articles s’en occupent déjà. Il est simplement fondamental de comprendre que la blockchain, ou chaine de bloc, est un ensemble de document contenant une liste d’informations (dont les transactions effectuées), l’information du bloc précédent (le Hash) et d’autres champs utiles pour les opérations de « Proof of Work ».

Notion de Preuve de Travail ou Proof of Work:

Pour rendre la blockchain inviolable, les validations du bloc (donc l’écriture des transactions) ne doivent pas être faite par celui qui le souhaite. Autrement dit, s’il était possible d’être un « validateur » simplement, il serait possible de modifier le contenu du bloc en cours et y ajouter des transactions falisifiées.

Ainsi, l’ensemble du réseau est mis à contribution pour pouvoir valider le bloc actuel (qui correspond à l’ensemble des transactions). La preuve de travail correspond à une opération complexe de telle manière que personne ne peut savoir à l’avance qui résoudra cette opération, bien entendu, les personnes ayant plus de puissances de calcul peuvent augmenter leur chance de résoudre ce problème mathématique.

Mais quelle est cette opération ? Qu’est-ce que concrètement la preuve de travail ?

Derrière la sécuritsation du réseau, le calcul complexe est finalement un problème mathématique très simple : Le premier qui, en modifiant légèrement un champ du bloc actuel, trouve une empreinte numérique du bloc commençant par 19 fois 0 à gagner.

Imaginons un bloc très simple, correspondant à ce texte :

  • Bloc numéro : 1036
  • Transactions :
    • Jacques : 10 BTC / Jean : 5 BTC
  • Champ libre (Proof of Work) :
    • Un message aléatoire
  • Hash du bloc précédent :
    • 00000000000000000009ccca2455b98fb9631c8307658de01127eb9227b6cc25

En appliquant la fonction de hashage au bloc 1036, nous arrivons à la valeur suivante du hash 5947cd[…]0c486c91. Notre but est de modifier le champ libre (Proof of Work) jusqu’à ce que le résultat de la fonction de hashage du bloc complet commence par 19 fois 0 et ainsi valider le bloc qui peut ensuite faire parti de la chaine. C’est une propriété de la fonction de Hashage, chaque modification d’un caractère génère un Hash très différent. Il est également impossible de réaliser l’opération inverse et partir d’un hash pour deviner le message à ajouter dans le champ libre.

Remarque : L’algorithme SHA256 retourne un Hash de 256 caractères binaires, que nous convertissons en général en Hexadecimal (1 chiffre hexadécimal représentant un nombre binaire de 4 chiffres binaires)

Une fois ce bloc validé, on comprend aisément qu’il est difficile de modifier les blocs précédent car :

  • Chaque bloc reprend le hash du bloc précédent
  • Une modification des transactions du bloc 1035 modifierait le hash du bloc 1035
  • Le contenu du bloc 1036 est alors modifié car ce bloc contient le Hash du bloc 1035
  • Le Hash du bloc 1036 serait alors modifié et ce dernier ne serait plus valide.

Pourquoi le Hash doit -il commencer par 19 fois zéro ?

Ce nombre n’est pas aléatoire, mais impose une difficulté de calcul. Lorsqu’il y a de nombreuses personnes sur le réseau, donc beaucoup de puissance de calcul (on parle de puissance en Hash par seconde, le nombre de résultat de fonction de Hashage que le réseau peut exécuter en 1 seconde), il faut augmenter la difficulté pour que la durée entre deux validations de blocs soit d’environ 10 minutes.

Lançons nous dans un petit calcul, il existe 2256 combinaisons possibles de hash sur l’algorithme SHA256, soit environ 1077 , il existe en tout 2180 combinaisons commençant par 19 zéros, la probabilité d’en trouver une est d’une chance sur 276 =75,557,863,725,914,323,419,136 . Le réseau actuel a une puissance d’environ 150 000 000 TH/s (soit environ 1,5 x 1020 calcul de Hash par seconde). En calculant le temps moyen pour trouver un hash répondant aux exigences, nous arrivons à environ 8 minutes.

Comment est décidée la complexité ?

L’un des avantages mis en avant par la cryptomonnaie est son caractère décentralisée. Mais face à des règles qui peuvent sembler aléatoires, nous sommes en droit de se demander comment sont décidées ces valeurs (19 zéros) ? Est-ce que le réseau est indépendant ou une instance doit pouvoir fixer des règles pour s’assurer que la blockchain soit intègre.

Il existe des règles qui permettent de fixer certains paramètres à la blockchain. Ainsi, tous les 2016 blocs, est calculée la complexité du réseau basée sur la durée de calcul des 2016 blocs précédents.

La complexité du Hash peut être diminuée ou augmentée selon le temps mis pour exécuter les blocs précédents, ayant un lien direct avec la puissance de calcul sur le réseau. A l’heure d’écriture de cet article, le hash de la blockchain doit commencer par 19 fois zéros.

Sources :

https://www.blockchain.com/btc/block/00000000000000000009ccca2455b98fb9631c8307658de01127eb9227b6cc25

https://en.bitcoin.it/wiki/Difficulty

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *