Blockchain – Qu’est-ce que le consensus Proof-of-Work ?

La blockchain est un sujet extrêmement intéressant et aussi très tendance actuellement. Mais sur quoi repose cette technologie ?
Je vous propose de creuser un peu la question. Dans cet article, je compte vous expliquer l’un des principes fondateur de la blockchain, le Proof-of-Work, qui permet de garantir l’exactitude des données.
Qu’est-ce que le Proof-of-Work ?
Proof-of-Work, que l’on peut traduire en français par “une preuve de travail”, est l’algorithme de consensus original dans un réseau Blockchain. Il est d’ailleurs à noter que c’est le premier des différents consensus à avoir été utilisé pour la création de cryptomonnaie, puisque dès 2009, Satoshi Nakamoto y a recours pour développer le Bitcoin.
Définition d’un consensus
A présent, il faut définir ce qu’est un consensus. En informatique, un algorithme de consensus est un processus utilisé pour assurer la fiabilité des données dans un réseau impliquant plusieurs nœuds non fiables. Derrière chaque grande cryptomonnaie, il y a un algorithme de consensus. Aucun algorithme de consensus n’est parfait, mais chacun possède ses forces et ses faiblesses.
Voici d’ailleurs quelques exemples d’algorithmes de consensus populaires :
- Proof-of-Work (PoW) : dont nous allons parler dans cet article.
- Proof-of-Stake (PoS) : avec ce consensus, la sélection du mineur est faite aléatoirement tout en étant pondéré par la quantité de cryptomonnaie à disposition de ce mineur.
- Delegated Proof-of-Stake (DPoS) : dans lequel la sélection se fait sur d’autres critères tel que l’utilisation de la blockchain, l’ancienneté, la quantité de monnaie possédée, …
- Proof-of-Authority (PoA) : ici, on définit à l’avance quels sont les mineurs qui feront autorité, on perd alors le principe de confiance, ce qui oblige à affecter les autorités à des parties avec un intérêt commun minimal.
- Proof-of-Capacity (aussi appelé Proof of Space) : la sélection du mineur est faite selon la capacité de stockage de ce dernier.
- Etc.
Si vous souhaitez en savoir plus sur les consensus et leurs fonctionnements, vous pouvez retrouver dans cet article les 30 algorithmes de consensus les plus utilisés.
Utilisation du Proof-of-Work dans la blockchain
Pour en savoir plus sur la blockchain, notre article “Garantir transparence et traçabilité grâce à la blockchain” présente les domaines d’applications et l’intérêt de l’utiliser.
Dans la Blockchain, l’algorithme Proof-of-Work est utilisé pour confirmer les transactions et produire de nouveaux blocs dans la chaîne. Avec le PoW, les mineurs sont en concurrence pour effectuer des transactions sur le réseau et par la suite être récompensés.
Dans un réseau de blockchain, chaque utilisateur envoie des jetons numériques. Un registre décentralisé regroupe toutes les transactions en blocs pour créer un historique. Cependant, il faut prendre soin de confirmer chaque transaction et d’organiser les blocs. Cette responsabilité de confirmation porte sur des nœuds spéciaux que l’on appelle les mineurs. Le processus est quant à lui appelé minage.
Le PoW permet donc de prouver les transactions facilement et rapidement.

Un peu plus d’explications sur les algorithmes ?
Les principes mathématiques dont nous parlons jusqu’à présent, sont des problèmes ou équations complexes qui nécessitent une importante puissance de calcul pour être résolus.
Voici d’ailleurs quelques exemples :
- Hash function (Fonction de hash), ou comment trouver l’entrée tout en connaissant la sortie, f(x) = y
- Integer Factorization (Factorisation entière), en d’autres termes, comment présenter un nombre comme une multiplication de deux autres nombres.
- Guided tour puzzle protocol : si le serveur soupçonne une attaque DoS (Denial of Service attack, une attaque par déni de service). Il nécessite un calcul des fonctions de hachage, pour certains nœuds dans un ordre défini. Dans ce cas, il s’agit d’un problème « comment trouver une chaîne de valeurs de fonction de hachage ? ».
Au fur et à mesure que le réseau de la Blockchain se développe, il fait face à de plus en plus de difficultés. Les algorithmes nécessitent toujours plus de puissance de calcul. Cette complexité est d’ailleurs un problème sensible de la blockchain.
Le problème mathématique donné ne doit pas être trop complexe. En effet, plus il l’est et plus la génération de nouveaux blocs prend du temps, les transactions sont alors bloquées sans exécution et le résultat est lui aussi bloqué. D’un autre côté, si le problème est trop simple, il est vulnérable aux attaques DoS ou au spam par exemple.
Pour finir, la solution doit être facilement vérifiable. Dans le cas contraire, tous les nœuds ne sont pas capables d’analyser si les calculs sont corrects. Une des caractéristiques les plus importantes de la Blockchain est la transparence. En effet, la blockchain peut être consultée par tout le monde. Vous pouvez par exemple, consulter la blockchain du Bitcoin, c’est-à-dire les registres de toutes les transactions en Bitcoin, via l’explorateur Blockchain.com.
Comment un algorithme est-il implémenté dans la Blockchain ?
Les mineurs résolvent donc un problème sous forme de puzzle. Une fois le problème résolu, ils forment le nouveau bloc et confirment les transactions.
La complexité d’un puzzle dépend du nombre d’utilisateurs, de la puissance actuelle et de la charge du réseau. Le hachage de chaque bloc contient le hachage du bloc précédent, ce qui augmente la sécurité et empêche toute violation de bloc.

