Glossaire / Adresses et clés
Clé parente
Aussi appelé Clé publique parente, Clé privée parente, Parent key, Parent public key.
- Qu'est-ce que la clé parente ?
- La clé parente se situe un niveau directement au-dessus d'une autre clé dans l'arborescence d'un portefeuille HD, et chaque clé étendue porte quatre octets qui identifient sa propre clé parente.
Spécifié dans BIP-32.
La parenté dans le BIP-32 est une relation, pas un rang. La clé maîtresse est la seule clé sans parent, et elle consigne ce fait avec une empreinte parente de quatre octets nuls et une profondeur de 0. Toutes les autres nomment leur parent dans les premiers octets de leur propre sérialisation, ce qui permet au logiciel de déterminer à quel endroit appartient une clé isolée.
Comment cela fonctionne
Une clé parente est identifiée par une empreinte plutôt que par la clé elle-même. Prenez la clé publique compressée du parent, hachez-la avec SHA-256 puis RIPEMD-160, et conservez les quatre premiers octets du résultat. Ces quatre octets occupent, dans la clé étendue de 78 octets de l'enfant, une position fixe, immédiatement après l'octet de profondeur et avant l'index de l'enfant.
Quatre octets représentent 4 294 967 296 valeurs possibles, ce qui fait d'une empreinte une étiquette plutôt qu'une preuve. Le BIP-32 précise explicitement que les empreintes peuvent entrer en collision et que les implémentations ne doivent pas en dépendre pour la sécurité. Elles existent pour qu'un portefeuille puisse trier rapidement les clés dans la bonne arborescence, et toute vérification réelle suppose de dériver la clé et de comparer le résultat.
Le parent fournit aussi les deux ingrédients nécessaires à une dérivation : son code de chaîne et son matériel de clé. C'est pourquoi les clés étendues circulent par paire. Donnez à quelqu'un une clé publique parente sans le code de chaîne et aucun enfant ne peut en être calculé.
Où le voir
L'empreinte de la clé maîtresse est l'identifiant que l'on rencontre le plus souvent, car les descripteurs et les dispositifs de signature la citent tous les deux.
Un descripteur de script de sortie l'écrit entre crochets avant la clé étendue, comme dans wpkh([1a2b3c4d/84h/0h/0h]xpub.../0/*). La partie entre crochets indique de quel portefeuille la clé provient et par quel chemin, de sorte qu'un signataire qui lit le descripteur peut dire si on lui demande de signer avec une clé qu'il détient réellement. Les transactions bitcoin partiellement signées au titre du BIP-174 portent le même appariement pour chaque entrée et chaque sortie, ce qui permet à un portefeuille matériel de décider hors ligne qu'une sortie correspond à sa propre monnaie rendue plutôt qu'à l'adresse d'un tiers.
C'est avec les portefeuilles multisignature que cela cesse d'être anecdotique. Une configuration deux sur trois dans Sparrow affiche une empreinte de clé maîtresse pour chaque cosignataire, et reconstruire ce portefeuille plus tard nécessite les trois clés publiques étendues ainsi que les phrases de récupération. Écrire l'empreinte de chaque appareil sur sa carte de sauvegarde est le moyen le moins coûteux de distinguer trois cartes de phrases de récupération autrement identiques des années plus tard, et ceux qui ont omis cette étape ont passé des week-ends à dériver des clés pour déterminer quelle carte appartient à quel appareil.
Une dernière remarque pratique. Un portefeuille restauré qui affiche une empreinte inconnue n'est généralement pas une sauvegarde corrompue, mais une phrase secrète mal saisie. Une phrase secrète BIP-39 produit une clé maîtresse différente et donc une empreinte différente, si bien que comparer cette courte valeur est un moyen rapide et sûr de confirmer que vous avez saisi correctement la phrase secrète avant de chercher à examiner un solde.