Glossaire / Adresses et clés
Clé étendue
Aussi appelé xpub, xprv, Clé publique étendue, Clé privée étendue.
- Qu'est-ce qu'une clé étendue ?
- Une clé étendue associe une clé bitcoin ordinaire à un code de chaîne de 32 octets, et c'est ce couple qui permet à un logiciel de dériver toute une branche de clés en dessous.
Spécifié dans BIP-32.
Un xpub n'est pas une clé publique. C'est une structure de 78 octets : version, profondeur, empreinte du parent, index de l'enfant, le code de chaîne de 32 octets et la clé elle-même, le tout enveloppé en Base58Check pour produire une chaîne de 111 caractères. Confiez-la à un comptable et il pourra lire chaque adresse de cette branche et chaque satoshi qu'elle a jamais reçu, sans pouvoir dépenser quoi que ce soit.
Comment cela fonctionne
Une clé étendue existe parce qu'une clé nue ne peut pas produire d'enfants. La dérivation dans le BIP-32 hache le code de chaîne du parent avec son matériel de clé et un index, et le code de chaîne fournit l'entropie supplémentaire qui garde les clés sœurs sans lien entre elles. Retirez-le et il ne reste plus rien à partir de quoi dériver.
La sérialisation est fixée à 78 octets dans un ordre strict : 4 octets de version, 1 octet de profondeur, 4 octets d'empreinte du parent, 4 octets d'index de l'enfant, 32 octets de code de chaîne et 33 octets de données de clé. Une clé privée étendue complète son secret de 32 octets par un zéro en tête pour que les deux formes occupent la même largeur. Les octets de version créent le préfixe lisible : 0x0488B21E écrit xpub, 0x0488ADE4 écrit xprv, et les équivalents testnet écrivent tpub et tprv.
Deux fonctions de dérivation opèrent sur ces clés. La publique calcule des enfants non durcis à partir d'un xpub seul, ce qui permet à un processeur de paiement de générer des milliers d'adresses de facture sur un serveur web qui ne détient rien de dépensable. La privée calcule n'importe quoi, index durcis compris, et exige le xprv.
Vous rencontrerez aussi ypub, zpub et vpub. Ils viennent de la SLIP-0132, une convention qui réutilise la même disposition de 78 octets avec d'autres octets de version pour signaler un type de script. Bitcoin Core ne l'a jamais adoptée, et les descripteurs de script de sortie du BIP-380 ont remplacé l'idée proprement en nommant le type de script en toutes lettres, comme dans wpkh([1a2b3c4d/84h/0h/0h]xpub.../0/*).
Pourquoi cela compte quand vous achetez du bitcoin
Une clé publique étendue est la chose la plus sensible qu'on vous demandera jamais de partager sans qu'elle soit techniquement un secret, et la demande a généralement l'air banale.
Il existe trois raisons légitimes d'en exporter une. Configurer un portefeuille en lecture seule pour qu'un téléphone affiche le solde d'un portefeuille matériel. Fournir à un processeur de paiement auto-hébergé la branche dont il doit tirer ses adresses de facture. Assembler un multisig, où chaque cosignataire apporte un xpub et où tous sont nécessaires pour reconstruire le portefeuille plus tard, même si toutes les phrases de récupération survivent.
Tout le reste mérite la méfiance. Aucune plateforme d'échange examinée sur ce site n'a besoin d'une clé étendue pour vous envoyer un retrait ; il lui faut une adresse. Un agent du support qui demande un xpub pour vérifier votre portefeuille se livre au mieux à un exercice de profilage. Quiconque demande un xprv demande les bitcoins, et la bonne réponse est de mettre fin à la conversation.
La divulgation est aussi permanente d'une manière que les gens sous-estiment. Un xpub révèle non seulement le solde du jour mais chaque paiement de cette branche, passé et futur, parce que son détenteur peut continuer à dériver de nouvelles adresses longtemps après que vous avez cessé de lui parler. Il n'existe aucune révocation. Pour l'annuler, il faut générer une nouvelle phrase de récupération et déplacer chaque bitcoin, en payant des frais sur chaque entrée que vous détenez.
Un piège mérite ici une place à part. Si quelqu'un détient votre clé publique étendue et obtient aussi une seule clé privée enfant non durcie, il peut reconstruire la clé privée étendue parente et dépenser toute la branche. Le BIP-32 l'indique dans ses propres notes de sécurité. C'est pourquoi les niveaux de compte sont durcis, et pourquoi exporter une clé individuelle hors d'un portefeuille moderne, ce que quelques outils proposent encore, est une commodité dangereuse plutôt qu'utile.
Ce qu'un comptable peut et ne peut pas faire avec votre xpub
Confiez une clé publique étendue et la frontière est nette. Supposez que vous exportiez la clé publique étendue de compte pour m/84'/0'/0' depuis un portefeuille matériel et que vous l'envoyiez par courriel à qui prépare vos impôts.
Il peut dériver chaque adresse de réception et chaque adresse de monnaie sous ce compte, consulter chacune sur n'importe quel explorateur et reconstituer un historique complet et daté des montants entrants et sortants. Il peut totaliser votre solde actuel au satoshi près et continuer à le surveiller. Il peut dériver des adresses que vous n'avez pas encore utilisées et voir le moment où vous le faites.
Il ne peut rien signer. Les enfants durcis sont inaccessibles depuis le côté public, donc un compte frère tel que m/84'/0'/1' reste invisible pour lui, et la clé maîtresse aussi. Il ne peut récupérer aucune clé privée à partir de tout cela, à moins que vous ne lui remettiez séparément l'une des clés individuelles en dessous, qui est le cas d'échec décrit plus haut.
Clé étendue vs clé publique
Une clé publique est un point sur la courbe secp256k1, de 33 octets une fois compressée, et elle vérifie des signatures. Une clé publique étendue est ce même point plus un code de chaîne de 32 octets et quatre champs décrivant sa position, et elle peut produire des milliards d'autres clés publiques. Publier une clé publique divulgue l'information d'une seule sortie. Publier une clé publique étendue divulgue un portefeuille.
Clé étendue vs Wallet Import Format
Un xprv et une chaîne Wallet Import Format encodent tous deux du matériel de clé en Base58, et la ressemblance s'arrête là. Une chaîne WIF contient une clé privée avec un octet de réseau et une somme de contrôle, utile pour déplacer une seule clé legacy, et l'importer récupère exactement les bitcoins verrouillés sur cette clé. Un xprv contient une clé plus le code de chaîne et la position qui lui permettent de régénérer une branche illimitée. C'est l'asymétrie qui prend les gens au dépourvu : balayer une WIF vers un portefeuille moderne est un entretien de routine, tandis que coller un xprv dans un logiciel inconnu livre d'un coup tout ce qui se trouve en dessous.