Aller au contenu principal
BIP

BIP-350

BIP-350 définit Bech32m, variante de Bech32 pour Taproot. Corrige une faiblesse mineure du Bech32 original.

La faille subtile de Bech32

BIP-173 introduisait Bech32, qui semblait robuste. Mais en 2020, le chercheur Christopher Coverdale a remarqué une faiblesse : pour certaines longueurs d'adresse, l'insertion ou la suppression d'un q en fin de payload ne déclenchait pas le checksum. Ce caractère vaut 0 dans l'alphabet Bech32, et il pouvait donc « disparaître » sans alerte. Pour SegWit v0, le risque était négligeable (longueurs fixes connues), mais pour des versions de témoin futures (Taproot, et au-delà), cela aurait pu causer de vraies pertes de fonds.

La correction : changer la constante

BIP-350, rédigé par Pieter Wuille en septembre 2020, propose une variante simple : changer la constante BCH du calcul de checksum de 1 à 0x2bc830a3. Mathématiquement, cela élimine la faiblesse q tout en gardant exactement les mêmes propriétés (lisibilité, alphabet, format général).

Usage par version de témoin

| Version SegWit | Type | Encodage | |----------------|------|----------| | v0 | P2WPKH / P2WSH | Bech32 (BIP-173) | | v1 | P2TR (Taproot) | Bech32m (BIP-350) | | v2+ (futur) | À définir | Bech32m |

C'est pour ça qu'une adresse Taproot commence par bc1p (pour version 1) tandis qu'une adresse SegWit v0 commence par bc1q (pour version 0). Le préfixe bc1 reste, mais le 6e caractère indique la version.

Compatibilité

BIP-350 n'est pas un soft fork : c'est un changement d'encodage purement côté wallet. Un wallet qui supporte Bech32 mais pas Bech32m ne peut pas envoyer à des adresses Taproot, mais peut continuer à envoyer à des adresses SegWit v0. Une période de transition (2020-2022) a vu les exchanges déployer progressivement le support.

Détails techniques

def bech32m_polymod(values):
    GEN = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]
    chk = 1
    for v in values:
        b = chk >> 25
        chk = ((chk & 0x1ffffff) << 5) ^ v
        for i in range(5):
            chk ^= GEN[i] if (b >> i) & 1 else 0
    return chk ^ 0x2bc830a3  # ← constante BIP-350

À retenir

BIP-350 est l'illustration parfaite d'une correction discrète dans Bitcoin : aucune perte rétroactive, aucune confusion, juste un changement de constante qui sécurise les versions de témoin futures. C'est l'esprit Bitcoin : prudent, méticuleux, sans tambour.

Termes lies

← Retour au glossaire complet

Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.