Aller au contenu
buybitcoinsmart

Glossaire / Nœuds et logiciels

Vérification simplifiée des paiements

Aussi appelé SPV.

Qu'est-ce que la vérification simplifiée des paiements ?
La vérification simplifiée des paiements vérifie qu'une transaction figure dans un bloc étayé par une preuve de travail réelle, en utilisant uniquement les en-têtes de bloc et une branche de Merkle.

Satoshi Nakamoto a décrit la méthode dans la section 8 du livre blanc de 2008, comme le moyen d'utiliser bitcoin sans exploiter un serveur. Elle est peu coûteuse parce qu'un en-tête de bloc fait 80 octets : à environ 960 000 blocs, toute la chaîne d'en-têtes représente à peu près 77 Mo, contre 759 Go pour les blocs eux-mêmes en août 2026. Elle vous apporte la preuve que des mineurs se sont engagés sur votre paiement, et absolument rien sur la légalité de ce paiement.

Comment cela fonctionne

La vérification simplifiée des paiements répond à une question avec deux éléments de preuve.

Le premier est la chaîne d'en-têtes. Chaque en-tête de bloc fait exactement 80 octets et contient le hash de l'en-tête précédent, la racine de merkle des transactions qu'il renferme, un horodatage et la cible de difficulté que le mineur devait battre. Un client télécharge uniquement les en-têtes, vérifie que chacun est lié à celui qui le précède et que chaque hash tombe bien sous la cible annoncée, et obtient une chaîne dont il peut estimer le coût en électricité. La falsifier n'est pas une question de mentir de façon convaincante : cela suppose de refaire le minage.

Le second est la branche de merkle. Les transactions d'un bloc sont hachées ensemble par paires jusqu'à ce qu'il ne reste qu'une racine, si bien que prouver qu'une transaction précise figure dans un bloc ne demande que la poignée de hash frères situés le long du chemin vers cette racine. Le nombre est logarithmique : un bloc de 4 096 transactions demande 12 hash, soit 384 octets, et doubler le bloc n'ajoute qu'un hash de plus. Votre client remonte la branche en hachant, compare le résultat avec la racine de merkle de l'en-tête auquel il se fie déjà, et la transaction est dans ce bloc ou elle n'y est pas.

Réunissez les deux et vous obtenez l'affirmation que porte la vérification simplifiée des paiements : un bloc s'est engagé sur cette transaction, et une quantité mesurable de travail s'est empilée dessus depuis.

Viennent maintenant les lacunes, car c'est la partie utile. L'inclusion n'est pas la validité. La méthode ne peut pas vous dire que les bitcoins dépensés existaient, que les signatures étaient bonnes, que le bloc a accordé au mineur la subvention correcte, ou que les mêmes bitcoins n'ont pas été dépensés dans une autre branche. Elle ne peut pas non plus prouver une négation : un serveur qui omet simplement un paiement ne laisse aucune trace. Satoshi a inscrit cette mise en garde directement dans le livre blanc, en notant que la technique est fiable tant que des nœuds honnêtes maîtrisent le réseau et que les entreprises recevant des paiements fréquents voudront de toute façon exploiter leur propre nœud.

Pourquoi cela compte quand vous achetez du bitcoin

La coche verte dans un portefeuille mobile n'est généralement pas une vérification du tout.

La plupart des portefeuilles que les gens installent après leur premier achat sur une plateforme d'échange ne construisent jamais de chaîne d'en-têtes. Ils demandent à un serveur d'entreprise combien vous possédez, impriment la réponse et l'étiquettent comme confirmée. C'est une garantie plus faible que la méthode du livre blanc, et la méthode du livre blanc est elle-même plus faible qu'un nœud. Pour de petits soldes du quotidien, cette chaîne de confiance convient, et prétendre le contraire n'aide personne. Elle cesse de convenir à partir du moment où le montant ferait mal.

La question pratique est de savoir à qui vous faites confiance et pour combien de temps. Nos avis sur les plateformes d'échange indiquent ce que chacune exige avant de libérer un retrait, et chacun de ces nombres de confirmations est un rapport du propre nœud de cette plateforme. Quand les bitcoins arrivent, le portefeuille qui vous les montre rapporte à nouveau depuis le nœud de quelqu'un d'autre. Aucune des deux parties n'est probablement en train de mentir. Toutes deux peuvent se tromper, être hors ligne ou servir une chaîne qu'on leur a fournie, et aucune ne vous le dira quand cela se produit.

