Aller au contenu
buybitcoinsmart

Glossaire / Adresses et clés

Base58Check

Aussi appelé Base58.

Qu'est-ce que Base58Check ?
Base58Check est le codage textuel d'origine du bitcoin, qui transforme des données binaires en une chaîne de 58 caractères faciles à recopier et y ajoute une somme de contrôle de quatre octets pour détecter les fautes de frappe.

L'alphabet écarte les quatre caractères que l'on confond lorsqu'on recopie à la main : le zéro, le O majuscule, le I majuscule et le l minuscule. Une somme de contrôle de quatre octets, tirée d'un double SHA-256 de la charge utile, fait qu'une adresse mal saisie est rejetée par le portefeuille plutôt qu'envoyée dans le vide, avec environ une chance sur 4,29 milliards qu'elle passe.

Toute adresse commençant par 1 ou 3 est en Base58Check.

Comment cela fonctionne

Trois éléments entrent dans chaque chaîne Base58Check. Un octet de version placé au début indique de quel type de données il s'agit, la charge utile au milieu porte les octets proprement dits, et quatre octets de somme de contrôle à la fin sont les quatre premiers octets de SHA-256 appliqué deux fois à la version et à la charge utile réunies. Le résultat est ensuite écrit en base 58 plutôt qu'en base 16, ce qui le raccourcit nettement et supprime les glyphes ambigus.

C'est l'octet de version qui produit les caractères de tête familiers. La version 0x00 marque une adresse pay-to-public-key-hash et donne un 1 initial ; la version 0x05 marque une adresse pay-to-script-hash et donne un 3 initial ; la version 0x80 marque une clé privée au format Wallet Import Format, donnant 5, K ou L. Les clés étendues utilisent plutôt une version de quatre octets, 0x0488B21E, ce qui explique pourquoi toute xpub commence par ces quatre lettres.

Les octets nuls initiaux reçoivent un traitement particulier, car la conversion de base les écarterait sinon. Chaque octet 0x00 au début de la charge utile est écrit sous la forme d'un caractère « 1 » supplémentaire, ce qui explique pourquoi certaines adresses historiques sont plus courtes ou plus longues que leurs voisines alors qu'elles portent la même quantité de données.

Où le rencontre-t-on

Base58Check est partout dans la première décennie du bitcoin et nulle part dans ses formats les plus récents. Les adresses historiques, les adresses pay-to-script-hash, les clés privées WIF et les clés étendues xprv et xpub que vous exportez d'un portefeuille l'utilisent toutes. Rien de ce qui commence par bc1 ne l'utilise.

Deux propriétés expliquent à la fois cette popularité et cet abandon. La sécurité de transcription était le but : l'alphabet a été conçu pour qu'une adresse lue à voix haute, recopiée depuis un écran ou gravée sur une plaque métallique survive à une manipulation humaine, et la somme de contrôle transforme les erreurs restantes en refus plutôt qu'en pertes. Mais le codage est sensible à la casse, ce qui force un code QR en mode octet au lieu du mode alphanumérique plus compact, et il peut seulement vous dire que quelque chose ne va pas, jamais quoi ni où.

Base58Check vs Bech32

Base58Check détecte les erreurs et bech32 les corrige. Bech32, spécifié dans le BIP-173 et adopté pour les adresses SegWit natives en 2017, utilise un alphabet de 32 caractères sans aucune majuscule, de sorte que la chaîne entière tient dans le mode alphanumérique d'un code QR et se scanne depuis une image plus petite. Sa somme de contrôle BCH garantit la détection de jusqu'à quatre caractères erronés et peut indiquer quelles positions sont suspectes, plutôt que de simplement échouer.

Le successeur a eu besoin d'un correctif pour lui-même. Une faiblesse d'extension de longueur dans la somme de contrôle bech32 d'origine faisait que certaines adresses pouvaient gagner ou perdre un dernier caractère sans détection, aussi le BIP-350 a défini bech32m, qui change une constante et est ce qu'utilisent les adresses Taproot commençant par bc1p. Base58Check reste valide et continuera de fonctionner indéfiniment, mais de nouveaux types d'adresses ne sont pas définis dans ce codage.

À ne pas confondre avec

Questions fréquentes

Pourquoi les adresses bitcoin ne contiennent-elles jamais un zéro ni un O majuscule ?

Parce que l'alphabet Base58 écarte délibérément 0, O, I et l, les caractères que l'on confond lorsqu'on recopie une chaîne à la main. Tout ce qui en contient un n'est pas une adresse bitcoin historique valide.

Une adresse Base58Check fonctionne-t-elle encore maintenant que bech32 existe ?

Oui. Les adresses historiques et les adresses pay-to-script-hash restent parfaitement valides et tous les portefeuilles les prennent en charge. De nouveaux types d'adresses sont définis plutôt en bech32 ou bech32m, et dépenser depuis celles-ci coûte moins cher, mais rien n'oblige à retirer les anciennes adresses.

Termes associés

Plus de termes : Adresses et clés

Lire cette page en anglais