Qu'est-ce qu'une XPUB (clé étendue) ?

Accueil/Sécuriser ses bitcoins/Qu'est-ce qu'une XPUB (clé étendue) ?

Sécuriser ses bitcoins

Qu'est-ce qu'une XPUB (clé étendue) ?

Si vous utilisez votre propre portefeuille pour sécuriser vos bitcoins, vous avez sûrement déjà rencontré le terme de « XPUB ». Cet acronyme ésotérique décrit simplement une clé publique étendue. Ce type de clé permet de dériver d’autres clés publiques enfants afin de consulter le solde d’un portefeuille, sans pour autant permettre la dépense des bitcoins associés.

Grâce à cet article, vous allez enfin comprendre le rôle de la XPUB et la construction d’une clé étendue. Pour ce faire, il est essentiel de connaître quelques notions sur le fonctionnement d’un portefeuille déterministe et hiérarchique. Nous allons également revoir tout cela ensemble.

La structure du portefeuille HD

Si vous avez suivi les précédents articles pédagogiques du blog de Bitstack, vous savez dorénavant que les bitcoins sont représentés sur le protocole par des UTXO, qui sont essentiellement des morceaux de bitcoins. Ces UTXO sont généralement sécurisés par une paire de clés cryptographiques. On utilise ainsi une clé publique pour recevoir des bitcoins, et l'on utilise la clé privée correspondante pour dépenser ces mêmes bitcoins en signant une transaction. Les adresses de réception, quant à elles, sont simplement un hachage d’une clé publique, mis dans un format spécifique.

En théorie, il serait donc possible de n’utiliser qu’une seule paire de clés pour gérer tous ses bitcoins. Cependant, cette pratique est déconseillée puisqu’elle est dangereuse pour notre vie privée. Pour conserver une forme de confidentialité, il est conseillé de générer une nouvelle paire de clés pour toute nouvelle réception de bitcoins. 

Cette recommandation provient de Satoshi Nakamoto lui-même. Il en parle dans la partie 10 du White Paper de Bitcoin.

Par la suite, des développeurs ont donc conçu une structure de portefeuille facilitant la dérivation de plusieurs clés. C’est le portefeuille dit « déterministe hiérarchique » (HD). Son principe est qu’une multitude de paires de clés uniques sont générées à partir d’une seule information : la graine (ou « seed » en anglais). Cette graine peut être encodée dans une forme lisible par l’homme afin d’obtenir la fameuse phrase de récupération de 12 ou de 24 mots. 

➤ En savoir plus sur les différentes catégories de portefeuilles Bitcoin.

De cette manière, en ayant connaissance uniquement de sa phrase de récupération, un utilisateur est en capacité de régénérer l’ensemble de ses clés donnant accès à tous ses bitcoins.

Il faut imaginer un portefeuille HD comme un arbre. On a une graine à la base du portefeuille qui permet de faire un tronc. Le tronc permet de faire des branches. Puis, chaque branche peut ensuite elle-même faire des sous branches, et ainsi de suite. Vos adresses de réception et les clés permettant de les dépenser sont donc le fruit de plusieurs profondeurs de dérivation depuis votre graine.

Ce que j’appelle une « dérivation » est simplement l’application d’une fonction cryptographique à sens unique qui prend notamment en entrée la clé parent et produit une clé enfant en sortie.

➤ Découvrir la construction d’une phrase de récupération (24 mots).

La dérivation des paires de clés cryptographiques

Afin de différencier les paires de clés qui sont au même étage de dérivation, on va leur attribuer un index. C’est simplement un nombre qui permet de numéroter chaque clé. La première paire de clés dérivée depuis une paire parent aura l’index n° 0, la deuxième aura l’index n° 1, et ainsi de suite. 

De cette manière, on peut donc dériver une multitude de clés cryptographiques différentes à partir de notre graine. Cependant, en cas de récupération de notre portefeuille, il faut pouvoir retrouver tous ces index utilisés lors de la dérivation. Ainsi, le BIP43 et le BIP44 sont venus établir un standard de dérivation pour nos portefeuilles. Les logiciels réputés se plient à cette règle afin qu’il soit simple de migrer d’un portefeuille Bitcoin à un autre, tout en facilitant le processus de récupération en cas de perte.

