Glossaire / Adresses et clés
Bech32
- Qu'est-ce que Bech32 ?
- Bech32 est l'encodage d'adresse derrière les chaînes bc1q, un format base32 en minuscules dont la somme de contrôle de six caractères détecte toute erreur touchant jusqu'à quatre caractères.
Spécifié dans BIP-173.
Le BIP-173 a introduit bech32 en 2017 pour remplacer Base58Check sur les sorties SegWit. L'alphabet compte 32 caractères et omet délibérément "1", "b", "i" et "o" afin que des glyphes ressemblants ne puissent pas être confondus par erreur, et aucune chaîne bech32 ne dépasse 90 caractères. Quand un portefeuille rejette une adresse à l'instant où vous finissez de la coller, c'est la somme de contrôle bech32 qui a détecté le dommage.
Comment cela fonctionne
Une chaîne bech32 comporte trois parties dans un ordre fixe : un préfixe lisible par l'humain, le séparateur "1", et une section de données qui se termine par six caractères de somme de contrôle. Le réseau principal utilise le préfixe "bc", le testnet et le signet utilisent "tb", et le regtest utilise "bcrt", si bien que les premières lettres identifient le réseau avant que le portefeuille ne décode quoi que ce soit d'autre. Le séparateur est aussi la raison pour laquelle "1" est absent de l'alphabet. Il ne peut alors apparaître qu'une seule fois, à la frontière, et un analyseur trouve la coupure en balayant depuis la droite.
La somme de contrôle est un code BCH calculé sur toute la chaîne, préfixe inclus. Le BIP-173 garantit la détection de toute erreur touchant au plus quatre caractères et ramène la probabilité de manquer une erreur plus grande sous un sur un milliard. Base58Check n'offre rien de comparable : ses quatre octets finaux sont un hachage SHA-256 double tronqué, qui indique au portefeuille que quelque chose ne va pas sans préciser quoi.
La casse n'a aucune signification. Une adresse bech32 est valide entièrement en minuscules ou entièrement en majuscules, jamais mixte, et les portefeuilles affichent la forme en minuscules. Le BIP-173 demande des majuscules dans les codes QR, car les alphanumériques majuscules activent le mode alphanumérique du QR, qui range chaque caractère sur 5,5 bits au lieu des 8 qu'exige le mode octet, et produit un motif plus grossier sur lequel l'appareil photo d'un téléphone se verrouille plus vite.
Où le voit-on
Toute adresse bc1q est du bech32. Une adresse de 42 caractères encode un programme témoin de 20 octets et paie vers une clé unique ; une adresse de 62 caractères encode un programme de 32 octets et paie vers un script. Les deux sont en version de témoin 0, et la version 0 est la seule que bech32 est désormais autorisé à porter.
L'encodage apparaît aussi ailleurs que dans les adresses. Les factures Lightning au titre de BOLT11 l'empruntent avec des préfixes tels que "lnbc", et elles ignorent sciemment le plafond de 90 caractères, car une facture porte un hachage de paiement, un montant, une description et des indications de routage plutôt qu'un seul programme court.
C'est sur un formulaire de retrait d'une plateforme d'échange que cela fait mal. Un validateur écrit avant 2017 ne reconnaît que les chaînes Base58 et répond "adresse invalide" à une adresse bc1q parfaitement valide. C'est une limitation de la plateforme et non de votre portefeuille, et la solution est de retirer vers un type d'adresse que la plateforme accepte, dérivé de la même phrase de récupération, plutôt que de chercher un autre logiciel.
Bech32 vs Bech32m
Bech32 et bech32m ne diffèrent que par une constante et rien d'autre. Les deux utilisent le même alphabet, la même disposition et les mêmes six caractères de somme de contrôle. Bech32m change la valeur combinée dans la somme de contrôle, qui passe de 1 à 0x2bc830a3, et la répartition est décidée par la version de témoin : les sorties de version 0 gardent bech32, les versions 1 à 16 utilisent bech32m. Un logiciel qui traite les deux comme interchangeables acceptera des chaînes qu'il devrait rejeter, ce qui est précisément la défaillance que le BIP-350 a été écrit pour prévenir.
Bech32 vs Base58Check
Bech32 et Base58Check sont des encodages concurrents, pas des types d'adresses concurrents. Base58Check enveloppe un octet de version et un hachage de 20 octets avec une somme de contrôle de quatre octets et produit les chaînes sensibles à la casse commençant par 1 et 3. Bech32 encode une version de témoin avec un programme témoin et produit des chaînes insensibles à la casse commençant par bc1. Aucun des deux encodages ne décide à quoi les bitcoins sont verrouillés. Ce qu'ils décident, c'est la fiabilité avec laquelle un humain peut copier la chaîne, la taille que le code QR doit avoir, et la vigueur avec laquelle le logiciel se plaint quand un caractère disparaît.