Base58Check
Base58Check est un encodage utilisé pour les adresses Bitcoin legacy (1... ou 3...). Il omet certains caractères ambigus (0, O, I, l) et inclut un checksum. Il rend les adresses plus lisibles et évite les fautes de frappe. Il est progressivement remplacé par Bech32.
Pourquoi pas du Base64 ?
Satoshi voulait des adresses Bitcoin lisibles à l'œil et tapables à la main sans confusion. Base64 utilisait 0, O, I, l et +/= — autant de caractères trop ambigus ou non-URL-friendly. Base58 retire ces caractères problématiques, ne gardant que 58 symboles non confondables : les chiffres 1-9, les lettres A-Z et a-z minus les caractères piégeurs.
Le « Check » dans Base58Check
Encoder en Base58 seul ne suffit pas : une seule lettre erronée enverrait à une adresse différente, et les fonds seraient perdus. Base58Check ajoute un checksum de 4 octets :
checksum = SHA256(SHA256(prefix || payload))[:4]
encoded = Base58(prefix || payload || checksum)
Avant d'utiliser une adresse, tout wallet vérifie le checksum. La probabilité qu'une faute de frappe passe la validation est de 1/2³² (~ 0,000 000 023 %).
Cas d'usage
| Donnée | Prefix | Exemple | |--------|--------|---------| | P2PKH mainnet | 0x00 | 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa | | P2SH mainnet | 0x05 | 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy | | WIF (clé privée) | 0x80 | 5Hwgr3u458GLafKBgxtssHSPqJnYoGrSzgQsPwLFhLNYskDPyr | | Testnet P2PKH | 0x6F | mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef |
Limites de Base58Check
- Pas de détection d'erreur avancée : il sait juste dire « erreur ou pas ».
- Sensible à la casse :
1Abcet1aBcsont différents. - Mauvaise lisibilité QR : encode 4 octets de checksum, soit 5-6 caractères inutiles.
- Incompatible avec SegWit natif.
C'est pourquoi SegWit a introduit Bech32 (BIP-173), qui détecte et même corrige certaines erreurs, est insensible à la casse et donne des QR codes 30 % plus compacts. Taproot utilise sa variante Bech32m.
À retenir
Base58Check reste valide et utilisé pour les adresses « legacy » et les exports WIF, mais ne devrait plus être proposé par défaut. Les wallets modernes affichent Bech32 (bc1q...) ou Bech32m (bc1p...). Conserver son historique en Base58Check est cependant nécessaire pour interopérer avec les vieux logiciels.
Termes lies
- Bech32 / Bech32mBech32 est l'encodage des adresses SegWit (BIP-173), reconnaissable au préfixe « bc1 ». Il améliore la détection d'erreurs et la lisibilité. Bech32m (BIP-350) en est la variante pour Taproot. Plus efficace en QR code et plus sûr que Base58Check.
- P2PKHP2PKH (Pay-to-Public-Key-Hash) est le format historique d'adresse Bitcoin (préfixe 1...). Le script verrouille les fonds sur le HASH160 de la clé publique. Il dévoile la clé publique uniquement à la dépense. Toujours valide mais peu utilisé sur les nouveaux wallets.
- P2SHP2SH (Pay-to-Script-Hash, BIP-16) verrouille les fonds sur le hash d'un script de dépense. Permet des conditions complexes (multisig, timelock) avec des adresses commençant par 3.... Très utilisé pour les multisig avant l'ère SegWit. Il est désormais souvent imbriqué (P2SH-P2WPKH/P2WSH).
- WIF (Wallet Import Format)WIF est le format Base58 d'export d'une clé privée Bitcoin. Une clé WIF commence typiquement par K, L ou 5. Permet l'import d'une clé dans un autre wallet. À manier avec extrême précaution car équivalent à la possession des fonds.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.