Aller au contenu principal
Script

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

← Retour au glossaire complet

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