Si un mineur parvient à résoudre le puzzle, alors le nouveau bloc est formé. Les transactions sont placées dans ce nouveau bloc et sont considérées comme confirmées.

Dans quel contexte mettre en œuvre PoW ?
L’algorithme de consensus Proof-of-Work est actuellement utilisé par plusieurs cryptocurrencies, on parle aussi d’ICO.
L’application la plus célèbre de PoW est sans conteste Bitcoin. C’est Bitcoin qui a jeté les bases de ce type de consensus. Cet algorithme permet de changer la complexité d’un puzzle en fonction de la puissance totale du réseau. Le temps moyen de formation d’un nouveau bloc est de 10 minutes.
Un autre grand projet de cryptomonnaie avec PoW est l’Ethereum. Étant donné que près de trois projets sur quatre sont mis en œuvre sur la plateforme Ethereum, on peut dire que la majorité des applications Blockchain utilisent le modèle de consensus PoW.
Quelques exemples d’ICO qui utilisent le PoW :
- Litecoin
- Bitcoin Cash
- Bitcoin Gold
- Verge
- Monero Original
- Lightning Bitcoin
- Litecoin Cash
- Etc.
Pourquoi utiliser un algorithme de consensus PoW en premier lieu ?
Les principaux avantages de PoW sont les suivants :
- La défense contre les attaques DoS et le faible impact des enjeux sur les possibilités minières.
- Le programme de travail impose des limites aux actions dans le réseau. Ils ont besoin de beaucoup d’efforts pour être exécutés. Une attaque efficace nécessite beaucoup de puissance de calcul et beaucoup de temps pour exécuter les calculs. Par conséquent, l’attaque est possible mais peu utile car les coûts sont trop élevés.
- Possibilités d’extraction, peu importe la somme d’argent que vous avez dans votre portefeuille. Ce qui compte, c’est d’avoir un grand pouvoir de calcul pour résoudre les énigmes et former de nouveaux blocs. Ainsi, les détenteurs d’énormes sommes ne sont pas chargés de prendre des décisions pour l’ensemble du réseau.
Exemple de mise en œuvre de Proof-of-Work
Dans cette partie, je vais vous exposer un algorithme très simple mais qui va nous permettre de comprendre ce que font les mineurs.
Imaginons que nous avons un bloc avec écrit “ Cellenza – Does It Better! ” et que nous voulons le valider dans la blockchain avec PoW.
Je vais avoir besoin de :
- Mon block
- var block = “Cellenza – Does It Better!”
- Une varibale tick
- La variable tick est la seule variable qu’un mineur peut modifier et qui permet d’incrémenter son nombre pour trouver la solution au problème mathématique.
- De connaître la difficulté du problème
- Pour l’exemple, je vais vouloir que le retour de ma formule mathématique commence par “00000”
- La formule mathématique.
using System; using System.Collections.Generic; using System.Diagnostics; using System.Text; using System.Security.Cryptography; namespace ConsoleCryptoApp { internal static class Program { public static void Main() { var block = "Cellenza - Does It Better!"; var tick = 0; var isFinish = false; Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); while (!isFinish) { var compute = block + " " + tick++; var sha512 = GenerateSha512String(compute); Console.WriteLine(tick + " - " + compute + ": " + sha512); if (sha512.StartsWith("00000")) { isFinish = true; stopWatch.Stop(); } } Console.WriteLine(tick); Console.WriteLine(stopWatch.ElapsedMilliseconds.ToString()); } private static string GenerateSha512String(string inputString) { var sha512 = SHA512.Create(); var bytes = Encoding.UTF8.GetBytes(inputString); var hash = sha512.ComputeHash(bytes); return GetStringFromHash(hash); } private static string GetStringFromHash(IEnumerable<byte> hash) { var result = new StringBuilder(); foreach (var t in hash) { result.Append(t.ToString("X2")); } return result.ToString(); } } }
Cellenza - Does It Better! 0: 211601460C56320D2DC0725282CB9055829FB13C5F99528EA1C4FFA00A7417FBC48B4D5EDB671A6A10A25851161CC538846C91D44FD4912D87997D102EBEE287 Cellenza - Does It Better! 1: E94DCA23722C7E9FE46F05D9E06CCFB879B1CC2E7DAC94F9F2B58506F12E4AFBFC70390FB012014DDD980F8D3F24EA620300B4E146A780916589B928EF40E888 Cellenza - Does It Better! 2: A261BF66BDA2E3E2D46DCF7215BD37F45470B694FF974952AFAD1CD92FF3D2FBBD172364575C67428BB0E84EEB898E126B8B7DFAE4F4F5342513A0337CFFFBBA Cellenza - Does It Better! 3: 8BA6E8C4B26376952E2C1E8484376AB7F5E370D345A27EDD87A3950EE5CEE918F034B8FAD9CAEC2BB0C4D72CA89CE872D9A4404DCEE9A8969AB27C12B40CBB2C Cellenza - Does It Better! 4: A708F89568639D741715E3951601A0F04F539A253D20CEEB38B3EDCFDB19363772A96B42F0A13B651ECA6DF855C94AAF8CE9BE2FD53843855EF4A7D4EC37DE66 Cellenza - Does It Better! 5: FDD7BABF8CB9D8AB03E34E3DAB8FC4252DADC4E0873E8F89AA7D3AA9E6B3BE15193A5FD8B7FB19E312C5398AD758D9A864E7ECAE8171695843385D0B6883E41C Cellenza - Does It Better! 6: 81E83FD11D098F7DEDFF44F4D9AEFA558AA92C1A3F4D7590FF81B4064A20783152B22554E999AE12AB68E608494024E30551E1D35092A656F67727805526DCF5 Cellenza - Does It Better! 7: B9FA19637349E9B69245EF099AB8CDCD4FB6BD265A3BF86775D735DDE3BE354960C9F87C343920B3653DE5A9975B5FFE3FFB654423BF9822A70BA819D6E559A8 Cellenza - Does It Better! 8: AE036CC6FA2AA7DBB820BD28DBE46350FAACC5C774FE60A3717F070200C5DD9812CF930F5E0888659DA46B9084E461420C066F70DD4BE114AEFA708D888E5374 Cellenza - Does It Better! 9: 6813926BEA605EF35E357009E5991C6004E6B30B9226AAF50A6B5995A3F8C3F66029957AF2268E1DDF59F129C4E4CF4B165771125378B1667B87BEBD5A7CBA6C ... Cellenza - Does It Better! 9765: 67456FD77760467AB605E441247D810994FE0B16BB5473624D189F08C47D447775CDFBCB480B9762EDF93271409DE8B856F8AA9617134C54073AF8F60D87A2E3 Cellenza - Does It Better! 9766: 2B18DB12CB9559DCEBD4C0C0C20E1BF74D51E86630CBBD3603F500CE463E2E0F83DFAD56A2AA0D43A3A7DDA05033DE9F4658E2875218AE95CA41804F4EA2B1E8 Cellenza - Does It Better! 9767: 00000A32CC2F8A0BBAC7DF5F551365A1F5BED7A14362244168CBAE200890E294849E23BBEAB57813C93873E1CA68B1CD92E9E5CB9049101E49AB13C72CE2B571
Et voilà, après 9768 tests (un peu moins d’une seconde), l’énigme est résolue. J’ai résolu le bloc, j’envoie ma découverte au système de blockchain qui en échange, me rémunérera pour avoir pris du temps et de l’énergie physique.
Pour information, si j’avais décidé d’augmenter la complexité du problème en trouvant au moins 000000, il m’aurait fallu pas moins de 10 minutes pour exécuter 26 960 031 tests et trouver la bonne solution.
Des failles dans l’algorithme de consensus de PoW ?
Les principaux inconvénients sont les attaques de puissance de calcul très connus sous le nom de “L’attaque des 51%”.
“L’attaque des 51%”, de quoi parlons-nous ?
Une attaque à 51% ou une attaque majoritaire est un cas où un utilisateur, ou un groupe d’utilisateurs, contrôle la majorité de la puissance minière.
Les attaquants disposent de suffisamment de puissance pour contrôler la plupart des événements sur le réseau.
Ils peuvent monopoliser et générer de nouveaux blocs et recevoir des récompenses. Ils sont en mesure d’empêcher les autres mineurs de remplir des blocs. Ils peuvent inverser les transactions.
Une attaque à 51% n’est pas une option rentable. Cela nécessite une énorme quantité de pouvoir minier. Et une fois qu’il est exposé au public, le réseau est considéré comme compromis, ce qui entraîne la sortie des utilisateurs. Cela va inévitablement faire baisser le prix de la cryptomonnaie et par conséquent, les fonds perdent leur valeur.