La blockchain est un sujet extrêmement intéressant et aussi très tendance actuellement. Mais savez-vous sur quoi repose cette technologie ? Je vous propose de creuser un peu la question. Dans cette 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.

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 faiblesses.

Voici d’ailleurs quelques exemples d’algorithmes de consensus populaires actuellement :

  • Proof-of-Work (PoW) dont nous allons parler dans cette 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) la sélection se fait sur d’autres critères : selon 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 aka 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, voici un article qui revient sur les 30 algorithmes de consensus les plus utilisés.

 

Utilisation du Proof-of-Work dans la blockchain

Dans la Blockchain, cet algorithme 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.

PoW permet donc de prouver les transactions facilement et rapidement.

Qu'est-ce que le consensus Proof of Work ?

Source : Cointelegraph

 

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 un explorateur comme celui-ci.

 

Comment cet 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.

Qu'est-ce que le consensus Proof of Work ?

Source : Cointelegraph

 

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.

Qu'est-ce que le consensus Proof of Work ?

Source : Cointelegraph

 

Dans quel contexte mettre en œuvre PoW ?

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 :

  • 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.

 

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.

<br />
using System;<br />
using System.Collections.Generic;<br />
using System.Diagnostics;<br />
using System.Text;<br />
using System.Security.Cryptography;</p>
<p>namespace ConsoleCryptoApp<br />
{<br />
    internal static class Program<br />
    {<br />
        public static void Main()<br />
        {<br />
            var block = &quot;Cellenza - Does It Better!&quot;;<br />
            var tick = 0;<br />
            var isFinish = false;<br />
            Stopwatch stopWatch = new Stopwatch();<br />
            stopWatch.Start();<br />
            while (!isFinish)<br />
            {<br />
                var compute = block + &quot; &quot; + tick++;<br />
                var sha512 = GenerateSha512String(compute);<br />
                Console.WriteLine(tick + &quot; - &quot; + compute + &quot;: &quot; + sha512);<br />
                if (sha512.StartsWith(&quot;00000&quot;))<br />
                {<br />
                    isFinish = true;<br />
                    stopWatch.Stop();<br />
                }<br />
            }<br />
            Console.WriteLine(tick);<br />
            Console.WriteLine(stopWatch.ElapsedMilliseconds.ToString());<br />
        }</p>
<p>        private static string GenerateSha512String(string inputString)<br />
        {<br />
            var sha512 = SHA512.Create();<br />
            var bytes = Encoding.UTF8.GetBytes(inputString);<br />
            var hash = sha512.ComputeHash(bytes);<br />
            return GetStringFromHash(hash);<br />
        }</p>
<p>        private static string GetStringFromHash(IEnumerable&lt;byte&gt; hash)<br />
        {<br />
            var result = new StringBuilder();<br />
            foreach (var t in hash)<br />
            {<br />
                result.Append(t.ToString(&quot;X2&quot;));<br />
            }<br />
            return result.ToString();<br />
        }<br />
    }<br />
}<br />

<br />
Cellenza - Does It Better! 0: 211601460C56320D2DC0725282CB9055829FB13C5F99528EA1C4FFA00A7417FBC48B4D5EDB671A6A10A25851161CC538846C91D44FD4912D87997D102EBEE287<br />
Cellenza - Does It Better! 1: E94DCA23722C7E9FE46F05D9E06CCFB879B1CC2E7DAC94F9F2B58506F12E4AFBFC70390FB012014DDD980F8D3F24EA620300B4E146A780916589B928EF40E888<br />
Cellenza - Does It Better! 2: A261BF66BDA2E3E2D46DCF7215BD37F45470B694FF974952AFAD1CD92FF3D2FBBD172364575C67428BB0E84EEB898E126B8B7DFAE4F4F5342513A0337CFFFBBA<br />
Cellenza - Does It Better! 3: 8BA6E8C4B26376952E2C1E8484376AB7F5E370D345A27EDD87A3950EE5CEE918F034B8FAD9CAEC2BB0C4D72CA89CE872D9A4404DCEE9A8969AB27C12B40CBB2C<br />
Cellenza - Does It Better! 4: A708F89568639D741715E3951601A0F04F539A253D20CEEB38B3EDCFDB19363772A96B42F0A13B651ECA6DF855C94AAF8CE9BE2FD53843855EF4A7D4EC37DE66<br />
Cellenza - Does It Better! 5: FDD7BABF8CB9D8AB03E34E3DAB8FC4252DADC4E0873E8F89AA7D3AA9E6B3BE15193A5FD8B7FB19E312C5398AD758D9A864E7ECAE8171695843385D0B6883E41C<br />
Cellenza - Does It Better! 6: 81E83FD11D098F7DEDFF44F4D9AEFA558AA92C1A3F4D7590FF81B4064A20783152B22554E999AE12AB68E608494024E30551E1D35092A656F67727805526DCF5<br />
Cellenza - Does It Better! 7: B9FA19637349E9B69245EF099AB8CDCD4FB6BD265A3BF86775D735DDE3BE354960C9F87C343920B3653DE5A9975B5FFE3FFB654423BF9822A70BA819D6E559A8<br />
Cellenza - Does It Better! 8: AE036CC6FA2AA7DBB820BD28DBE46350FAACC5C774FE60A3717F070200C5DD9812CF930F5E0888659DA46B9084E461420C066F70DD4BE114AEFA708D888E5374<br />
Cellenza - Does It Better! 9: 6813926BEA605EF35E357009E5991C6004E6B30B9226AAF50A6B5995A3F8C3F66029957AF2268E1DDF59F129C4E4CF4B165771125378B1667B87BEBD5A7CBA6C</p>
<p>...</p>
<p>Cellenza - Does It Better! 9765: 67456FD77760467AB605E441247D810994FE0B16BB5473624D189F08C47D447775CDFBCB480B9762EDF93271409DE8B856F8AA9617134C54073AF8F60D87A2E3<br />
Cellenza - Does It Better! 9766: 2B18DB12CB9559DCEBD4C0C0C20E1BF74D51E86630CBBD3603F500CE463E2E0F83DFAD56A2AA0D43A3A7DDA05033DE9F4658E2875218AE95CA41804F4EA2B1E8<br />
Cellenza - Does It Better! 9767: 00000A32CC2F8A0BBAC7DF5F551365A1F5BED7A14362244168CBAE200890E294849E23BBEAB57813C93873E1CA68B1CD92E9E5CB9049101E49AB13C72CE2B571</p>
<p>

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%.

 

51% attaque, de quoi parlons-nous ?

Une attaque à 51% ou une attaque majoritaire est un cas où un utilisateur, ou un groupe d’utilisateurs, contrôlent 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.