Cet article a pour but de démystifier la blockchain en expliquant, pas à pas, les divers procédés et technologies servant à l'implémenter.

Blockchain : Définition et Fonctionnement en théorie

La définition de Wikipédia stipule que :

« Une (ou un) blockchain, ou chaîne de blocs, est une technologie de stockage et de transmission d'informations sans organe de contrôle. Techniquement, il s'agit d'une base de données distribuée dont les informations envoyées par les utilisateurs et les liens internes à la base sont vérifiés et groupés à intervalles de temps réguliers en blocs, formant ainsi une chaîne. L'ensemble est sécurisé par cryptographie. »

Décortiquons chaque partie de cette définition séparément.

Décentralisation

Prenons l’exemple d’une banque, cette dernière centralise toutes les transactions effectuées par ses clients dans des livres de comptes numériques. Néanmoins, cette pratique peut s’avère dangereuse, et les bases de données stockant les transactions ne sont pas à l’abri de circonstances pouvant corrompre/effacer celles-ci.

Une banque utilisant la blockchain répond à ce problème en répliquant les livres de comptes chez chaque client, ce qui a deux conséquences de taille :

  • La suppression d’un organe central vulnérable auquel les clients dépendent,
  • L’impossibilité de supprimer/modifier le contenu des transactions passées, vu que pour cela il faudrait supprimer/modifier l’ensemble des livres de compte de chaque client du réseau,

Lorsqu'une transaction est réalisée par un nœud du réseau, elle est ajoutée à la pile des transactions de ce nœud, puis la base de données des transactions du nœud est répliquée chez tous les nœuds du réseau.

alt

alt

Authentification

Les transactions se font entre les nœuds du réseau, néanmoins, une question se pose : Comment identifier un utilisateur rattaché à un nœud du réseau, et comment cet utilisateur s’authentifie ?

Tout d’abord, il faut savoir que les données (transactions) présentes dans chaque nœud du réseau sont encryptées de façon asymétrique, c’est-à-dire que la clé servant à crypter la transaction est différente de la clé servant à la décrypter.

alt

L’utilisateur du noeud est ainsi représenté par un couple de clés (clé privée, clé publique) unique.

Reprenons l’exemple de la banque, la clé privée que seul l’utilisateur possède sert à crypter la transaction entrante dans le réseau de la blockchain de façon unique, et la clé publique, distribuée par l’utilisateur au réseau, permet aux autres utilisateurs du réseau de la décrypter.

alt

Le cryptage ou décryptage en sens inverse sans utiliser respectivement la clé privée ou publique est une tâche mathématiquement très compliquée à accomplir sans utiliser une machine possédant une forte puissance de calcul.

Synchronisation du réseau

L’absence d’une figure centrale gérant les transactions transitant à travers le réseau pose un problème de taille : Et si deux utilisateurs situés à des points éloignés du réseau commettent une transaction utilisant les mêmes ressources (voire la même transaction) en même temps, quelle transaction sera prise en compte et répliquée dans tout le réseau ?

De façon générale, comment le réseau fait-il pour se synchroniser ?

Il faut savoir que chaque nœud du réseau possède une liste de transactions en attente, cette dernière diffère selon chaque nœud.

alt

Périodiquement, selon la mesure de temps définie (10 minutes en général), un des nœuds du réseau est choisi comme point de référence, ensuite, tout le reste du réseau réplique les données contenues dans le nœud déclaré comme « validé ».

alt

Ce nœud validé est appelé un « bloc », et périodiquement, un nouveau bloc s’ajoute à la liste chaînée des blocs précédents sous ordre chronologique. On a donc ce qu’on appelle une « chaîne de blocs », ou blockchain.

Validation

Tous les nœuds du réseau doivent répliquer les données présentes sur le nœud « validé », mais comment ce dernier est-t-il choisi ?

Il faut savoir que chaque bloc possède un identifiant calculé en rassemblant :

  • L’identifiant du bloc précédent,
  • Le contenu du bloc actuel,
  • Un nonce (une sorte de mot de passe).

Puis en appliquant une fonction de hashage sur cet ensemble. Le hash résultant est l’identifiant du bloc.

Tous les nœuds du réseau travaillent d’arrache-pied pour calculer l’identifiant, en testant divers nonces, le premier nœud à fournir une preuve de travail (proof of work), c’est-à-dire à avoir calculé un identifiant valide, devient le bloc suivant dans la chaîne de blocs. Le nonce est choisi de telle sorte à ce qu’un identifiant puisse être trouvé chaque 10 minutes en moyenne, temps périodique de rafraîchissement de la blockchain.

alt

Un pirate essayant de modifier une transaction dans un bloc n verra ce dernier changer de hash, le pirate devra alors recalculer l’identifiant de ce bloc, et puisque le bloc suivant n+1 contient l’identifiant du bloc précédant n, alors le pirate devra recalculer tous les identifiants en aval du bloc n avant le rafraîchissement de la chaîne de blocs, ce qui est quasi impossible si le pirate est seul.

Plus le réseau grandit, plus il y a d’informations stockées dans chaque bloc, et plus il devient difficile de calculer un identifiant, ce qui rend très compliqué pour un pirate d’ajouter, de manipuler, de réécrire ou de supprimer des blocs à toute vitesse sans fournir une forte puissance de calcul au moins équivalente à celle fournie par la moitié des machines composant le réseau.