Dans cet article, il sera question des principes de base d’une blockchain. Le vocabulaire sera volontairement simplifié et certains aspects ne seront pas traités pour se concentrer sur l’essentiel.
Dans la lecture d’articles ou de livres traitant de la blockchain, il est souvent question de transactions, car la plupart des blockchains sont des systèmes d’échange de valeurs. Pour garder un côté déconnecté de la finance, on parlera d’informations.
Une information sur une blockchain n’est rien de plus qu’un utilisateur voulant enregistrer une donnée. Cette information peut être destinée à lui-même ou à une autre personne voire à un groupe de personnes.
Une personne recevant une donnée peut donc l’utiliser comme bon lui semble, mais il sera gardé en historique l’échange de cette donnée.
Prenons pour exemple un système de messagerie fonctionnant sur la blockchain. Nous avons un premier utilisateur David.
David peut :
Un second utilisateur Marie peut quant à elle :
Il en sera de même pour Julie et Solange.
Il est plus évident, lors d’échanges de messages avec une personne de conserver la discussion sur une grande page plutôt que sur plusieurs petits morceaux de papier.
Il en est de même pour une blockchain. Au lieu d’enregistrer information par information, il est plus évident de construire un bloc pour stocker nos informations, comparable à notre grande page.
Ce bloc va être constitué des éléments suivants :
Les résumés et le petit mot aléatoire sont des systèmes pour sécuriser et rendre immuable la BlockChain. Ces aspects seront vus dans des parties indépendantes. Ce qui est important à retenir pour cette étape, c’est que les résumés de blocs sont le moyen de chaîner la blockchain comme il sera expliqué par la suite.
Pour mieux se retrouver dans un ouvrage ou une masse d’informations, il est préférable d’organiser l’information. Il en est de même dans notre bloc d’information, on va chercher à organiser l’information sous la forme d’un arbre.
La structure en arbre est une structure courante en informatique, car elle permet de diminuer le temps d’accès à une information. Cette structure est constituée d’une racine, de branches, de nœuds et de feuilles.
Une feuille est le dernier élément d’un arbre qui ne possède pas de branche pouvant aller plus bas dans l’arbre.
Un nœud est constitué d’un nœud/racine parent et d’au moins un nœud fils.
La racine est un nœud particulier qui ne possède pas de parents et qui est donc unique dans l’arbre.
L’arbre présenté ci-dessus est un arbre binaire, c’est-à-dire que chaque nœud ou racine possède au plus 2 branches. Il existe d’autres types d’arbres avec la possibilité de posséder plus de branches.
De manière générale et pour de multiples raisons, nous utilisons des arbres binaires. Ce qui est aussi le cas dans une blockchain.
Si nous prenons par exemple les données suivantes {1 ;2 ;3 ;4 ;5 ;6 ;7 ;8}. L’accès à ces données via une liste d’éléments donnera le résultat suivant :
Pour aller à l’élément 4, il nous faudra trois étapes (sans compter l’étape qui nous permet d’accéder au premier élément de la liste). De manière générale dans ce type de structure, on va considérer que le nombre d’étapes nécessaires pour retrouver un élément est le nombre d’étapes pour atteindre l’élément le plus loin. Dans notre exemple, l'élément le plus loin est le 8, avec 7 étapes. Si on généralise, cela nous donne pour une liste « n » étapes.
Maintenant, si nous mettons cette liste sous forme d’arbre:
Sous cette forme, seules trois étapes seront nécessaires dans le pire des cas. Si on généralise, le nombre d’étapes est donc de log(n) (log à base 2). Pour faciliter la recherche des éléments, l’insertion est judicieusement faite. Même si vous n’êtes pas très à l’aise avec les fonctions linéaire et logarithmique les exemples donnent une bonne raison d’utiliser une structure en forme d’arbre plutôt qu’une structure en liste dans ce type de cas.
Comme le nom l’indique, une Blockchain est une chaîne de blocs. Pour pouvoir chaîner des blocs, nous aurons besoin de deux éléments dans le bloc : le résumé du bloc précédent et le résumé du bloc actuel.
L’objectif est de chaîner nos blocs en étant sûr que chaque bloc soit la suite de l’ensemble des précédents blocs.
À ce stade, il est important de parler d’un principe fondamental de la blockchain. Chaque usager peut stocker la blockchain, cela veut dire que chacun a la capacité de la modifier. Il est donc nécessaire d’avoir une blockchain qui reste cohérente. De plus, il est impossible de faire confiance dans un tel réseau, au point qu’on soupçonnera toujours le mal.
Il serait long à chaque nouveau bloc de vérifier l’intégralité de la blockchain pour vérifier si les informations de cette dernière sont correctes. L’idée est donc de faire un résumé du bloc précédent et de l’intégrer à notre bloc. La fonction utilisée pour créer le résumé a pour particularité qu’un simple caractère modifié entraine un changement radical du résumé. Nous verrons plus tard cette fonction qui est une fonction de hachage.
Ce résumé étant très sensible, il serait complètement transformé en cas de modification dans le bloc. Étant donné que le résumé du bloc se trouve aussi dans le bloc suivant comme montré ci-dessous, le résumé du bloc suivant serait aussi modifié intégralement.
Donc, au moment de recevoir un nouveau bloc, il suffit de comparer le résumé du bloc reçu avec le résumé du bloc précédent que nous possédons. Si le résumé correspond, on vérifie si le résumé du nouveau bloc correspond également. Il est ensuite possible de l’intégrer dans la blockchain. Sinon le nouveau bloc est rejeté.
Une vérification de l’authenticité des informations est aussi faite, par exemple lors d’échange de valeur, on va vérifier si l’émetteur de la valeur possède bien les fonds suffisants.
L’exemple de la messagerie comme vu précédemment n’aurait pas besoin de vérifications. Nous y reviendrons dans un autre article.
Pour modifier un bloc, il faut par conséquent refaire l’intégralité des blocs déjà existants, cela a un coût important que nous n’expliquerons pas dans cet article.
Pour conclure, la blockchain est une suite de blocs d’informations liés grâce à des résumés sensibles qui lui permettent de rester cohérente. Nous verrons plus tard comment empêcher la modification d’anciens blocs.
Relecture par Francis Kempenaers.
Ecrit par Lucas Jouvet contact@ljouvet.fr