(Dans cet article, qui est un extrait de la formation Crypto-Artiste sur laquelle je travaille depuis quelques mois, j’ai essayé d’expliquer simplement le concept de blockchain. C’est un sujet assez technique, mais j’ai tout fait pour le rendre compréhensible et accessible. N’hésitez pas à me dire ce que vous en pensez dans les commentaires, et surtout m’indiquer s’il y a des choses qui ne sont pas claires.)
Une blockchain peut être assimilée à un parchemin enroulé sur deux rouleaux de bois, comme celui représenté sur l’image ci-dessous :
Sur ce parchemin, un scribe écrit toutes les transactions qui ont lieu entre deux personnes. Ainsi, si Julie m’envoie 10 euros, le scribe inscrit sur le parchemin : Nicolas a reçu 10 € de la part de Julie. Si ensuite j'envoie 3 € à Emilie, il écrit juste en dessous : Emilie a reçu 3 € de la part de Nicolas. Toutes les transactions sont ainsi enregistrées, dans l’ordre chronologique de leur exécution.
Au fur et à mesure qu’il écrit, le scribe enroule le parchemin autour d’un rouleau de bois. Ce rouleau grossit petit à petit, mais n’est jamais interrompu, ce qui fait qu’à tout moment, vous pouvez recréer l’intégralité de l’historique de la blockchain, depuis sa création.
Si quelqu’un voulait changer l’ordre d’une transaction, la modifier, ou la supprimer, il devrait couper le papier, et même s’il essayait ensuite de le réparer, ça se verrait facilement. Ainsi, ce qui est écrit sur le parchemin ne peut plus être effacé ni modifié. Tant que le parchemin existe et qu’il est en bon état, on est certain que l’historique est vrai. S’il n’est pas en bon état, on sait qu’il a été corrompu et que l'on ne doit plus s’y fier.
En réalité, une blockchain, ce n’est pas un scribe qui écrit dans un parchemin, mais des centaines de scribes, aux quatre coins du monde, qui écrivent dans des centaines de parchemins. Quand un scribe inscrit une opération sur son parchemin, il informe les autres scribes qui inscrivent, eux aussi, la même opération sur leur propre parchemin.
Ainsi, à tout moment, il existe plusieurs centaines de ces parchemins, tous identiques. Si un scribe se fait voler son parchemin, ou s’aperçoit qu’il a été modifié, il lui suffit de contacter les autres scribes qui lui renvoient un nouveau parchemin.
Aujourd’hui, dans le monde des blockchains, nous avons remplacé les scribes par des ordinateurs, mais vous allez voir que le fonctionnement reste le même.
Enregistrement, bloc et chaine : le parchemin moderne
Dans le monde de la blockchain, nous n’utilisons plus un parchemin, mais une chaine de blocs — d’où le nom « blockchain » qui signifie en anglais « chaine de blocs ».
Chaque bloc peut être comparé à un cube Lego. Vous prenez un Lego, vous le posez par terre, vous en prenez un second, vous l’accrochez au précédent, vous en prenez un troisième, vous le mettez par-dessus, et vous obtenez ainsi une chaine de blocs — la fameuse blockchain.
Lorsque vous réalisez une opération — par exemple, vous envoyez de l’argent à un ami —, cette opération doit être inscrite dans la blockchain. On dit qu’on crée un enregistrement.
Chaque enregistrement n’est pas directement inscrit dans la blockchain. De nombreux enregistrements sont regroupés et, tous ensembles, constituent un bloc. C’est ce bloc, contenant de nombreux enregistrements, qui est ajouté à la blockchain.
Ainsi :
Un enregistrement peut être n’importe quelle information. Une transaction, par exemple.
Un bloc est un ensemble d’enregistrements.
Une blockchain est un ensemble de blocs accrochés les uns aux autres.
L’infographie suivante, créée par Maryanne Murray et publiée dans l’article Blockchain explained illustre parfaitement ce concept :
Réseau et nœud de réseau : le scribe remplacé par l’ordinateur
Dans le monde des scribes, lorsque vous effectuez une transaction, vous contactez un scribe pour lui dire : « Hé, j’ai envoyé 10 € à Julie, peux-tu l’enregistrer dans ton parchemin ? »
Le scribe contacte alors Julie, et lui dit : « Tu es bien Julie ?
— Oui
— Ok, Nicolas m’a dit qu’il t’avait envoyé 10 €, est-ce exact ? »
Si Julie lui répond « Oui », le scribe inscrit la transaction sur son parchemin, puis contacte les autres scribes pour qu’ils fassent la même chose sur leurs propres parchemins.
Dans le monde des blockchains, il n’y a plus de scribes, mais des « nœuds ». Chaque nœud est en réalité un ordinateur et ces ordinateurs sont interconnectés les uns avec les autres, pas physiquement, mais via Internet. Tous ensembles, ils forment ce qu’on appelle un réseau, qui ressemble à ceci :
(Chaque point bleu représente un nœud, c'est-à-dire un ordinateur, et chaque ligne représente une connexion. C’est comme si vous aviez des dizaines de scribes qui pouvaient discuter entre eux.)
À l’époque, chaque scribe avait une copie du parchemin. Aujourd’hui, chaque nœud stocke une copie complète de la blockchain sur son disque dur.
Lorsque vous effectuez une transaction sur une blockchain, vous contactez un nœud du réseau, qui vérifie votre transaction (grâce à la cryptographie, comme nous l’avons vu dans les leçons précédentes). Une fois ceci fait, il l’enregistre dans la copie de la blockchain qu’il stocke sur son disque dur, puis informe les autres nœuds du réseau. Ces différents nœuds enregistrent à leur tour la nouvelle transaction dans la copie de la blockchain qu’ils stockent sur leurs disques durs respectifs.
Centralisation et décentralisation : quelle différence ?
Contrairement aux stockages classiques, une blockchain est décentralisée. Que cela signifie-t-il ?
Lorsqu’un réseau est centralisé, tous les nœuds dépendent d’une entité centrale qui gère les enregistrements. Pour décrire ce genre de réseau, on parle de réseau en étoile.
Lorsqu’un réseau est décentralisé, les nœuds sont interconnectés les uns aux autres et ne dépendent pas d’un nœud central. Chaque nœud gère et stocke les enregistrements. On parle alors de réseau maillé — une architecture qui ressemble à un filet de pêche.
(À gauche, un réseau centralisé ; à droite, un réseau décentralisé.)
Dans le cas d’une base de données centralisée, le nœud central est le point faible du réseau. S'il est détruit ou déconnecté du réseau, le réseau tout entier cesse de fonctionner. Si les données sont perdues ou corrompues, l’ensemble du réseau est affecté.
Dans le cas d’une base de données décentralisée, si un nœud est indisponible, perd ses données, est attaqué ou corrompu, le reste du réseau continue à fonctionner comme si de rien n’était et les données ne sont pas touchées.
C’est le gros avantage des blockchains. Chaque blockchain — car il en existe de nombreuses, par exemple Tezos, Bitcoin, Ethereum, etc. — est une base de données décentralisée. Cette décentralisation les rend plus robustes aux attaques, aux pannes, aux indisponibilités, mais également aux falsifications de données et à la censure.
Imaginez que notre réseau de scribe soit centralisé et que tous les écrits émanent du chef des scribes. Pour enregistrer une transaction, il faut passer par le chef des scribes, les autres ne font que recopier ce que le chef à écrit. Que se passe-t-il si le chef des scribes ne vous aime pas et ne veut pas enregistrer votre transaction ? Ou s’il décide d’effacer une ou deux transactions, parce qu’il en a envie ? Ou si le roi s’assied à côté de lui pour surveiller ce qu’il écrit ? Ou s’il meurt ?
Avec un réseau décentralisé, on limite les risques, car il faudrait contrôler tous les nœuds simultanément pour espérer censurer certaines données.
Enregistrement et validation d’une transaction
Nous l’avons vu plus haut, lorsque vous effectuez une transaction, vous contactez un scribe, qui :
Valide la transaction
L’inscrit sur son parchemin
Informe les autres scribes de la modification
Mais, ces trois étapes ne sont pas suffisantes. En plus d’informer les autres scribes, il doit s’assurer qu’ils aient bien reçu son message et inscrit la transaction dans leurs parchemins, avant de valider définitivement votre opération.
En effet, si un scribe enregistre une transaction sur son parchemin, mais que les autres ne le font pas, on se retrouve avec des versions différentes du parchemin, et le système ne fonctionne plus. Il faut donc qu’il attende la confirmation des autres scribes.
Ce n’est que lorsque votre scribe reçoit un message de confirmation des autres scribes — quelque chose comme : « Ok, j’ai inscrit la transaction sur mon parchemin, nous avons à nouveau des parchemins identiques » —, qu’il peut valider définitivement votre transaction.
S’il ne reçoit pas de confirmation — le messager s’est peut-être perdu en route, ou l’autre scribe fait la sieste, va savoir —, il jette son parchemin et reprend une version identique à celle que possèdent les autres scribes.
Lorsque vous réalisez une transaction sur une blockchain, c’est le même principe :
Vous contactez un nœud pour l’informer d’une transaction : « Je veux envoyer 10 € à Julie »
Ce nœud vérifie la validité de cette transaction
Il informe les autres nœuds du réseau de cette transaction
Il attend qu’un minimum de nœuds lui confirment avoir reçu et inscrit la transaction
S’il ne reçoit pas de confirmation, il vous informe que votre transaction a échoué
S’il reçoit les confirmations, il valide définitivement votre transaction.
Ainsi, lorsque vous effectuez une opération, elle n’est pas réalisée instantanément. Il vous faut attendre quelques instants (ce délai est variable selon les blockchains) que le nœud que vous avez contacté valide définitivement votre opération.
Si elle est validée, vous savez qu’elle est inscrite définitivement dans la blockchain et ne pourra plus jamais être modifiée. Si elle n’est pas validée, vous devrez simplement relancer une nouvelle transaction. C’est un peu comme dans un magasin, lorsqu’un paiement par CB ne passe pas, la vendeuse vous montre un ticket indiquant que la transaction a échoué, et vous demande d’en refaire une seconde.
Ce système permet de s’assurer que tous les nœuds du réseau ont la même version de la blockchain, qui contient exactement les mêmes enregistrements, dans le même ordre, entre les mêmes individus, etc.
Corruption et falsification des données
Nous l’avons dit tout à l’heure, lorsqu’une transaction est inscrite sur le parchemin de notre scribe, la moindre modification ou suppression serait visible. Si notre scribe s’aperçoit que son parchemin est déchiré ou raturé, il le considère comme corrompu, le jette immédiatement, puis demande aux autres scribes de lui envoyer un nouveau parchemin non compromis.
Voyons maintenant comment cela se passe sur une blockchain. Chaque nœud — un scribe — doit être certain que personne n’ait modifié la moindre virgule dans les millions et millions d’informations que contient la blockchain stockée sur son disque dur — le parchemin. Comment est-ce possible ?
Les fonctions de hachage
Une fonction de hachage est une fonction mathématique qui, à partir d’une certaine donnée, calcule une empreinte numérique servant à identifier la donnée initiale. Dit comme cela, ce n’est pas super clair, mais en réalité, c’est assez simple :
Quand je donne un mot à une fonction de hachage, elle me renvoie une suite de chiffres et de lettres. Ainsi, si je lui donne le mot « Bateau », elle me renvoie le code suivant : e77890d7d2a95b50033a5fcac6274d16
Si je lui donne 1000 fois le même mot, elle me répondra 1000 fois le même résultat. Par contre, si je lui donne un mot différent, sa réponse sera différente. Ainsi, le mot « Livre » me renverra le code suivant : 92d4ee8cf1f69325d45473102193b900. Ce n’est pas le même que celui obtenu avec le mot « Bateau ».
Dans ces exemples, j’ai utilisé un simple mot en entrée, mais c’est la même chose avec des entrées plus complexes. Si, par exemple, je donne à ma fonction l’intégralité des textes du livre « Vingt mille lieues sous les mers », elle me renvoie le hachage suivant : 730da858e0c7be81d27d8cOffacd6b03
Si maintenant je modifie légèrement ce texte, et que je remplace le 10ᵉ caractère de la 1000ᵉ ligne par le caractère « * », j’obtiens le hachage suivant : 4e9cad9bb7b0db7b37c7364ee39ab8c4
Ainsi, si je change un seul caractère sur les millions que contient cet ouvrage, le résultat obtenu est différent.
Hachage et blockchain
Sur une blockchain, ce sont ces fonctions de hachage qui permettent aux nœuds de s’assurer que les données qu’ils stockent n’ont pas été compromises.
Chaque bloc, au moment d’être enregistré, passe par une fonction de hachage, qui génère un code unique correspondant au contenu de ce bloc — à la virgule près. Le contenu de chaque bloc est ainsi signé. Il suffit de repasser le bloc à la même fonction de hachage pour s’assurer qu’il n’a pas été compromis. Si, au second passage, le code généré n’est pas strictement le même, c’est que le bloc a été compromis. S’il est identique, on est tranquille.
Mais ça va plus loin. Chaque bloc contient également le code de hachage du bloc précédent, ce qui permet deux choses : de s’assurer que l’ordre des blocs n’a pas été modifié, et de compliquer la tâche de quiconque voudrait modifier un bloc. En effet, pour modifier ne serait-ce qu’une virgule d’un enregistrement, il faut qu’un pirate modifie la donnée, et donc le bloc qui la contient. Pour que ça passe inaperçu, il lui faut ensuite générer une nouvelle signature pour ce bloc, mais également pour tous les blocs qui le suivent, car je vous le rappelle, chaque bloc contient la signature du bloc précédent. La moindre modification change la signature, et vous oblige à modifier tous les autres blocs, pour rétablir la concordance des signatures qui se succèdent.
Il faudrait une puissance de calcul phénoménale pour être capable de faire cette modification, sans compter qu’il faudrait le faire simultanément sur tous les nœuds du réseau. En clair, c’est impossible, et c’est ce qui permet à une blockchain d’être infalsifiable. Ce qui est enregistré dans une blockchain est enregistré définitivement, vous pouvez en être certain.
Confiance et minage
Une blockchain est un réseau ouvert. N’importe qui peut devenir un nœud du réseau, et ceci pose un problème de confiance. S’il s’agissait d’un réseau fermé ou contrôlé, il suffirait, par exemple, de limiter aux seuls employés d’une entreprise la possibilité d’opérer un nœud. La confiance serait ainsi assez facile à établir : on peut considérer que tous les employés de l’entreprise ont intérêt à qu’elle fonctionne. Mais, sur un réseau ouvert, comment savoir si tel ou tel nœud est digne de confiance ?
Pour remédier à ce problème, on demande à chaque nœud de prouver sa bonne foi et son implication dans le réseau avant de pouvoir écrire des informations dans la blockchain, c’est-à-dire enregistrer des blocs. Comment ? Actuellement, deux mécanismes sont utilisés : la preuve de travail et la preuve d’enjeu.
Preuve de travail ou minage
Lorsqu’une blockchain s’appuie sur la preuve de travail pour vérifier l’intégrité des nœuds du réseau, on demande à chaque nœud de résoudre une équation complexe avant de pouvoir ajouter un bloc à la blockchain.
C’est ce qu’on appelle le minage. Les mineurs de Bitcoin sont en réalité des ordinateurs qui travaillent jour et nuit pour résoudre des équations mathématiques complexes. Plus ces ordinateurs sont puissants, plus ils auront de chance d’ajouter de nouveaux blocs à la blockchain.
Pour devenir mineur, il faut donc un certain investissement : acheter les machines, payer l’électricité qu’ils consomment, le temps et les compétences pour installer et maintenir le logiciel qui gère la blockchain, etc. C’est cet investissement qui permet de prouver qu’une personne est impliquée dans le réseau.
Par ce mécanisme, on s’assure également qu’il est très difficile pour un individu ou une entité quelconque de déployer des milliers de nœuds et de prendre le contrôle de la blockchain.
En échange de leur investissement, les mineurs touchent une rémunération à chaque nouveau bloc qu’ils enregistrent dans la blockchain. Cette rémunération est automatique, gérée par la blockchain, et payée en cryptomonnaie (les mineurs de la blockchain Bitcoin reçoivent des Bitcoins à chaque bloc créé). Cette rémunération est importante. Sans elle, personne ne voudrait devenir mineur, et sans un nombre suffisant de nœuds, la blockchain perdrait ses avantages : pas de décentralisation, pas de redondance des données, etc.
L’effet pervers de cette méthode par preuve de travail, c’est la pollution environnementale générée. Les mineurs consomment énormément d’énergie. Une étude de l’université de Cambridge publié début 2021 estime que la consommation électrique du Bitcoin surpasse celle de l’Argentine, des Pays-Bas ou des Emirats Arabes Unis.
Preuve d’enjeu
La preuve d’enjeu est un autre mécanisme permettant de vérifier l’intégrité des nœuds du réseau. Pour vérifier l’implication d’un nœud dans le réseau, on ne lui demande pas de fournir de la puissance de calcul, mais de l’argent.
Pour être intégré au réseau, un nœud doit disposer d’un montant minimum d’argent. Et, une fois qu’il fait partie du réseau, plus il aura d’argent, plus il aura de chances de créer de nouveaux blocs — et de toucher une rémunération pour ce service.
Avec une preuve d’enjeu, c’est un investissement financier, et non de la puissance de calcul, qui prouve l’engagement d’un nœud dans le réseau. L’avantage de cette méthode, c’est qu’elle est bien moins polluante. Un nœud n’a pas besoin d’être extrêmement puissant, un simple ordinateur est suffisant, et une blockchain comme Tezos, qui s’appuie sur la preuve d’enjeu, ne consomme pas plus d’énergie qu’un site comme Twitter par exemple.
Je me posais pas mal de questions depuis bien 3. Aujourd'hui un grand nombre sont résolues pour moi. J’attends la suite avec impatience.
Etant habitué de la blockchain depuis presque 3 ans à présent, j'aurais vraiment aimé lire cet article avant mes débuts, cela résume très très bien la technologie : clair, précis et très pédagogue.
J'aime beaucoup l'exemple avec le parchemin, c'est plus concret.
Un article comme celui-ci aidera la communauté crypto à se démocratiser et à abaisser la peur et la méfiance de ceux qui ne connaissent pas réellement la blockchain et qui la considère comme une "arnaque". On me l'a dit plusieurs fois lors de discussions avec des proches.
Il ne me reste plus qu'à te souhaiter bon courage pour la fin de l'écriture de ta formation que j'ai déjà hâte de lire !