La technologie de la chaîne de blocs (Blockchain)
La chaîne de blocs est une technologie de registres (ledgers) partagés décentralisée. Le registre est une liste de transactions qui sont dupliquées sur un certain nombre d’ordinateurs, plutôt que d’être stockées sur un seul serveur central. Chaque transaction (ou souvent une suite de transactions sur une période donnée) est appelée un bloc ; chaque bloc possède un horodatage et est lié au précédent bloc.
La chaîne de blocs est une technologie de registres (ledgers) partagés décentralisée. Le registre est une liste de transactions qui sont dupliquées sur un certain nombre d'ordinateurs, plutôt que d'être stockées sur un seul serveur central. Chaque transaction (ou souvent une suite de transactions sur une période donnée) est appelée un bloc ; chaque bloc possède un horodatage et est lié au précédent bloc.
Le développement de la technologie est associé à celui de la première cryptomonnaie, le Bitcoin (2008). Il s'agissait alors de créer un système d'échange numérique de valeurs entre deux entités, ne nécessitant pas l'intervention d'un tiers de confiance. Pour cela, il fallait imaginer une base de données sécurisée qui soit distribuée afin de ne pas en laisser le contrôle à un unique administrateur, à une autorité centrale.
Le fonctionnement d’une chaîne de blocs repose non seulement sur une base de données, mais aussi sur un protocole et des règles pour gérer l'ajout et la validation de nouvelles lignes au registre (les blocs), et sur un système de diffusion des ajouts de lignes aux autres pairs du réseau.
Si la technologie de la chaîne de blocs était au départ destinée aux transactions financières, elle a évolué et trouve aujourd’hui de nouveaux champs d’application. Les points communs à toutes les applications que l'on retrouve sous le vocable de “blockchain” sont les suivants :
- L'application est généralement dédiée à l'enregistrement d'échanges, de transactions au sens large.
- Elle répond à la définition de registre d’écritures distribué et, concrètement, il s’agit d’une base de données dupliquée sur plusieurs serveurs.
- Son fonctionnement repose souvent sur un réseau pair-à-pair (P2P).
- Les données sont mises à jour presque simultanément sur tous les serveurs.
- L’intégrité des données échangées et l'identification des participants sont garanties par l'usage de la cryptographie et de signatures numériques.
- Le système est basé sur un mécanisme de consensus et n'autorise pas la modification de transactions déjà enregistrées et validées.
Chaque participant du réseau possède une copie de la chaîne de blocs (registre) existante. Quand l'un d'entre eux veut ajouter un enregistrement, d'autres participants vont exécuter des vérifications et évaluations de la transaction proposée. Si une majorité des nœuds accepte la transaction comme étant valide, elle est alors considérée comme approuvée et un nouveau bloc est ajouté à la chaîne.
Un registre (ledger)
Le registre est un fichier qui contient les données structurées. Les blocs contenus dans le registre sont en quelque sorte comme les pages d'un livre. On trouve sur une page de livre un texte et des informations à propos de la page (numéro de la page, titre de l'ouvrage et/ou du chapitre). Il en va de même pour un bloc où l'on trouve à la fois des descriptions de transactions et des informations à propos du bloc lui-même. Ces dernières, placées dans un en-tête (header), sont appelées des métadonnées. Elles incluent, entre autres, des caractéristiques techniques, une empreinte numérique du contenu du bloc (hash, ou somme de contrôle) et une référence au bloc qui précède, ce qui tient lieu de pagination.
Une chaîne de blocs (blockchain)
Le registre est constitué d'une chaîne de blocs. Chaque bloc est identifié non pas par un numéro d'ordre, mais par sa valeur de hachage (somme de contrôle), qui est dépendante du contenu du bloc. Quand le bloc fait référence au bloc précédent, il le fait ainsi via sa valeur de hachage. L’usage de ces valeurs permet donc de vérifier la consistance et l'intégrité de la chaîne. Si un bloc est modifié, sa valeur de hachage change et la référence contenue dans le bloc suivant devient erronée : la chaîne est brisée. Le seul moyen de contourner le problème serait alors de réécrire les blocs en aval.
La chaîne de blocs du Bitcoin est complètement décentralisée. Son registre est entièrement public et partagé. Il contient l'intégralité des transactions depuis la création de la monnaie : en juillet 2010, il représentait 1 Mo de données, à la même époque l'année suivante, il dépassait les 200 Mo. Aujourd'hui, le 11 décembre 2018, le registre Bitcoin pèse 194 392 Mo, soit 194,4 Go, ce qui est considérable [source : blockchain.info].
Un réseau et un protocole
Un réseau peut être constitué de n'importe qui disposant d'un ordinateur relié au Net (le cas Bitcoin) ou bien d'un groupe de participants connus et accrédités. Chaque ordinateur est appelé un nœud et chaque nœud doit normalement disposer d'une copie du registre. Cette redondance entraîne une tolérance aux pannes : si un nœud devient inopérant, le registre n'est pas perdu et la chaîne peut continuer de croître. Le protocole définit les modalités techniques de communication entre les noeuds.
Un mécanisme de consensus
Le mécanisme de consensus est un ensemble de règles que le réseau utilise pour vérifier et agréer chaque transaction et chaque bloc de la chaîne. Les transactions approuvées par un nœud sont assemblées en blocs qui sont distribués à tous les autres nœuds. Ceux-ci sont alors invités à en faire la vérification. Ce n'est pas une institution centrale qui valide de son sceau une transaction, mais un ensemble de participants qui vont chacun vérifier la transaction. On parle de consensus distribué.
Ces mécanismes peuvent être variés, et leur complexité dépend du type de réseau (ouvert, ou fermé — et donc de la confiance que l'ont peut raisonnablement accorder a priori à un nœud). Nous ne rentrerons pas dans le cadre de cet article dans le détail des “preuves de travail” et “preuves de participation”.
Les mécanismes et protocoles de Bitcoin sont par exemple complexes, car c'est un système complètement ouvert (n'importe qui peut télécharger l'application et devenir immédiatement un nœud du réseau) et qu'il veut garantir un pseudonymat à ses participants. Des systèmes à base de chaînes de blocs peuvent être bien plus simples si l'on s'autorise un certain degré de centralisation et si l'on a affaire qu'à des participants connus et de confiance.