Code de chaîne maître
Le code de chaîne maître est la composante du nœud HD racine, complémentaire de la clé maîtresse. Il permet de dériver l'arbre entier des clés. Combiné à la xprv ou xpub, il forme la clé étendue. C'est l'autre moitié du secret racine.
La racine du wallet HD
Quand un wallet HD est initialisé depuis une seed (BIP-39 ou BIP-32), une fonction HMAC-SHA512 produit deux secrets racine de 32 octets chacun :
I = HMAC-SHA512(key="Bitcoin seed", data=seed)
master_private_key = I[0:32]
master_chain_code = I[32:64]
La première moitié est la clé maîtresse, la seconde le code de chaîne maître. Les deux ensemble forment la racine m de l'arbre HD. Sans le chain code maître, on ne peut dériver aucun enfant de manière correcte : c'est l'ingrédient indispensable du HMAC qui sera appliqué à chaque étape de dérivation.
Symétrie entre privée et publique
| Élément | Combinaison à la racine | Utilité | |---------|--------------------------|---------| | xprv (root) | master_privkey + master_chain_code | Permet tout : signer, dériver hardened | | xpub (root) | master_pubkey + master_chain_code | Permet dériver non-hardened, suivre les soldes |
Le chain code est commun aux deux : on ne peut pas avoir de xprv ou de xpub sans le chain code correspondant. C'est ce qui rend la dérivation déterministe et reproduisible.
Importance pour la restauration
Quand on restaure un wallet à partir de la seed :
- La seed mnémonique BIP-39 est passée dans PBKDF2-SHA512 pour produire 64 octets de seed binaire
- Ces 64 octets passent dans HMAC-SHA512 avec la clé "Bitcoin seed"
- Les 32 premiers octets de sortie = master privkey
- Les 32 suivants = master chain code
Sans cette étape, la seed ne suffirait pas à reconstituer la racine HD complète. Cela explique pourquoi tous les wallets BIP-39 produisent exactement les mêmes adresses à partir d'une seed donnée (avec le même path).
Différence entre chain code maître et chain codes filles
Chaque clé dans l'arbre HD a son propre chain code, dérivé du parent via la même formule HMAC-SHA512. Le « chain code maître » est simplement le tout premier, celui de la racine. Tous les autres en descendent. Si l'on vous donne une xpub de niveau m/84'/0'/0' (compte 0 BIP-84), celle-ci contient le chain code de ce niveau, pas le chain code maître.
Sensibilité
Le chain code maître, combiné à la pubkey maîtresse, permet de dériver l'arbre complet des clés publiques. Pour un wallet legacy non-hardened à la racine, cela ouvrirait théoriquement aussi des attaques (rappel : dans BIP-32, m/0 sans hardened expose au risque privée-vers-parente). C'est pourquoi le standard impose des dérivations hardened au niveau purpose et account.
Pratique pour la backup
Il n'y a pas besoin de sauvegarder séparément le chain code maître : il est déterministiquement reconstruit à partir de la seed. Sauvegarder uniquement la seed BIP-39 (et l'éventuel passphrase BIP-39) suffit toujours à retrouver clé maîtresse + chain code maître + arbre entier.
À retenir
Le code de chaîne maître est l'« autre » moitié de la racine HD, indispensable à la dérivation déterministe. Il vit invisible à côté de la clé maîtresse, dérivé automatiquement depuis votre seed, et conditionne la cohérence cryptographique de l'ensemble du wallet.
Termes lies
- Clé maîtresseLa clé maîtresse est la racine d'un wallet HD, dérivée directement de la seed via HMAC-SHA512. Toutes les clés filles sont obtenues par dérivation à partir d'elle. La compromettre revient à perdre tout le wallet. Elle n'apparaît jamais dans les transactions.
- Code de chaîne (chain code)Le code de chaîne est une donnée auxiliaire de 32 octets utilisée dans la dérivation HD (BIP-32). Combiné à une clé, il permet de générer les clés filles. Sans lui, impossible de dériver la chaîne suivante. C'est un secret aussi sensible que la clé elle-même.
- Clé étendue (xprv/xpub)Une clé étendue est la concaténation d'une clé (privée ou publique) et de son code de chaîne. Elle permet de dériver toute une descendance de clés. Exposer une xpub permet de générer toutes les adresses publiques d'un compte. Il faut donc la traiter comme une donnée privée.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.