SIGHASH flag
Un sighash flag détermine quelle partie de la transaction est signée (ALL, NONE, SINGLE, ANYONECANPAY...). Combinaisons pour cas avancés. Permet l'agrégation et l'amendement.
Définition et rôle
Le SIGHASH flag est un octet ajouté à la fin d'une signature numérique Bitcoin pour indiquer ce qui a effectivement été signé. Sans lui, impossible de savoir si la signature couvre toute la transaction ou seulement certaines parties. Il offre un mécanisme de flexibilité unique : on peut choisir si la signature « engage » l'utilisateur sur l'intégralité du contenu de la transaction ou seulement une portion.
Les principaux types
| Flag | Valeur | Couvre | |------|--------|--------| | SIGHASH_ALL | 0x01 | Tous les inputs et outputs | | SIGHASH_NONE | 0x02 | Tous les inputs, aucun output | | SIGHASH_SINGLE | 0x03 | Tous les inputs, l'output de même index | | ANYONECANPAY | 0x80 | Modificateur : ne signe que l'input courant |
Combinés, ces flags donnent par exemple SIGHASH_SINGLE | ANYONECANPAY (0x83), qui permet de signer uniquement son propre input et son propre output.
Pourquoi c'est utile
ALL est utilisé dans 99 % des paiements classiques : la signature couvre toute la transaction, rien ne peut être modifié sans invalider la signature. Les autres flags ouvrent des possibilités intéressantes : assemblage collaboratif de transactions (crowdfunding-style), CoinJoin où chaque participant ne signe que sa contribution, ou contrats partiellement signés laissant le destinataire ajouter ses outputs.
Limites et évolutions
SIGHASH_SINGLE comporte un piège historique : si l'output correspondant n'existe pas, le digest signé vaut 1 — vulnérabilité corrigée dans les implémentations modernes. Avec Taproot et BIP-341, un nouveau format de digest (SIGHASH_DEFAULT, 0x00) est introduit, équivalent à ALL mais plus efficace. La proposition SIGHASH_ANYPREVOUT (BIP-118) prépare le terrain pour Lightning V3 et eltoo.
À retenir
Le SIGHASH flag est un détail technique, mais c'est un levier puissant : il transforme la signature, brique de base de la sécurité, en outil composable pour construire des protocoles plus riches au-dessus de Bitcoin.
Termes lies
- SIGHASH_ALLSIGHASH_ALL est le flag par défaut : la signature couvre tous les inputs et outputs. Garantit l'intégrité maximale. Standard pour 99 % des transactions.
- SIGHASH_ANYPREVOUTSIGHASH_ANYPREVOUT (APO) signe une transaction sans engager d'input précis. Pendant de SIGHASH_ANYONECANPAY pour Taproot. Voir BIP-118.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.