Il y a aussi une dimension de confidentialité. L'étude de 2014 sur les clients à filtres de bloom a constaté que les filtres censés dissimuler les adresses qui intéressaient un portefeuille en révélaient la plupart. C'est pourquoi Bitcoin Core a désactivé cette fonction par défaut dans la version 0.19.0 en novembre 2019, et pourquoi les portefeuilles légers plus récents téléchargent des filtres compacts au lieu de téléverser des requêtes.

Ce que la vérification simplifiée des paiements aurait manqué en septembre 2018

CVE-2018-17144 est l'illustration la plus nette de la différence entre inclusion et validité dans l'histoire de bitcoin.

Une optimisation ajoutée dans Bitcoin Core 0.14.0 sautait une vérification jugée redondante, avec pour résultat que les versions touchées traitaient partiellement un bloc contenant une transaction qui dépensait deux fois la même entrée. Traitée d'une manière, elle faisait planter le nœud. Traitée d'une autre, elle permettait à un mineur de créer du bitcoin à partir de rien. Le bug a été signalé le 17 septembre 2018 et corrigé dans Bitcoin Core 0.16.3 le lendemain. Personne ne l'a exploité sur le réseau en production.

Imaginez que quelqu'un l'ait fait. Un mineur produit un bloc qui gonfle l'offre, avec un en-tête portant une preuve de travail entièrement authentique et un arbre de merkle parfaitement correct. Un nœud complet à jour analyse le bloc, trouve l'entrée en double, le rejette et déconnecte le pair qui l'a envoyé. Un client qui effectue une vérification simplifiée des paiements contrôle l'en-tête, contrôle la branche et rapporte le paiement contenu dans ce bloc comme confirmé, parce que chaque élément de preuve dont il dispose est valide. Il n'a pas accès à l'entrée dépensée, donc la question ne se pose jamais.

C'est tout le compromis. La vérification simplifiée des paiements hérite ses règles de celui qui mine. Un nœud, non.

Vérification simplifiée des paiements vs Neutrino

La vérification simplifiée des paiements et Neutrino permettent toutes deux à un portefeuille de fonctionner sans la chaîne complète, et elles orientent le filtrage dans des directions opposées. L'approche classique sous BIP37 envoie vos centres d'intérêt à un pair : vous téléversez un filtre, le pair cherche pour vous, et il apprend à peu près quelles adresses vous possédez. Neutrino, l'implémentation des BIP157 et BIP158 utilisée par la plupart des portefeuilles Lightning mobiles, fait publier au nœud un filtre compact par bloc pour tout le monde ; votre portefeuille télécharge les filtres, les teste en privé et ne demande que les blocs qui correspondent. La vérification que vous effectuez ensuite est la même arithmétique de merkle et d'en-têtes. Ce qui change, c'est que personne en face n'apprend ce que vous cherchiez.

À ne pas confondre avec

Questions fréquentes

Un portefeuille SPV est-il sûr pour des montants importants ?

Il est sûr contre le vol et faible contre la tromperie. Vos clés restent les vôtres, mais le portefeuille ne peut pas détecter un bloc invalide ni un paiement qu'un serveur a choisi de ne pas mentionner. Les soldes importants ont leur place derrière un portefeuille matériel vérifié auprès d'un nœud que vous exploitez.

Un portefeuille matériel fait-il de la vérification simplifiée des paiements ?

Non. Un portefeuille matériel protège et applique vos clés privées ; il ne détient aucune donnée de blockchain et ne vérifie aucun bloc. Le logiciel auquel vous l'associez est ce qui décide ce que vous possédez, et c'est pourquoi il importe de connecter ce logiciel à votre propre nœud.

De combien de données la vérification simplifiée des paiements a-t-elle besoin ?

Environ 77 Mo pour toute la chaîne d'en-têtes, soit à peu près 960 000 blocs, plus quelques centaines d'octets par preuve de Merkle. Les en-têtes augmentent d'environ 4,2 Mo par an, car 80 octets multipliés par les quelque 52 560 blocs d'une année représentent un coût fixe.

À lire ensuite

Termes associés

Plus de termes : Nœuds et logiciels

Lire cette page en anglais