Pour bien présenter Bitcoin, il faut s’attarder sur son fonctionnement. Comment fonctionne Bitcoin et sa mécanique de validation des blocs ? Comment garantir que les utilisateurs possèdent réellement les bitcoins qu’ils dépensent et empêcher les dépenses multiples ? Comment parvenir à un consensus sur l’état de la base de données partagée entre les utilisateurs ? Dans cet article, nous examinons les concepts clés et expliquons le mécanisme de consensus utilisé, tout en soulignant l’importance de la preuve de travail.
Mais avant tout définissons le terme blockchain, concept essentiel pour comprendre le fonctionnement de Bitcoin.
Une blockchain, c’est quoi ?
Pour comprendre le fonctionnement de Bitcoin, il faut comprendre le fonctionnement d’une blockchain.
Une blockchain est une technologie de stockage et de transmission des données. Cela fonctionne comme une base de données distribuée qui enregistre les transactions signées de ses utilisateurs en les regroupant dans des blocs. Ces blocs sont cryptographiquement liés les uns aux autres et utilisent une méthode de consensus pour synchroniser les différents nœuds (ou serveurs) du réseau.
Le Mathématicien Jean-Paul Lahaye utilise l’image d' »un très grand cahier, que tout le monde peut lire librement et gratuitement, sur lequel tout le monde peut écrire, mais qui est impossible à effacer et indestructible« .
Une blockchain peut avoir de nombreuses applications, pas uniquement liées aux cryptomonnaies. On peut utiliser cette technologie pour sécuriser des données, automatisées des procédures, tracer des produits…
Enfin, il est important de faire la distinction entre blockchain publique (distribuée et transparente) et blockchain privée (centralisée et repose sur un tiers de confiance).
Maintenant, plongeons dans les aspects techniques de Bitcoin.
Un réseau décentralisé : le pair-à-pair
Bitcoin (et les blockchains publiques en général) fonctionne grâce à un réseau décentralisé composé de nombreux serveurs reliés les uns aux autres. (On devrait même parler de système distribué comme présenté sur le schéma vu plus haut, mais l’important à saisir est qu’il n’y a pas un point central décisionnaire).
Ces serveurs appliquent tous les mêmes règles pour parvenir à un consensus sur l’état de la base de données à un moment donné.
Pour en arriver là, il a fallu résoudre plusieurs problèmes informatiques fondamentaux :
- comment garantir que tous les nœuds du réseau possèdent la même version de la base de données ?
- Comment s’assurer que les mises à jour de la base de données sont effectuées de manière cohérente et identique sur tous les nœuds ?
- Comment gérer les entrées et sorties de nœuds du réseau ?
- Comment résoudre le problème de la double dépense ?
- Et enfin, comment empêcher un nœud malveillant de diffuser une version erronée de la base de données ?
La recherche de réponses à ces questions a donné lieu à plusieurs méthodes de consensus dans les réseaux distribués. Bitcoin utilise la preuve de travail (proof of work – PoW). Cette méthode, également connue sous le nom de « minage de Bitcoin« , est basée sur un principe simple : la version de la blockchain acceptée comme valide est celle qui a nécessité le plus de puissance de calcul informatique pour être créée.
En dépensant de la puissance de calcul, les mineurs sécurisent le réseau et valident les transactions.
Voyons comment cela fonctionne.
Résolution de problèmes difficiles, mais vérification facile
Pour comprendre comment la preuve de travail fonctionne, il faut d’abord comprendre un concept mathématique fondamental. (Non non n’ayez pas peur, vous allez voir c’est simple !)
Le postulat selon lequel : il existe des problèmes mathématiques difficiles à résoudre, mais faciles à vérifier.
Un exemple concret est la résolution d’un sudoku. Résoudre certaines grilles peut être difficile, mais vérifier si une solution est correcte est facile. Un autre exemple est la recherche des facteurs premiers d’un nombre très grand. Trouver ces facteurs peut prendre énormément de temps, mais vérifier si les facteurs donnés sont corrects est simple et rapide.
Les mécanismes de consensus exploitent ce principe.
Maintenant, regardons le problème difficile à résoudre mais facile à vérifier, utilisé dans la preuve de travail.
À la recherche d’un « hash » approprié
Toutes les nouvelles transactions diffusées sur le réseau sont regroupées dans un bloc en attente de validation. Pour qu’un bloc soit accepté par les autres nœuds et ajouté à la chaîne de blocs, son en-tête doit présenter un « hash » inférieur à une valeur cible prédéfinie (appelée niveau de difficulté). Pour comprendre cela, examinons la structure d’un bloc.
Structure d’un bloc
Un bloc est composé de deux parties principales :
- l’en-tête (header)
- et les transactions incluses dans le bloc.
L’en-tête contient des métadonnées telles que la version du protocole utilisée, le hash du bloc précédent, le hash de la racine de l’arbre de Merkle des transactions du bloc, un horodatage, la cible de difficulté et un nonce (compteur utilisé pour résoudre le problème de la preuve de travail). Pour mieux comprendre le fonctionnement de Bitcoin, retenons surtout qu’il contient le hash du bloc précédent.
Qu’est-ce qu’un hash ?
Une fonction de hachage prend n’importe quelle quantité de données en entrée et renvoie une sortie de taille fixe. Les hash sont généralement représentés sous forme de nombres hexadécimaux.
Par exemple, si nous utilisons la fonction de hachage « SHA256 » sur le mot « jaccepte-bitcoin.com », nous obtenons ce hash spécifique : 5488162168F122903928A0647F1D8EA66FF30D6696C7A5015FCF0D1148C094F0 (bon appétit !).
Les fonctions de hachage sont unidirectionnelles, ce qui signifie que vous ne pouvez pas retrouver les données d’origine à partir du hash.
De plus, la moindre modification des données d’entrée entraîne une modification complète du hash de manière imprévisible. Par exemple, le hash de « jacceptebitcoin.com » est 2063F7537DB7A5D335884F139E4A7275F469CDEB7037F0FA4E89B9526F67D971. Un léger changement dans les données produit un hash complètement différent.
Le fonctionnement de Bitcoin utilise ces propriétés cryptographiques des fonctions de hachage pour sécuriser sa blockchain. Et c’est pour cela qu’on parle de CRYPTO-monnaie.
Trouver le bon nonce
Une fois que toutes les nouvelles transactions sont regroupées dans un bloc, le contenu de l’en-tête du bloc est « hashé » à l’aide d’une fonction de hachage.
Mais ! Comment obtenir un hash qui satisfait la condition de difficulté ?
Pour résoudre ce problème, un nonce (un nombre aléatoire) est ajouté à l’en-tête du bloc. En testant différentes valeurs de nonce, les mineurs recherchent un hash qui satisfait la condition de difficulté.
Trouver ce nonce approprié est un processus de recherche qui nécessite une puissance de calcul importante. En effet, la seule façon de découvrir ce nonce est de les essayer un par un, jusqu’à ce que le mineur obtienne une valeur de hash assez petite.
Une fois qu’un mineur a trouvé un nonce satisfaisant, il peut publier le contenu du nouveau bloc sur le réseau.
Ce processus de recherche de nonce s’appelle le « minage ». Il est coûteux en termes de ressources énergétiques (nombreux calculs par seconde) et matérielles (cartes informatiques). Il est difficile à trouver, mais facile à vérifier.
La récompense pour avoir réussi à trouver un nonce approprié est l’attribution de bitcoins nouvellement créés.
Le niveau de difficulté
Attardons-nous un peu sur le niveau de difficulté car cela démontre à quel point le fonctionnement de Bitcoin est bien pensé.
Nous avons vu que Bitcoin utilise la fonction de hachage SHA-256, cette dernière donnera toujours un résultat de 64 caractères. En effet, quelle que soit l’entrée, la sortie sera toujours de 256 bits. Les bits sont un ensemble de « 0 » et de « 1 » placés les uns à la suite des autres. Dans le cas du SHA-256, nous en avons donc 256 (64 valeurs constantes de 4 bits chacune).
C’est pourquoi on obtient une sortie de 64 caractères alphanumériques comme résultat de la fonction de hachage. Cependant si on convertit cette sortie en bits, on obtient une suite de 256 « 0 » et « 1 ».
Ce sont ces « 0 » qui constituent la difficulté du réseau. Cette difficulté est utilisée pour compenser l’augmentation de la puissance de calcul informatique en vue de respecter le délai moyen de 10 min entre chaque bloc.
La difficulté réside dans le fait que les mineurs doivent résoudre le problème mathématique de la preuve de travail pour ajouter un bloc. Cette difficulté de résolution dépend du nombre de « 0 » requis au début de la suite de 256 bits obtenue grâce à la fonction de hachage. Plus le nombre de « 0 » nécessaire est élevé, plus la difficulté pour le réseau de résoudre les blocs grâce à la preuve de travail est importante.
Ces faits prouvent que Bitcoin fonctionne comme un organisme, où les différents éléments interagissent en réseau en réponse aux changements d’état observés globalement. L’augmentation de la difficulté au fil du temps permet de prévenir la congestion des transactions (blocs générés trop rapidement), les transactions orphelines (risque de blocs générés simultanément) et certaines attaques informatiques (comme la double-dépense).
Une chaîne de blocs continue
Deux autres mécanismes essentiels assurent la continuité de la blockchain :
- la liaison entre les blocs
- et la sélection de la chaîne la plus longue.
La liaison des blocs
Lorsqu’un mineur réussit à trouver un nonce approprié et à créer un bloc valide, ce bloc est ajouté à la blockchain existante. Le nouveau bloc est lié cryptographiquement au bloc précédent à l’aide du hash de l’en-tête du bloc précédent.
Eh oui rappelez-vous : étant donné que le hash dépend des données en entrée, si ces données incluent également le hash du bloc précédent, toute modification de ce dernier entraînerait une modification de son hash. Par conséquent, il faudrait recalculer tous les hashs des blocs suivants.
Ce système crée une chaîne de blocs où chaque bloc est lié au précédent, formant ainsi une structure continue et immuable.
La chaîne la plus longue
Il peut arriver, intentionnellement ou par accident, que la chaîne se divise en deux versions différentes. C’est ce qu’on appelle une « fourche » (un « fork« ).
Par exemple, un utilisateur souhaite retirer une transaction qu’il a récemment effectuée dans un bloc miné. Ou bien, deux mineurs découvrent simultanément deux versions différentes d’un bloc contenant des transactions similaires, et ces deux versions sont diffusées simultanément dans le réseau.
Dans de tels cas, le réseau des nœuds se retrouve avec deux versions différentes de la blockchain.
Comment décider quelle version est valide ?
La réponse est simple : le réseau considère la chaîne la plus longue comme valide. Pourquoi ? Car c’est celle qui a utilisé la plus grande quantité de travail.
Ainsi, en cas de division accidentelle, l’une des deux chaînes accumulera les blocs plus rapidement que l’autre. Tous les nœuds reconnaîtront donc cette chaîne comme la chaîne légitime, et concentreront la puissance de calcul sur cette dernière.
Conclusion
Le fonctionnement de la validation des blocs de Bitcoin reposent sur des concepts clés tels que le hash, la fonction de hachage, l’horodatage et l’empreinte cryptographique. Les blocs liés les uns aux autres, forment une chaîne immuable où chaque bloc contient l’empreinte du bloc précédent. C’est ce qui garantit l’intégrité des données et assure l’ordonnancement chronologique des transactions.
La combinaison de ces éléments permet à Bitcoin de fonctionner de manière sécurisée, transparente et résiliente. Ce système de validation des blocs assure l’intégrité des transactions et constitue le fondement de confiance sur lequel repose l’écosystème Bitcoin.
Bitcoin fonctionne comme un organisme. Tout est si bien pensé, si bien imbriqué !