Blockchain/Niveau IV · Le protocole en profondeur/4.2 Évolutions du protocole/Leçon 4
Descripteurs de sortie
La grammaire de la clé : pourquoi une graine seule ne suffit pas toujours à restaurer ce que vous avez construit
MatérielUne instance en cours d’exécution de Bitcoin Core (version 23 ou ultérieure)Un portefeuille matériel capable d’exporter des descripteurs publicsUn éditeur de texte pour examiner et modifier des chaînes de descripteur
Curiosité
- Quelle information précise manque à une phrase de récupération de 24 mots, au point qu’elle ne suffit pas à restaurer toutes les adresses d’un portefeuille multisig ?
- Comment une somme de contrôle ajoutée à une chaîne de descripteur détecte-t-elle un seul caractère transposé avant que le logiciel ne tente l’importation ?
- Pourquoi Bitcoin Core a-t-il mis les nouveaux portefeuilles en mode descripteur par défaut dans la version 23, et qu’est-ce qui ne fonctionne plus si l’on restaure un portefeuille de style ancien à partir d’une sauvegarde moderne ?
Explorer
- Avant les descripteurs, les portefeuilles HD reposaient sur des chemins de dérivation implicites. L’utilisateur sauvegardait une phrase de récupération ou une clé publique étendue (xpub) et supposait que le logiciel reconstituerait les adresses selon les conventions standard du BIP44. Cela fonctionnait pour les portefeuilles simples à signature unique jusqu’à l’activation de Segregated Witness en août 2017, au bloc 481 824. Avec l’introduction des types d’adresses P2WPKH et P2WSH, une xpub seule ne décrivait plus la structure complète de dérivation des adresses, ce qui provoquait des échecs de restauration : les fonds semblaient perdus parce que le portefeuille recherchait le mauvais type de script.
- Le BIP380 définit les descripteurs de scripts de sortie (Output Script Descriptors), un langage standard permettant de décrire des ensembles de scripts de sortie utilisés dans les portefeuilles Bitcoin HD. Si le BIP380 établit le cadre, les BIP 381 à 386 spécifient les différents types d’expressions comme pk(), pkh(), sh(), wpkh() et wsh(). Un descripteur est une expression structurée qui décrit entièrement un script de sortie (scriptPubKey). Par exemple, ‘wpkh([d34db33f/84'/0'/0']xpub…/0/*)’ indique explicitement le type de script, l’origine de la clé via l’empreinte de la clé maîtresse et le chemin de dérivation, la clé publique étendue et la plage d’indices à parcourir. Rien n’est laissé au hasard.
- Le format comprend une somme de contrôle après le caractère ‘#’ afin de détecter les fautes de frappe. Si un utilisateur modifie manuellement un descripteur ou le copie mal, le logiciel vérifie la somme de contrôle avant d’accepter la saisie. Cela évite une corruption silencieuse, où une adresse invalide serait analysée indéfiniment sans aucun résultat. Les portefeuilles matériels peuvent exporter des descripteurs contenant les clés publiques et les chemins de dérivation, mais en excluent explicitement les clés privées, ce qui permet à des nœuds en ligne de surveiller en toute sécurité des actifs hors ligne sans exposer la graine.
- Miniscript, développé par Pieter Wuille, Andrew Poelstra et Sanket Kanjalkar à partir de 2019 et spécifié dans le BIP379 (2023), offre une manière structurée d’écrire et d’analyser des scripts. Il permet aux portefeuilles de combiner en toute sécurité timelocks, multisig et hashlocks en décomposant une logique de script complexe en unités simples et analysables. Les descripteurs peuvent alors décrire des chemins de récupération soumis à un timelock et des conditions à plusieurs parties qu’une phrase de récupération seule ne pourrait jamais exprimer.
- Bitcoin Core a fait des portefeuilles à descripteurs le choix par défaut pour les nouveaux portefeuilles dans la version 23 (2022), et la version 30 (2025) a entièrement supprimé les portefeuilles hérités (legacy) ; les anciens ne peuvent plus qu’être migrés. Les portefeuilles fondés sur des phrases de récupération BIP39 tirent la même leçon : pour tout ce qui dépasse un portefeuille standard à clé unique, le descripteur doit être sauvegardé avec la phrase de récupération. Si ces données ne compromettent pas la sécurité des clés privées en cas de fuite, puisqu’elles ne contiennent que des informations publiques, elles doivent néanmoins être protégées pour préserver la confidentialité, car elles révèlent précisément quelles adresses un utilisateur contrôle et leur structure de dérivation.
- Pour le constater en pratique, créez un nouveau portefeuille dans Bitcoin Core et exécutez « listdescriptors » pour afficher ses descripteurs, chacun se terminant par une somme de contrôle après « # ». Copiez-en un, modifiez un seul caractère et passez-le à « getdescriptorinfo » : Bitcoin Core le rejette avec une erreur de somme de contrôle. Notez que « listdescriptors » seul n’affiche que les clés publiques, ce qui suffit pour une copie en lecture seule (watch-only) ; pour restaurer la capacité de dépenser, il faut « listdescriptors true », qui inclut les clés privées et doit donc être protégé en conséquence, ou une sauvegarde du fichier du portefeuille.
Faits clés
- BIP380 définit les descripteurs de script de sortie comme un langage standard pour décrire les scripts de sortie des portefeuilles HD.
- Un descripteur inclut explicitement le type de script, l’origine de la clé (empreinte/chemin), les clés publiques et les plages d’indices.
- La somme de contrôle ajoutée après « # » vérifie l’intégrité de la chaîne de descripteur contre les fautes de frappe.
- La version 23 de Bitcoin Core (2022) a fait des portefeuilles à descripteurs le choix par défaut lors de la création de nouveaux portefeuilles.
- Miniscript (BIP379) permet aux descripteurs de représenter de manière sécurisée des scripts complexes tels que multisig et timelocks.
- Les portefeuilles matériels exportent des descripteurs ne contenant que des données publiques, ce qui permet de signer sur un appareil isolé (air-gapped) tout en s’appuyant sur des nœuds en ligne.
Exercice neuf, six, trois, un
9RassemblerÉnumérez 9 types de scripts de sortie ou configurations de portefeuille différents (par exemple, P2PKH, P2SH-P2WSH, multisig 2-sur-3). Pour chacun, indiquez quelles données précises sont nécessaires pour le restaurer.
6RegrouperRegroupez les 9 en 6 catégories selon qu’un chemin BIP44 standard suffit ou que des données de descripteur explicites sont indispensables à une restauration correcte.
3DistillerRéduisez les 6 groupes à 3 raisons fondamentales expliquant pourquoi les chemins de dérivation implicites échouent pour les types de portefeuilles modernes.
1CristalliserRédigez 1 phrase expliquant ce qu’un descripteur ajoute à une phrase de récupération pour rendre la restauration déterministe.
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.