2023-06-02

Qu'est-ce que le SPV et comment fonctionne-t-il dans Bitcoin Cash ?

La vérification simplifiée des paiements, également connue sous le nom de SPV, est un système de vérification des transactions qui permet aux utilisateurs de portefeuilles légers, c’est-à-dire ne fonctionnant pas avec des nœuds complets, d’accéder à l’historique des transactions et de vérifier que certaines transactions ont bien été confirmées et ajoutées par les mineurs à la chaîne de blocs (blockchain).

Décrit à l’origine dans la section 8 du whitepaper, le SPV est l’un des outils les plus utiles pour obtenir des certitudes sur l’historique des transactions.

Fonctionnement étape par étape

Le portefeuille de l’utilisateur conserve une copie des en-têtes de tous les blocs, ce qui permet de vérifier qu’il s’agit toujours de la chaîne ayant la preuve de travail la plus élevée. L’en-tête est une section spéciale du bloc qui contient, entre autres informations, la racine de l’arbre de Merkle de ce bloc, c’est-à-dire une preuve cryptographique de toutes les transactions incluses dans ce bloc. L’en-tête occupe 80 octets d’espace et la racine de l’arbre de Merkle n’en occupe que 32. La conservation d’une copie des en-têtes de tous les blocs nécessite environ 4,2 mégaoctets de stockage par an.

Grâce à cette preuve cryptographique, l’utilisateur qui demande à vérifier l’authenticité d’une transaction peut garantir avec certitude qu’une transaction a été incluse dans un bloc et que, étant donné que le réseau a ensuite construit de nouveaux blocs par-dessus, elle a été considérée comme valide par le réseau.

Limites

Ce système, bien que décrit dans le document original du Bitcoin, présente certaines limites, qui ont été atténuées au fil du temps.

Une attaque possible est que le nœud auquel l’utilisateur se connecte lui dise que la transaction qu’il demande n’existe pas, alors qu’elle existe bel et bien. Pour éviter cela, les portefeuilles utilisant cette technologie établissent plusieurs connexions avec différents serveurs SPV, afin d’augmenter la probabilité qu’au moins l’un d’entre eux soit honnête. Les serveurs qui ont menti peuvent être bannis, ce qui, s’il était appliqué massivement à tous les portefeuilles, découragerait leur utilisation et donc l’utilité d’exploiter des nœuds SPV malveillants. Étant donné que les avantages pour un attaquant sont minimes, il est très rare de trouver des nœuds qui cachent une partie de l’historique des transactions aux utilisateurs qui le demandent, à moins que cela ne soit dû à un problème de limite de quota ou à une erreur de configuration.

Un autre inconvénient de ce système est la diminution de la vie privée de l’utilisateur, car il révélerait aux serveurs les transactions qui l’intéressent et augmenterait ainsi les chances que ces serveurs suivent les monnaies individuelles liées à l’utilisateur. Plusieurs solutions proposées pour résoudre ce problème consistent à adresser plusieurs requêtes aux serveurs afin d’obtenir des informations sur plusieurs transactions sans rapport entre elles, puis d’écarter localement celles qui n’intéressent pas l’utilisateur. Une autre façon d’atténuer ce problème est d’utiliser des technologies qui rendent anonyme l’origine de la requête, comme Tor.