140 / 736P2EP

Payjoin

Un paiement construit avec son destinataire

Pour un paiement ordinaire, le portefeuille sélectionne des fonds de l’expéditeur et en envoie une partie au destinataire. Payjoin fait participer ce dernier à la préparation : il ajoute ses propres fonds à la même transaction. Le paiement arrive toujours, mais un observateur de la seule chaîne publique dispose d’indices moins fiables sur le propriétaire de chaque entrée.

Payjoin permet de préparer un paiement Bitcoin avec son destinataire. Les deux parties apportent leurs propres fonds à une même transaction, mais chacune conserve ses clés privées et autorise elle-même la dépense de son argent. Un observateur de la chaîne publique a ainsi plus de mal à déduire à qui appartenaient les fonds utilisés. Cela ne crée ni une autre monnaie ni une garantie d’anonymat.

Alice paie Bob. Un portefeuille est une application ou un appareil permettant de recevoir et d’envoyer des bitcoins. Son portefeuille ne gère pas un unique solde bancaire : il choisit des sorties de transactions précédentes qui n’ont pas encore été dépensées, appelées UTXO. Chaque sortie contient un montant et des conditions permettant de le dépenser. Les entrées de la nouvelle transaction désignent les UTXO consommés ; ses nouvelles sorties attribuent les fonds à Bob et rendent, si nécessaire, la monnaie à Alice. Lors d’un paiement ordinaire, seule Alice apporte des fonds. Avec Payjoin, Bob participe en ajoutant un UTXO qui lui appartient. Il reçoit toujours le paiement convenu, tout en déplaçant une partie de l’argent qu’il possédait déjà. Les deux portefeuilles doivent vérifier le résultat. Chacun autorise ensuite la dépense de ses propres entrées par une signature numérique ; les clés privées ne sont pas échangées. La clé privée est une valeur numérique secrète qui permet de créer cette signature. [1] [3] [8] [6]

Un analyste suppose souvent que des entrées dépensées ensemble appartiennent au même portefeuille. Ce raisonnement s’appelle common-input-ownership heuristic. Ce n’est ni une règle de Bitcoin ni une preuve d’identité, seulement une déduction fondée sur les usages habituels. Payjoin produit des transactions valides où cette déduction est fausse. L’observateur ne peut plus attribuer automatiquement toutes les entrées à Alice. D’autres informations peuvent néanmoins l’aider. [1] [3]

Les montants seront exprimés en sats, les plus petites unités de bitcoin. Laissons brièvement les frais de côté. Alice possède une entrée de 100 000 sats et paie 20 000 sats à Bob ; 80 000 sats lui sont rendus. Bob ajoute sa propre entrée de 50 000 sats et sa sortie passe à 70 000 sats. Les entrées et les sorties totalisent toujours chacune 150 000 sats. Bob ne reçoit pas de cadeau supplémentaire : il possédait déjà 50 000 sats et ne gagne que les 20 000 sats convenus. Une véritable transaction doit bien sûr aussi payer des frais. [1] [6]

Pour coopérer, les portefeuilles ont besoin d’une procédure et d’un format de messages communs. BIP78, le document technique de Nicolas Dorier dont le numéro a été attribué en 2019, utilise PSBT — Partially Signed Bitcoin Transaction. C’est un ensemble de données contenant une transaction et les renseignements nécessaires pour la vérifier et la signer, pas un paiement déjà envoyé au réseau. La demande de paiement comporte le paramètre pj : l’adresse du service que le portefeuille doit contacter. L’expéditeur envoie d’abord le paiement initial sous forme de PSBT entièrement signée et finalisée. Elle est déjà prête à être diffusée, malgré le mot « partially » dans le nom du format. Le destinataire répond avec une proposition modifiée contenant ses entrées et leurs signatures. L’expéditeur la vérifie, signe à nouveau ses propres entrées, puis diffuse la transaction sur le réseau Bitcoin. La connexion doit être chiffrée et le service distant authentifié. PSBT n’est pas une sauvegarde : ni la seed servant à dériver les clés, ni les clés privées, ni les données de dérivation inutiles ne sont transmises. [1] [5]

Le portefeuille de l’expéditeur doit vérifier que ses entrées et ses sorties protégées subsistent, que la monnaie rendue n’a pas été réduite arbitrairement et que sa contribution aux frais reste dans la limite autorisée. Il ne signe que ses entrées initiales. Le protocole permet certaines modifications des sorties du destinataire sous des conditions précises, pas le détournement de tout le paiement. Sur l’appareil de signature, il faut comprendre les montants affichés, plutôt que simplement valider l’écran suivant. [1] [5]

