Comment fonctionne la blockchain
Elle est derrière toutes les cryptomonnaies, mais elle permet bien plus que de simples échanges. Element de base de la décentralisation, pour certains nouvelle version voire aboutissement de l’Internet pour d’autres, il s’agit de la Blockchain. Mais comment fonctionne t’elle ?
Une blockchain est un stockage de données distribué et partagée entre les nœuds d’un réseau informatique garantissant l’authenticité et l’irréversabilité des données enregistrées. Elle sert dès lors d’autorité et permet de se passer de tiers de confiance.
La particularité d’une blockchain (pour chaîne de blocs) est la façon dont les données sont structurées. Elle collecte des informations en groupes, appelés blocs. Les blocs ont certaines capacités de stockage et, une fois remplis, sont fermés et liés au bloc précédent, formant ainsi une chaîne de données. Un nouveau bloc est ensuite ajouté, etc, etc. La chronologie ainsi créée est irréversible puisque la blockchain va valider et authentifier chaque nouveau bloc depuis le bloc précédent, puis en partager une copie de manière décentralisée et répliquée selon une méthode qui nous allons voir.
Gravé dans le marbre numérique
L’objectif de la blockchain est de permettre l’enregistrement d’informations mais ni leur modification, ni leur suppression. Ainsi, une blockchain n’est ni plus ni moins qu’une base de registres immuables.
Voyons comment fonctionne l’ajout d’une nouvelle information telle que par exemple une transaction dans le cadre d’une cryptomonnaie dans une blockchain. Nous utiliserons la blockchain du Bitcoin pour cet exemple, qui est la plus ancienne blockchain encore active. Les blocs de cette blockchain se composent d’environ 1 Mo de données chacun. Au moment de la rédaction de cet article, elle compte environ 525 000 blocs, ce qui signifie qu’environ 525 000 Mo soit 525 Go au total ont été stockés dans cette blockchain.
Notez que chaque blockchain peut implémenter ses propres variations, la blockchain Ethereum possède par exemple des capacités plus avancées nommées Smart Contracts qui sortent du cadre de cet article.
Les données de transaction
Sur la blockchain du Bitcoin, chaque bloc enregistre les dernières transactions effectuées, et rien de plus. C’est exactement comme si nous avions un simple fichier texte décrivant quelles transactions ont eu lieu et le solde des comptes qui en résulte.
Nous avons un document 1 qui décrit alors chronologiquement les premières transactions qui ont eu lieu jusqu’à 1 Mo de données enregistrées, après quoi les transactions suivantes sont inscrites dans un document 2 jusqu’à un autre Mo, et ainsi de suite. Ces documents sont les blocs de données.
La signature et le lien
Chaque bloc est ensuite signé, sa signature étant la représentation des données qu’il contient et donc dépendantes de celles-ci. Chaque changement dans les données impliquera une nouvelle signature totalement différente de la précédente.
Reste ensuite à lier les blocs : cela se fait en ajoutant la signature du bloc 1 au bloc 2, ou du bloc précédent au bloc suivant si vous préférez. Ils sont ainsi liés, et la signature d’un bloc est validée et authentifiée par le bloc suivant. Ainsi, lorsqu’on ajoute un bloc, cela donne :
Et on continue ainsi de suite à chaque fois qu’un nouveau bloc est créé :
Imaginez maintenant que les données du bloc 1 soient modifiées. Par exemple, la transaction entre Nicolas et Marie n’est plus de 20 Bitcoins mais de 100. Les données du bloc 1 sont désormais différente, ce qui signifie que ce bloc génère également une nouvelle signature, comme nous allons le voir plus loin. La signature qui correspond à ce nouvel ensemble de données n’est plus X32 :
La signature 8HO ne correspond pas à la signature précédemment ajoutée au bloc 2. Les blocs 1 et 2 sont donc considérés comme n’étant plus chaînés l’un à l’autre. Cela indique aux autres utilisateurs de cette blockchain que certaines données du bloc 1 ont été modifiées, et comme cela est contraire à la règle d’immuabilité, ils rejettent ce changement en conservant à leur enregistrement précédent de la blockchain où tous les blocs sont toujours chaînés (l’enregistrement où Nicolas a envoyé 20 Bitcoins à Marie).
La seule façon pour qu’une altération puisse rester non détectée est que tous les blocs restent chaînés entre eux. Cela signifie que pour que la modification ne soit pas détectée, la nouvelle signature du bloc 1 doit remplacer l’ancienne dans les données du bloc 2. Mais si les données du bloc 2 changent, le bloc 2 aura également une signature différente, ce qui reportera le problème sur le bloc 3, et ainsi de suite.
Les blocs d’une blockchain sont publics afin de pouvoir être constamment validés par tous ceux qui le souhaitent. Ainsi, une tentative de modification, pour passer inaperçue, demande de modifier toutes les signatures des blocs suivants de la chaîne, et ce dans l’ensemble du réseau, ce qui est considéré comme presque impossible. Afin de comprendre pourquoi, voyons comment les signatures sont créées.
Comment les signatures sont créées
Evidemment, les signatures ne sont pas aussi simples que X32 ou H8O. Il s’agit en fait d’une chaîne de 64 caractères créée par hashage. Une fonction de hash est une méthode complexe qui prend n’importe quelle donnée en entrée, et la transforme en une chaîne de longueur fixe en sortie. Un de ses pré-requis est qu’un petit changement en entrée doit produire un résultat totalement différent en sortie.
Par exemple, selon la méthode de hash md5 (sur 32 caractères) : le résultat du hash de « Bonjour » est ebc58ab2cb4848d04ec23d83f7ddf985, mais celle de « bonjour » en minuscules est f02368945726d5fc2a14eb576f7276c0.
La blockchain Bitcoin utilise la méthode nommée SHA-256, avec cependant une importance différence : tous les résultat de la fonction de hash ne sont pas éligibles pour être utilisés en tant que signature, et c’est là le point le plus important.
Créer une signature éligible
Par décision arbitraire, seules les signatures commençant par un certain nombre de zéros sont acceptées sur la blockchain du Bitcoin. Que se passe t’il si la signature ne répond pas à ce critère ? Et bien, l’algorithme dit qu’une nouvelle signature devra être trouvée.
Comme la signature change uniquement lorsque les données du bloc changent, il faut donc changer ces données. Cela se fait en y ajoutant un petit extra connu sous le nom de nonce. Il s’agit d’une chaîne alphanumérique aléatoire.
Un bloc contient donc maintenant :
- Les données de transaction
- La signature du bloc précédent
- le nounce
L’algorithme va donc faire une boucle avec un nounce différent à chaque itération jusqu’à ce que la signature remplisse le critère des zéros en début de chaîne. C’est ce qu’on appelle le minage par la preuve de travail. Evidemment, plus il y a de puissance de calcul, plus il sera rapide de trouer un nounce qui fonctionne.
Tout le monde peut donc participer à ce processus de minage avec un logiciel adéquat. Voici à quoi ressemble un extrait des informations d’un véritable bloc sur la chaîne du Bitcoin :
Trouver le bon nounce est difficile : il faut parfois plusieurs trillions d’essais avant de trouver la bonne formule, et l’algorithme est conçu pour se complexifier avec le temps à mesure que le nombre de zéros demandés en début de signature augmentent.
Comment le nounce rend la chaîne immuable
Comme précédemment, la modification d’un bloc le détachera des blocs suivants. Pour qu’un bloc modifié soit accepté par le reste du réseau, il doit être à nouveau enchaîné à tous les blocs postérieurs dans la chaîne. Or, comme on vient de le voir, recalculer les nouvelles signatures demande un effort de calcul colossal. C’est cette impossibilité théorique de calcul qui fait que la blockchain est considérée comme immuable.
Dans les faits évidemment, cela n’est pas impossible, c’est simplement suffisamment irréaliste pour que l’on puisse considérer cela comme tendant vers l’impossible.
Imaginons par exemple qu’un mineur corrompu a modifié une transaction et tente donc de calculer de nouvelles signatures pour les blocs suivants afin que le reste du réseau accepte sa modification. Son problème est que le reste du réseau calcule également de nouvelles signatures pour de nouveaux blocs. Le mineur corrompu devra également calculer de nouvelles signatures pour ces blocs au fur et à mesure qu’ils sont ajoutés à la chaîne. Il doit en effet garder tous les blocs liés, y compris les nouveaux qui sont constamment ajoutés. À moins que celui-ci ait plus de puissance de calcul que tout le reste du réseau combiné, il ne rattrapera jamais le réseau pour trouver des signatures avant lui.
Aujourd’hui, la chaîne Bitcoin est minée par des millions d’acteurs. Plus de nouveaux noeuds rejoignent le réseau, plus celui-ci est solide. Comme décrit précédemment, la seule attaque possible est une attaque où le pirate aurait au moins 51% de la puissance de calcul du réseau. Nommée attaque des 51%, elle est en pratique et avec les technologies actuelles impossible à mettre en oeuvre, même par un gouvernement ou une multinationale.
Qui gouverne la blockchain ?
C’est donc la règle de ce que la majorité accepte comme vrai qui s’applique. La blockchain du Bitcoin le fait automatiquement en acceptant la plus longue chaîne existante. C’est en effet celle qui aura nécéssité le plus de puissance de calcul.
Sur la blockchain du Bitcoin, tous les historiques de transactions et soldes de portefeuille sont publics et disponibles sur blockchain.com. Il est donc possible de rechercher n’importe quel portefeuille ou transaction qui a eu lieu, et ce jusqu’à la toute première transaction effectuée le 3 janvier 2009.
Attention cependant, bien que les soldes des portefeuilles puissent être vérifiés publiquement par n’importe qui, les propriétaires de ces portefeuilles gardent leur anonymat. Seule l’adresse du portefeuille, qui ne donne aucune indication sur son propriétaire, est publique.
Les autres blockchains
La chaîne du Bitcoin est la plus ancienne et la plus connue des blockchains. D’autres sont depuis apparues, que ce soit pour des autres cryptomonnaies ou d’autres applications comme par exemple les NFTs. Elles ont souvent des capacités supérieures à la chaîne du Bitcoin, comme par exemple celle de pouvoir embarquer des Smart Contracts, mais le fonctionnement sous-jacent reste le même.