Aller au contenu
buybitcoinsmart

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.

À ne pas confondre avec

Questions fréquentes

Pourquoi ma plateforme d'échange dit-elle qu'une adresse bc1 est invalide ?

Parce que le validateur d'adresses de la plateforme a été écrit avant l'existence de bech32 et ne reconnaît que les chaînes Base58. Votre adresse est correcte. Retirez vers un format que cette plateforme accepte, dérivé du même portefeuille, et déplacez les bitcoins à partir de là.

Les adresses bech32 sont-elles sensibles à la casse ?

Non. Une chaîne bech32 est valide entièrement en minuscules ou entièrement en majuscules, et mélanger les deux la rend invalide. Les portefeuilles affichent les minuscules, tandis que les codes QR utilisent les majuscules, car cela active un mode d'encodage plus compact.

À lire ensuite

Termes associés

Plus de termes : Adresses et clés

Lire cette page en anglais