Une entrée ajoutée prend de la place et peut augmenter les frais absolus du paiement. Les portefeuilles négocient qui les assume et jusqu’à quelle limite. Le destinataire peut toutefois regrouper ses UTXO ou inclure un autre paiement qui aurait sinon nécessité une transaction séparée. L’économie globale dépend donc de la comparaison des mêmes opérations, pas d’une promesse que chaque Payjoin serait moins cher. À frais identiques en satoshis, une transaction plus grande a un taux de frais inférieur. [1] [2]

Avec BIP78, le destinataire doit disposer d’un service accessible par internet, et les deux parties communiquent en même temps. C’est peu pratique lorsqu’un téléphone perd sa connexion. BIP77, ou Payjoin v2, utilise donc un serveur comme boîte aux lettres temporaire. Un portefeuille y dépose un message et l’autre le récupère plus tard, avant l’expiration de la session convenue. C’est une communication asynchrone. La proposition de paiement est chiffrée de bout en bout : les portefeuilles participants peuvent la lire, mais pas l’opérateur de la boîte. OHTTP, Oblivious HTTP, ajoute une protection : les requêtes passent par un relais distinct, si bien que le serveur ne voit normalement pas l’adresse IP du portefeuille. Une adresse IP est l’adresse réseau utilisée par un appareil pour communiquer sur internet. Masquer ce lien suppose que le relais et le serveur ne partagent pas leurs journaux. Aucun ne reçoit les clés privées qui contrôlent les bitcoins. Le serveur peut néanmoins retarder ou supprimer les messages ; le chiffrement seul ne garantit pas leur livraison. [2] [4] [7]

Payjoin ne rend pas automatiquement un paiement anonyme. Montants, entrées, sorties et moment de confirmation restent visibles dans la chaîne. L’autre partie connaît aussi le déroulement de l’échange ; un commerçant peut avoir une commande à votre nom. La transaction publique ne porte aucune étiquette Payjoin obligatoire, mais les adresses réutilisées ou les particularités du portefeuille peuvent fournir d’autres indices. Les récepteurs automatiques doivent aussi empêcher que des demandes jamais achevées servent à découvrir leurs UTXO. [1] [2]

La transaction initiale signée peut servir de paiement ordinaire de secours. Dans le protocole correct, elle et la proposition Payjoin dépensent les mêmes entrées initiales : au plus une des deux peut donc être confirmée. Ce n’est pas une raison pour créer sans vérification un autre paiement indépendant après une erreur. Une signature déjà remise peut permettre au destinataire de diffuser la transaction initiale. Le portefeuille doit indiquer clairement si Payjoin, un paiement ordinaire de secours ou rien encore a eu lieu, et le rapprocher de l’état de la chaîne. [1] [2]

Envoyer et recevoir Payjoin sont des capacités différentes ; les portefeuilles et versions concernés doivent être compatibles. Traiter une demande sans entrée ajoutée par le destinataire ne crée pas l’avantage décrit face à l’heuristique de propriété. Lors de la vérification du 17 octobre 2026, BIP78 a le statut Deployed, tandis que BIP77, de Dan Gould et Yuval Kogman, est Draft. Payjoin se négocie entre applications avec des transactions Bitcoin ordinaires : il n’attend pas de Soft Fork et ne modifie pas les règles d’émission. [1] [2] [3]

Pour une vision complète, lisez aussi CoinJoin, Confidentialité de Bitcoin, PSBT, Pseudonymat, UTXO, Satoshi. Cette entrée est également citée par Change Address, Confidentialité de Bitcoin, Pseudonymat, Chain Surveillance.

DOC · 001BIP78 — A Simple Payjoin ProposalSpécification DOC · 002BIP77 — Async PayjoinSpécification DOC · 003Bitcoin Optech — PayjoinDocumentation DOC · 004Payjoin projectSource primaire DOC · 005Bitcoin Core — PSBTDocumentation DOC · 006Bitcoin Developer Reference — TransactionsDocumentation DOC · 007RFC 9458 — Oblivious HTTPSpécification DOC · 008Bitcoin Developer Guide — WalletsDocumentation
Révisé le: Sources d’abord · Pas un conseil financier