Aller au contenu
buybitcoinsmart

Glossaire / Référence pour développeurs

Somme de contrôle de descripteur

Qu'est-ce qu'une somme de contrôle de descripteur ?
Une somme de contrôle de descripteur est le code de huit caractères qui suit le dièse dans un descripteur de sortie, un code BCH qui détecte les fautes de frappe et de copie avant qu'un portefeuille n'importe les mauvaises clés.

Spécifié dans BIP-380.

Le code se trouve à la fin d'un descripteur, après un seul dièse, dans le même alphabet de 32 caractères que bech32. Le BIP-380 garantit que toute erreur touchant trois symboles ou moins est détectée dans un descripteur allant jusqu'à 49 154 caractères, et qu'une erreur aléatoire passe inaperçue environ une fois sur un billion. Sans cette vérification, un seul caractère erroné dans une sauvegarde multisig vous laisse devant des adresses qui ne contiennent rien.

Comment cela fonctionne

La somme de contrôle de descripteur est un code BCH calculé sur le texte du descripteur plutôt qu'un hachage de celui-ci, et c'est ce qui procure les garanties de détection. Le BIP-380 fixe un alphabet d'entrée de 95 caractères et le répartit en trois groupes, plaçant dans le premier les caractères sans protection propre : chiffres, crochets, barres obliques, l'astérisque joker et les minuscules a à h, où se trouvent les clés encodées en hexadécimal et les chemins de dérivation. Le texte de la spécification parle de trois groupes de 32, bien que son code de référence en utilise 32, 32 et 31.

Chaque caractère contribue un symbole, sa position dans son groupe, et après chaque troisième symbole un quatrième est inséré, portant les trois numéros de groupe combinés, si bien que trois caractères deviennent quatre symboles. Une modification qui ne fait que déplacer un caractère dans son groupe, ou qui ne change que le groupe auquel il appartient, perturbe exactement un symbole. C'est pourquoi une erreur de casse compte comme exactement une erreur de symbole, et pourquoi un seul caractère mis en majuscule est toujours détecté.

Les garanties diminuent à mesure que la chaîne s'allonge. Une erreur d'un symbole est toujours détectée ; deux ou trois le sont toujours jusqu'à 49 154 caractères, quatre jusqu'à 507 caractères, et cinq jusqu'à 77 caractères, le code étant réglé pour minimiser les erreurs de cinq symboles non détectées jusqu'à 387. Le fichier descriptors.md de Bitcoin Core cite la borne de quatre erreurs comme étant de 501 caractères plutôt que 507 et situe le risque résiduel à environ une chance sur un billion. Le descripteur à clé unique de ce document fait 140 caractères, dans toutes les bornes ; son exemple multipath 2-sur-3 fait 439, au-delà de la fenêtre de cinq symboles et dans celle de quatre symboles.

Les clés étendues se défendent déjà. Le BIP-380 note qu'une xpub sort du premier groupe et porte son propre mécanisme de somme de contrôle, si bien qu'une expression de clé finit couverte deux fois.

Où le voir

Les vecteurs de test du BIP-380 sont le moyen le plus court de voir une somme de contrôle de descripteur à l'œuvre. La chaîne valide est raw(deadbeef)#89f8spxm, et les quasi-réussites que la spécification rejette comprennent l'absence de somme de contrôle, un dièse seul, une somme de contrôle de neuf caractères, une somme de contrôle de sept caractères, raw(deedbeef) avec l'ancienne somme de contrôle inchangée, et une charge utile utilisant un caractère hors de l'alphabet d'entrée.

Bitcoin Core imprime la somme de contrôle en sortie et l'exige en entrée. Chaque RPC qui renvoie un descripteur y joint les huit caractères, tandis que seuls certains en exigent une en entrée, parmi lesquels deriveaddresses et importdescriptors. Pour une ligne que vous avez saisie ou modifiée à la main, getdescriptorinfo renvoie la somme de contrôle correcte.

La somme de contrôle reste facultative pour l'analyse, et le BIP-380 permet aux applications de rejeter les descripteurs qui n'en ont pas. Attendez-vous à la voir lorsque vous déplacez un montage multisig entre un coordinateur, une machine de secours et une feuille de papier : ces huit caractères sont la seule partie qui confirme que le reste est arrivé intact.

Somme de contrôle de descripteur vs bech32

Une somme de contrôle bech32 protège une adresse et une somme de contrôle de descripteur protège une définition de portefeuille, et les tailles en jeu expliquent la différence de conception. Le BIP-173 plafonne une chaîne bech32 à 90 caractères et consacre les six derniers caractères de la partie données à la somme de contrôle, sur le même alphabet de 32 symboles. Un descripteur ne subit pas un tel plafond et doit couvrir aussi les crochets, les virgules, les guillemets et les espaces, c'est pourquoi le BIP-380 développe le texte en symboles de position avec un symbole de groupe intercalé et en consacre huit.

Les deux écrivent ce résultat dans le même alphabet, qpzry9x8gf2tvdw0s3jn54khce6mua7l, et c'est là que commence la confusion. Ce qui échoue diffère. Une adresse bech32 dont la somme de contrôle échoue ne peut pas être payée ; un descripteur dont la somme de contrôle échoue est un portefeuille que vous ne pouvez pas restaurer.

À ne pas confondre avec

Questions fréquentes

Que se passe-t-il si j'importe un descripteur dont la somme de contrôle est erronée ?

Bitcoin Core le rejette d'emblée sur les RPC qui exigent une somme de contrôle, notamment importdescriptors et deriveaddresses, donc rien n'est importé. Ce refus est le but : sans lui, un seul caractère mal saisi vous donnerait un portefeuille d'apparence valide qui surveille des adresses ne contenant aucune de vos cryptomonnaies.

Puis-je simplement supprimer les huit caractères après le dièse ?

Le BIP-380 rend la somme de contrôle facultative pour l'analyse, mais il permet aussi aux logiciels de rejeter tout descripteur qui arrive sans elle, et Bitcoin Core fait exactement cela sur certains RPC. Conservez la somme de contrôle avec le descripteur dans chaque sauvegarde, car c'est la seule partie de la ligne qui prouve que le reste est arrivé intact.

Comment calculer la somme de contrôle d'un descripteur que j'ai écrit à la main ?

Faites passer la chaîne par l'appel RPC getdescriptorinfo de Bitcoin Core, qui renvoie les huit caractères corrects pour celle-ci. Le BIP-380 publie aussi l'implémentation de référence, descsum_create, si vous préférez la calculer vous-même.

À lire ensuite

Termes associés

Plus de termes : Référence pour développeurs

Lire cette page en anglais