Glossaire / Transactions et frais
PSBT
Aussi appelé Partially Signed Bitcoin Transaction, BIP174.
- Qu'est-ce qu'un PSBT ?
- Un PSBT est un fichier de transaction qui n'est pas encore terminé : il contient les entrées, les sorties et tout ce dont un signataire a besoin pour les vérifier, et il circule entre les appareils plutôt que sur le réseau.
Spécifié dans BIP-174.
Signer du bitcoin signifiait autrefois confier vos clés privées au programme qui avait construit la transaction. Le BIP174 a séparé les deux en 2018, et Bitcoin Core a pris en charge le format à partir de la version 0.17.0, de sorte que l'appareil qui détient les clés peut être différent de celui connecté à internet. Tous les portefeuilles matériels et coordinateurs multisig le prennent désormais en charge.
Comment cela fonctionne
Un PSBT est un conteneur de tables clé-valeur : une table globale qui décrit la transaction en cours d'assemblage, puis une table pour chaque entrée et une pour chaque sortie.
Le fichier commence par cinq octets magiques, 70 73 62 74 ff, qui épellent « psbt » suivi d'un séparateur. Le base64 est la façon habituelle de le transmettre, de sorte qu'un PSBT collé dans une zone de texte commence toujours par les caractères cHNidP8. Une chaîne qui commence autrement n'est pas un PSBT, quoi qu'en dise la personne qui l'envoie.
Chaque table d'entrée contient les informations qu'un signataire hors ligne ne peut pas retrouver seul :
- la sortie dépensée, pour que l'appareil connaisse le montant exact et le script de verrouillage qu'il autorise
- le script de rachat ou le script témoin, lorsque le bitcoin se trouve derrière une politique plutôt qu'une clé unique
- un chemin de dérivation et l'empreinte de la clé maîtresse pour chaque clé qui doit signer, pour qu'un appareil détenant la bonne phrase de récupération puisse trouver la bonne clé enfant
- les signatures partielles recueillies jusqu'ici, une par signataire
Les tables de sortie portent aussi des informations de dérivation, et c'est ce qui permet à un signataire de confirmer que la sortie de monnaie rendue appartient bien au portefeuille qu'il protège.
Le BIP174 répartit le travail en rôles plutôt qu'en programmes. Un créateur produit le squelette, un actualisateur remplit les détails des entrées, les signataires ajoutent des signatures partielles, un combineur fusionne les fichiers signés indépendamment, un finaliseur transforme les signatures partielles en script ou témoin valide, et un extracteur produit la transaction brute prête à être diffusée. Un même logiciel joue souvent plusieurs rôles à la fois, mais c'est cette séparation qui permet aux fichiers de différents fournisseurs de fonctionner ensemble.
Le format a été conçu pour tolérer l'ignorance. Chaque champ porte un octet de type, et un signataire qui ne comprend pas un champ doit le transmettre tel quel au lieu de le supprimer, ce qui permet à un portefeuille écrit en 2018 de remettre un fichier à un portefeuille écrit pour Taproot. Le BIP371 a ajouté les champs Taproot ; le BIP370 définit une version 2 dans laquelle des entrées et des sorties peuvent encore être ajoutées après la création, propriété dont les transactions collaboratives ont besoin.
Pourquoi cela compte quand vous achetez du bitcoin
Au moment où vous transférez des bitcoins d'une plateforme d'échange vers votre propre portefeuille matériel, vous utilisez le format PSBT, qu'un écran le dise ou non.
Il garde les clés hors de votre ordinateur. Votre ordinateur portable construit la dépense et produit un PSBT, le Trezor ou le Ledger le lit, vous montre ce qu'il contient, signe et vous le rend. Rien de secret ne traverse le câble. C'est la différence entre un ordinateur portable compromis, qui reste surmontable, et une phrase de récupération compromise, qui ne l'est pas.
Il protège contre l'échange de l'adresse de monnaie rendue. Un logiciel malveillant qui contrôle votre ordinateur peut afficher un écran de paiement honnête tout en redirigeant discrètement la monnaie rendue vers une adresse qu'il possède, et la monnaie rendue est généralement le montant le plus élevé. Comme le fichier nomme un chemin de dérivation pour chaque sortie, l'appareil de signature peut vérifier que la monnaie rendue descend bien de sa propre phrase de récupération et vous avertir dans le cas contraire. Lisez l'écran de l'appareil, jamais l'onglet du navigateur.
Il rend le multisig utilisable par des personnes qui ne sont pas ingénieurs. Un 2-sur-3 réparti entre deux portefeuilles matériels et une sauvegarde dans un autre bâtiment ne fonctionne que si une transaction non signée peut voyager par carte SD, code QR ou courriel sans rien divulguer. Un PSBT ne contient aucune clé privée, donc en perdre un en transit ne vous coûte rien du tout.
C'est l'élément dont vos héritiers auront besoin. Une enveloppe de mots de récupération ne constitue pas un plan de récupération pour quoi que ce soit de plus compliqué qu'un portefeuille à clé unique. Associez les phrases de récupération au descripteur de sortie du portefeuille et à une note nommant un logiciel qui lit les PSBT, et le plan vous survivra. Notre guide de sécurité couvre le reste de cette installation.
Signer un retrait 2-sur-3, étape par étape
Supposons que vous achetiez 0,4 BTC sur une plateforme d'échange et que vous le retiriez vers un coffre contrôlé par trois clés, dont deux quelconques peuvent dépenser.
Des mois plus tard, vous voulez en déplacer une partie. Un portefeuille en lecture seule sur votre ordinateur portable, chargé du descripteur du coffre et sans aucune clé, construit la transaction : une entrée, une sortie de paiement, une sortie de monnaie rendue. Une entrée segwit native 2-sur-3 représente environ 105 octets virtuels et deux sorties environ 62 de plus, donc, en comptant la structure, l'ensemble avoisine 177 octets virtuels, et à 8 sat/vB les frais s'élèvent à environ 1 400 satoshis.
L'ordinateur portable écrit un PSBT. Vous branchez le premier portefeuille matériel, qui lit le fichier, affiche le destinataire, le montant et les frais, et inscrit une signature dans la table d'entrée. Vous transportez ensuite le fichier sur une carte microSD jusqu'au second appareil, qui n'a jamais touché un réseau, et celui-ci ajoute la seconde signature.
De retour sur l'ordinateur portable, le combineur fusionne les deux fichiers, le finaliseur assemble les signatures en un témoin dans l'ordre attendu par le script, et l'extracteur produit une transaction brute. Rien n'atteint le réseau avant ce moment. Jusque-là, aucune clé n'a quitté un appareil, et rien de ce que vous avez fait n'était visible par quiconque.
PSBT vs transaction sérialisée
Une transaction sérialisée est terminée ; un PSBT est un espace de travail. Diffusez un PSBT et chaque nœud le rejette, car ce n'est pas un format que transporte le protocole pair-à-pair. La différence joue aussi dans l'autre sens : un PSBT contient un contexte qu'une transaction terminée abandonne, comme la valeur de chaque entrée dépensée et la clé qui a dérivé chaque adresse, précisément les informations dont un portefeuille matériel a besoin et dont un bloc n'a pas besoin.
PSBT vs descripteur de sortie
Un descripteur de sortie décrit un portefeuille ; un PSBT décrit une dépense. Le descripteur est une seule ligne nommant le type de script, les clés et les chemins de dérivation, et il ne change pas d'une année à l'autre. Les PSBT sont jetables, un par transaction. Pour un portefeuille à clé unique, la phrase de récupération suffit à tout retrouver, mais pour le multisig il faut les deux : le descripteur pour déterminer quelles adresses sont les vôtres, et les PSBT pour en déplacer quoi que ce soit.