Que sont les Arbres de Merkle ? (Merkle tree)

arbre merkle tree

Introduction

Vous avez très probablement déjà entendu parler de blockchain et de hash, mais savez-vous réellement ce qui se cache derrière ces technologies dites révolutionnaires ? 

Avez-vous une idée de ce qui fait de la technologie blockchain un réseau distribué inviolable et immuable ? 

Les arbres de Merkle sont un de ces concepts qui donne toute son importance à la blockchain. 

Dans cet article nous verrons en détail ce que sont les arbres de Merkle, quel est son rôle et pourquoi il se trouve être un des piliers derrière la révolution blockchain.

Qu’est-ce qu’un arbre de Merkle ?

Les fonctions de hachages et les hash

Avant de s’attarder sur les arbres en eux même, il est important de rappeler ce qu’est un Hash.

Pour faire simple, un hash est le résultat d’une fonction de hachage (fonction mathématique) qui génère une suite de caractère unique et de taille fixe appelée octets. Cette fonction permet l’identification des données de manière sécurisée et simple. 

fonction hachage sha256 hash function
Exemple fonction de hachage via Sha256

En claire, ils servent à encoder des données pour les rendre plus accessibles et sécurisés, et cela, peu importe la quantité de données en entrée. Comme on peut le voir dans le tableau juste au dessus, le nombre de caractères en entrée n’a pas d’importance, cependant la sortie fait toujours 64 caractères via Sha256, quel que soit le nombre de caractères en entrée.

Dans le domaine de la blockchain, ces fonctions servent principalement à garantir l’authenticité des données.

En effet, si un caractère change dans les données entrées (input data) alors la sortie (output data) change également !

Il n’est donc pas nécessaire de vérifier dans le bloc d’une blockchain si des caractères ont été modifiés, à partir du moment ou le hash en sortie n’est plus le même, on peut partir du principe qu’au moins un caractère a été modifié, cela permet donc de vérifier très rapidement si les données ont été corrompues ou non, même sur un ordinateur ou ou téléphone peut performant.

Dans l’exemple ci dessous on peut voir une entrée (rectangle bleu) dont le nombre de caractères n’a pas d’importance et une sortie (rectangle jaune) contenant un hash de 32 caractères. Lorsque l’on utilise une fonction MD5 nous obtenons TOUJOURS 32 caractères composés de chiffres (0 à 9) et de lettres (A, B, C, D, E ou F).

Fonctionnement d'une fonction de Hash
Exemple de fonction de hachage MD5

Il est impossible de retrouver la donnée initiale (données entrées) à partir de l’empreinte (hash en sortie) ce qui renforce la sécurité desdites données. Une fonction de hachage ne fonctionne que dans un sens.

Il était important de faire un point sur les Hashs car ils sont un composant essentiel des arbres de Merkle.

Les arbres de Merkle

Un arbre de Merkle aussi couramment appelé arbre de Hash est un composant fondamental de la technologie Blockchain. 

En effet, un arbre de Merkle est une structure de donnée permettant la vérification et la sécurisation de celle-ci. 

Cette structure de donnée, dont le nom vient de son inventeur Ralph Merkle, est basée sur le hachage qui est utilisé en cryptographie et en informatique.

Un arbre de Merkle est composé d’une racine, de branches et de feuilles, résumé rapide de l’anatomie d’un arbre de merkle :

  • Merkle root (racine de Merkle)
  • Nœuds parents (les branches)
  • Noeuds enfants (les sous branches)
  • Les données (les feuilles)
Arbre de merkle

Comme expliqué dans la section dédiée au Hash, chaque donnée présente dans l’arbre (feuilles) sont hachées ce qui en résulte une empreinte de taille fixe. 

Ces feuilles sont agencées de manière très spécifique et possèdent donc chacune une empreinte (hash). 

Deux à deux, les empreintes sont sommées puis hashées à leur tour et ceci jusqu’à ce qu’il ne reste qu’une seule emprunte, ce qui signifiera que nous sommes belles et bien remontées à la racine comme le montre le graphique ci-dessus. 

Les nœuds parents et enfants dans les arbres de Merkle

Le concept de nœuds parents et enfants est un concept important à intégrer pour bien assimiler le fonctionnement d’un arbre de Merkle. 

Chaque nœud, à l’exception de la racine (Merkle root) est relié à un nœud parent par un hash qui se trouve au-dessus de lui dans la hiérarchie. Plus simplement, un nœud contenant les valeurs des deux nœuds qui lui sont inférieures est le « parent » de ces deux nœuds.  

À noter que si chaque nœud a, au maximum, deux « nœuds enfants », on parlera alors d’arbre de hachage binaire comme sur l’exemple ci-dessous.   

Nœud parent et enfant arbres de Merkles

Dans une blockchain, l’arbre de Merkle fournira une emprunte pour chaque transaction passée sur celle-ci provenant d’un bloc. 

C’est avec ce procédé qu’il est possible de constater si une transaction est belle est bien incluse dans un bloc ou non. 

Par exemple, sur la blockchain Bitcoin les arbres sont utilisés pour organiser les transactions au sein des blocs. 

Agencement des transaction en bloc

Le hash de la racine Merkle est lui placé dans l’entête du bloc avec le récapitulatif de toutes les transactions incluses dans celui-ci. 

Donc, à chaque nouveau bloc, un arbre est créé et sa racine calculée par la fonction de hash (SHA256 dans le cas de bitcoin) qui, une fois le calcul effectué, l’inclut directement dans l’entête du bloc. La fonction de Hash a également pour rôle de lier les blocs entre eux.

Dans chaque nouveau bloc créé il y a l'empreinte (hash) du bloc précédent c’est pour cela que l’on parle de chaine de blocs (blockchain).

blockchain hash
Démo d’une chaine de blocs (source : https://andersbrownworth.com/blockchain/blockchain)

Cet aspect permet simplement la vérification simple des transactions sans avoir à télécharger tout le contenu des blocs, mais simplement la racine contenue dans l’entête.

Il est important de signaler que beaucoup de systèmes blockchain utilise ce mécanisme afin d’agencer leur transaction et d’en faciliter la vérification et l’authenticité. Ethereum fait partie de ces systèmes en utilisant 3 arbres différents à chaque nouveau bloc : un arbre des transactions, un arbre contenant les reçus et un arbre spécifique aux données relatives du système. 

On relèvera également l’existence des Mast (Merklized Abstract Syntax Trees) ou arbres syntaxiques abstraits merkélisés en Français permettant de gérer la structuration des contrats intelligents, ce qui permet de booster la scalabilité et la confidentialité du réseau. 

Ainsi en agencent les différentes conditions d’un smart contract, il est possible pour les utilisateurs qui interagissent avec de n’exécuter qu’une partie de ces conditions sans en révéler les autres. 

Conclusion

Vous l’aurez compris, les arbres de Merkle sont un des éléments fondamentaux qui rendent la technologie Blockchain vraiment intéressante. 

À présent, lorsque vous souhaiterez étudier un projet en profondeur, vous saurez identifier sur quel arbre de Merkle il est basé et donc son fonctionnement fondamental.