Aller au contenu
buybitcoinsmart

Glossaire / Adresses et clés

Code de chaîne

Qu'est-ce qu'un code de chaîne ?
Un code de chaîne est constitué des 32 octets d'entropie supplémentaire portés par chaque clé d'un portefeuille HD, qui entrent dans chaque dérivation enfant afin que les clés ne puissent pas être devinées à partir de leurs voisines.

Spécifié dans BIP-32.

La moitié de chaque clé étendue n'est pas une clé du tout. Le BIP-32 divise un hachage de 512 bits en une clé de 256 bits et un code de chaîne de 256 bits, et une chaîne xpub porte les deux, soit 111 caractères au total. Si vous communiquez un xpub, vous communiquez le code de chaîne avec lui, et c'est ce qui permet au destinataire de dériver vos adresses futures.

Comment cela fonctionne

Un code de chaîne opère à l'intérieur d'un seul appel HMAC. La dérivation d'un enfant exécute HMAC-SHA512 avec le code de chaîne parent comme clé et la clé publique parent augmentée d'un index de quatre octets comme message. Le résultat de 64 octets se divise en deux : les 32 octets de gauche sont ajoutés à la clé privée parent modulo l'ordre de la courbe pour donner la clé privée enfant, et les 32 octets de droite deviennent le code de chaîne propre à l'enfant, qu'il utilisera pour ses propres enfants.

L'intérêt du sel tient à qui peut parcourir l'arbre. Une clé publique seule ne dérive rien, car la fonction de dérivation ne s'exécute pas sans le code de chaîne correspondant. C'est pourquoi une clé publique étendue n'est pas simplement une clé publique au nom plus long. C'est une clé publique plus son code de chaîne, et confier cette paire à quelqu'un transforme un point sur une courbe en une branche illimitée et énumérable d'adresses que vous n'avez pas encore utilisées.

Le BIP-32 documente le risque qui en découle. Si un attaquant détient votre clé publique étendue et obtient aussi une clé privée enfant non renforcée, la soustraction du décalage dérivé permet de retrouver la clé privée parent, et avec elle chaque clé voisine et chaque descendante. La dérivation renforcée existe pour couper cette voie : à une étape renforcée, le message haché contient la clé privée parent plutôt que la clé publique, si bien qu'aucun élément public ne permet à quiconque de remonter.

Où vous le rencontrez

Vous ne saisissez jamais un code de chaîne, et aucun portefeuille grand public n'en affiche isolément. Il circule à l'intérieur d'une clé étendue. Les chaînes Base58Check commençant par xpub ou xprv se décodent en 78 octets agencés en 4 octets de version, 1 octet de profondeur, une empreinte parent de 4 octets, un numéro d'enfant de 4 octets, le code de chaîne de 32 octets, et enfin la clé de 33 octets, ce qui explique qu'un xpub atteigne 111 caractères de texte.

C'est dans les outils de développement que le champ devient visible en tant que champ. La RPC deriveaddresses de Bitcoin Core travaille sur des descripteurs qui intègrent des clés étendues, des bibliothèques comme python-bip32 renvoient le code de chaîne comme attribut distinct, et un dispositif de signature qui exporte un compte pour une configuration en lecture seule exporte exactement cette paire.

Le bon niveau de prudence est celui que vous appliqueriez à un historique complet de transactions, pas celui que vous appliqueriez à un mot de passe. Un code de chaîne ne peut pas signer, donc seul il ne vous fait rien perdre. Entre les mains d'une société d'analyse, d'une sauvegarde cloud ou de quiconque a collé un xpub dans un ticket d'assistance, il expose chaque paiement de cette branche, passé et futur, et il n'existe aucun moyen de révoquer cet accès par la suite.

Code de chaîne vs clé privée

Un code de chaîne et une clé privée sont tous deux 32 octets d'apparence aléatoire, et un seul des deux peut dépenser. La clé privée produit des signatures. Le code de chaîne ne produit rien d'autre que davantage de dérivation, et c'est précisément pourquoi on le sous-estime : parce qu'il ne peut pas déplacer de fonds, des clés publiques étendues se retrouvent collées dans des feuilles de calcul partagées, des rapports de bogues et des applications mobiles par des personnes qui ne feraient jamais la même chose avec une clé. Le résultat est une fenêtre permanente sur leurs finances plutôt qu'un vol, et les deux défaillances méritent des noms différents.

À ne pas confondre avec

Questions fréquentes

Un code de chaîne est-il secret ?

Ce n'est pas un secret de dépense, mais c'est un secret de confidentialité. Quiconque détient votre code de chaîne et la clé publique correspondante peut dériver toutes les adresses de cette branche et lire l'historique complet, donc traitez un xpub exporté comme une donnée financière privée.

Dois-je un jour noter mon code de chaîne ?

Non. Votre phrase de récupération régénère la clé maître et chaque code de chaîne en dessous, donc sauvegarder les mots couvre tout l'arbre. Les codes de chaîne n'apparaissent que lorsque vous exportez une clé étendue ou travaillez avec du code de dérivation brut.

Termes associés

Plus de termes : Adresses et clés

Lire cette page en anglais