Enfin, chaque étage de dérivation est utilisé pour transmettre une information en fonction de l’index utilisé pour dériver la clé.

Par exemple, l’index 84’ est utilisé au premier étage de dérivation pour indiquer que l’on est sur un portefeuille SegWit V0 (avec les adresses commençant par « bc1q… »). Le deuxième étage de dérivation est utilisé pour séparer les différentes cryptomonnaies dans un même wallet. Et le troisième étage permet de générer plusieurs comptes séparés. 

C’est justement ce troisième étage qui nous intéresse pour notre XPUB.

Les clés étendues (xpub, zpub…)

Dans les parties précédentes, nous avons vu qu’un portefeuille HD est constitué d’une succession de dérivation à partir des clés parents, pour déterminer des clés enfants. En réalité, pour pouvoir réussir chaque dérivation, il ne suffit pas de disposer de la clé parent, mais il faut également utiliser une autre information que l’on appelle « code de chaîne ». 

Pour vous expliquer simplement, un code de chaîne est une information unique associée à chaque paire (clé publique et clé privée), qui permet d’ajouter une couche supplémentaire de sécurité au portefeuille.

Techniquement, ce que l’on appelle une clé étendue est un assemblage d’une clé cryptographique avec son code de chaîne et quelques métadonnées. Ainsi, la clé étendue permet de rassembler en une seule chaîne de caractères, l’ensemble des informations requises à la dérivation de clés enfants. 

Pour résumer simplement : clé étendue = clé + code de chaîne.

L’assemblage d’une clé publique avec son code de chaîne nous donne une clé publique étendue. Ce type de clé permet de dériver uniquement des clés publiques enfants. C’est ce que vous connaissez sous le nom d’une « XPUB », d’une « ZPUB » ou encore d’une « YPUB ».

L’assemblage d’une clé privée avec son code de chaîne nous donne une clé privée étendue. Ce type de clé permet de dériver tout type de clés enfants, à la fois des clés publiques et des clés privées. 

Autrement dit, une clé privée étendue permet d’accéder à tous les bitcoins sécurisés par les clés enfants, alors que la clé publique étendue (XPUB) permet uniquement de consulter le solde des clés et de dériver de nouvelles adresses. C’est pour cette raison que l’on vous demande de renseigner votre XPUB sur un portefeuille dit « Watch-only ».

Les clés étendues standards se trouvent généralement au troisième étage de dérivation du portefeuille HD. C’est celui qui est dédié aux comptes.

📌 Le saviez-vous ? Contrairement à ce que l’on pourrait penser, il est possible de dériver une multitude de XPUB différentes sur un même portefeuille. Chaque nouvelle XPUB nous donne un nouveau compte. Toutefois, puisque la majorité des individus n’utilisent qu’un seul compte sur leur portefeuille Bitcoin, ils ne disposent alors que d’une seule XPUB sur ce portefeuille.

Conclusion

Une clé étendue est ainsi une clé parent spéciale qui permet de dériver des paires de clés enfants. Ce que l’on appelle une clé publique étendue, ou une « xpub », permet uniquement de dériver des clés publiques enfants ainsi que des adresses de réception.

Si vous avez accès à la xpub de votre portefeuille, vous pouvez alors consulter le solde de celui-ci, retracer ses transactions, et créer de nouvelles adresses de réception. En revanche, il vous sera impossible de dépenser les bitcoins qui y sont associés, puisque la XPUB ne permet pas d’accéder aux clés privées du portefeuille.

➤ En savoir plus sur la Passphrase BIP39 et son rôle dans un portefeuille Bitcoin.

Vous avez aimé cet article ?

Inscrivez-vous à notre newsletter pour recevoir les prochaines publications.

Ces articles pourraient vous plaire

Découvrez les derniers articles publiés.

Envie de lancer votre épargne en Bitcoin ?

Découvrez Bitstack, l’application la plus simple d'Europe pour investir dans le Bitcoin !

Télécharger Bitstack