ScriptSig
Le scriptSig est le script de déverrouillage fourni par l'input qui dépense une UTXO. Pour P2PKH, il contient signature et clé publique. Avec SegWit, son rôle est repris par scriptWitness. Doit produire « true » avec scriptPubKey lors de la validation.
Définition
Le scriptSig (ou "unlocking script") est le script fourni dans chaque input d'une transaction Bitcoin pour démontrer qu'on a le droit de dépenser une UTXO. C'est la "clé" qui ouvre la "serrure" représentée par le scriptPubKey de l'output qu'on veut dépenser. À la validation, le scriptSig est exécuté d'abord, puis le scriptPubKey à la suite, et la pile finale doit valoir "true".
Place dans l'input
Chaque input contient :
[36 octets] prevout (txid précédente + index output)
[varint+N] scriptSig (script de déverrouillage)
[4 octets] sequence
Exemples par template
| Type | scriptSig |
|------|-----------|
| P2PK | <signature> |
| P2PKH | <signature> <pubkey> |
| P2SH | <signatures...> <redeemScript> |
| P2WPKH / P2WSH | Vide (déplacé dans scriptWitness) |
| P2TR | Vide (déplacé dans scriptWitness) |
Pour P2PKH par exemple, le scriptSig pousse la signature DER (~72 octets) puis la pubkey compressée (33 octets) sur la pile, et le scriptPubKey vérifie le hash de cette pubkey puis la signature.
Malléabilité (le bug historique)
Avant SegWit, le scriptSig était inclus dans le calcul du txid. Or, plusieurs signatures DER équivalentes peuvent encoder la même signature mathématique (forme normalisée vs non-normalisée). Un tiers pouvait donc altérer une transaction non confirmée pour changer son txid sans invalider sa signature : c'est la transaction malleability.
Conséquences :
- Impossible de référencer une transaction par son txid avant confirmation → blocage du développement de Lightning.
- Cas Mt. Gox 2014 : Karpelès a faussement attribué une partie de la perte à cette malléabilité.
La solution : SegWit
SegWit (BIP-141, activé en août 2017) sépare les signatures du reste de la transaction. Le scriptSig devient vide pour les nouveaux types (P2WPKH, P2WSH, P2TR) ; les données de déverrouillage migrent vers le scriptWitness, qui n'est pas inclus dans le txid. La malléabilité du second degré disparaît, et Lightning peut décoller.
Transition P2SH-wrapped
Pendant la transition, on a vu apparaître des transactions où le scriptSig contient un push minimal (le witness program nested), et le vrai déverrouillage se fait dans le scriptWitness. C'est le P2SH-P2WPKH / P2SH-P2WSH, qui a permis l'adoption progressive de SegWit sans casser les wallets qui ne lisaient que les anciennes adresses 3....
À retenir
Le scriptSig est la "preuve d'autorisation" historique d'une dépense Bitcoin. Avec SegWit puis Taproot, son rôle s'est progressivement vidé au profit du scriptWitness, mais il reste essentiel pour comprendre les vieilles UTXO et la mécanique de validation du protocole.
Termes lies
- ScriptPubKeyLe scriptPubKey est le script de verrouillage d'une UTXO. Il définit les conditions à satisfaire pour la dépenser (signature, hash, etc.). Tout output Bitcoin a un scriptPubKey. C'est la pièce centrale du modèle UTXO.
- ScriptWitnessLe scriptWitness contient les données de déverrouillage des inputs SegWit. Stocké en dehors du scriptSig, il bénéficie du discount de poids. Pour P2WSH, il inclut signatures et witnessScript. Introduit par SegWit (BIP-141).
- Input (vin)Un input désigne une UTXO consommée par une transaction. Il référence le TXID + index de la sortie qu'il dépense, et fournit les données de déverrouillage (scriptSig, witness). Une transaction a un ou plusieurs inputs. Leur somme doit être ≥ aux outputs (la différence = frais).
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.