Blockchain/Niveau II · Mécanismes/2.3 Les blocs et la chaîne/Leçon 2
Arbres de Merkle
L’empreinte de 32 octets qui lie des milliers de transactions
MatérielUn explorateur de blocs avec visualisation des branches de MerkleQuatre étiquettes alphanumériques courtes (A, B, C, D)Un outil de double hachage SHA-256
Curiosité
- Comment une seule valeur de hachage peut-elle certifier l’inclusion de quatre mille transactions distinctes ?
- Pourquoi Satoshi a-t-il choisi d’apparier une dernière entrée isolée avec elle-même, et quel a été le prix de ce choix ?
- Quelle vulnérabilité précise la règle d’appariement par duplication a-t-elle introduite dans la première implémentation de Bitcoin ?
Explorer
- Ralph Merkle a déposé en 1979 un brevet sur l’arbre de hachage binaire (accordé en 1982), une structure de données conçue pour résumer efficacement de grands ensembles de données. Dans Bitcoin, cette architecture réduit des milliers d’identifiants de transaction à une seule valeur de 32 octets appelée racine de Merkle. Cette racine est intégrée directement dans l’en-tête de bloc de 80 octets, ce qui crée un engagement cryptographique immuable envers chaque transaction de ce bloc précis.
- La construction se fait de manière récursive, de bas en haut. Les identifiants de transaction sont concaténés par paires puis soumis à un double hachage SHA-256 pour produire les nœuds parents. Cet appariement se poursuit niveau par niveau jusqu’à ce qu’il ne reste qu’un seul hash racine. Si un niveau contient un nombre impair d’entrées, la dernière entrée est appariée avec elle-même pour préserver la structure binaire, ce qui garantit que l’arbre s’équilibre correctement à chaque étape.
- La nature logarithmique de cette structure permet la vérification simplifiée des paiements (SPV). Un client léger ne télécharge pas les blocs complets ; il demande plutôt une branche de Merkle à un nœud complet. Cette branche ne contient que les hashes frères situés le long du chemin qui mène d’une transaction donnée à la racine. Pour un bloc de 4 000 transactions, cette preuve nécessite environ douze valeurs de hash, soit une fraction de la taille totale des données.
- En combinant le hash de sa propre transaction avec ces hashes frères fournis, un client léger recalcule la racine de Merkle et la compare à la valeur présente dans l’en-tête de bloc téléchargé. Si elles correspondent, l’inclusion est vérifiée cryptographiquement sans qu’il soit nécessaire de stocker toute la chaîne. Ce mécanisme permet aux portefeuilles mobiles de fonctionner en toute sécurité sur des appareils aux capacités de stockage et de calcul limitées.
- Segregated Witness (SegWit), activé en août 2017, a introduit une deuxième structure d’arbre de Merkle. Alors que l’arbre d’origine s’engage sur les identifiants de transaction, l’arbre witness s’engage sur les identifiants de transaction witness. La racine de ce second arbre n’est pas stockée dans l’en-tête ; elle est inscrite dans une sortie OP_RETURN de la transaction coinbase, que les anciens nœuds traitent comme de simples données, ce qui préserve la compatibilité.
- La règle d’auto-appariement cachait une faille (CVE-2012-2459). Comme une dernière entrée isolée est appariée avec elle-même, une liste de transactions se terminant par une paire dupliquée produit la même racine de Merkle que la liste sans le doublon. Un attaquant pouvait diffuser cette variante malformée d’un bloc valide ; les nœuds qui la rejetaient pouvaient alors marquer le hash du bloc authentique comme invalide et se désynchroniser du réseau. Le correctif de 2012 permet aux nœuds de reconnaître ce schéma au lieu de mettre le bloc en cache comme invalide.
Faits clés
- La racine de Merkle est un hash unique de 32 octets, stocké dans l’en-tête du bloc, qui s’engage sur toutes les transactions du bloc.
- Bitcoin utilise un double hachage SHA-256 à chaque niveau de la construction de l’arbre de Merkle.
- Un nombre impair d’entrées à n’importe quel niveau est géré en appariant la dernière entrée avec elle-même.
- Une preuve de Merkle pour une transaction d’un grand bloc nécessite généralement une douzaine de hashes frères.
- SegWit a ajouté un deuxième arbre de Merkle portant sur les identifiants de transaction witness, inscrit dans la transaction coinbase.
- CVE-2012-2459 était un bug lié à la logique d’appariement par duplication dans les premières versions de Bitcoin Core.
Exercice neuf, six, trois, un
9RassemblerÉnumérez 9 systèmes ou protocoles du monde réel qui utilisent des arbres de hachage pour la vérification de l’intégrité des données.
6RegrouperRegroupez les 9 en 6 selon ce qu’ils protègent : fichiers, paquets logiciels, certificats, bases de données, blockchains ou autre.
3DistillerRéduisez les 6 groupes à 3 raisons fondamentales pour lesquelles une structure de preuve logarithmique est préférable à un parcours linéaire pour les grands ensembles de données.
1CristalliserÉcrivez une phrase expliquant comment la modification d’un seul bit dans un nœud feuille change tout le hash racine.
Vérification des faits
Les dates, les chiffres et les affirmations ont été vérifiés à l’aide des sources publiées listées ci-dessous.