Bitcoin : un système d’argent liquide électronique pair-à-pair

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

Résumé

1 Une version purement pair-à-pair d’argent liquide électronique permettrait aux paiements en ligne d’être envoyés directement d’une partie à l’autre sans passer par une institution financière. 2 Les signatures numériques fournissent une partie de la solution, mais perdent leurs principaux avantages si un tiers de confiance est nécessaire pour empêcher la double dépense. 3 Nous proposons une solution au problème de la double dépense en utilisant un réseau pair-à-pair. 4 Le réseau horodate les transactions en les hachant dans une chaîne continue de preuves de travail basées sur le hachage, formant un enregistrement qui ne peut être modifié sans reproduire la preuve de travail équivalente. 5 La chaîne la plus longue sert non seulement de preuve du déroulement d’événements constatés, mais aussi de preuve qu’elle provient du plus grand regroupement de puissance de calcul (CPU). 6 Tant que la majorité de la puissance de calcul est contrôlée par des nœuds qui ne coopèrent pas pour attaquer le réseau, ils génèrent la chaîne la plus longue et devancent les attaquants. 7 Le réseau lui-même ne nécessite qu’une structure minimale. 8 Les messages sont diffusés au mieux, et les nœuds peuvent quitter et rejoindre le réseau à volonté, en acceptant la plus longue chaîne de preuves de travail comme preuve de ce qui s’est passé pendant leur absence.

 

1. Introduction

Le commerce sur internet repose aujourd’hui presque exclusivement sur des institutions financières qui servent de tiers de confiance pour traiter les paiements électroniques. Bien que ce système fonctionne assez bien pour la plupart des transactions, il souffre toujours des faiblesses inhérentes à son modèle basé sur la confiance. Les transactions totalement irréversibles ne sont pas vraiment possibles, car les institutions financières ne peuvent éviter la médiation des conflits. Le coût de la médiation augmente les coûts de transaction, limitant la taille minimale pratique de la transaction et supprimant la possibilité de petites transactions occasionnelles, et il y a un coût plus large dans la perte de la capacité à effectuer des paiements irréversibles pour des services irréversibles. Avec la possibilité de réversibilité, le besoin de confiance s’agrandit. Les commerçants doivent se méfier de leurs clients, les harceler pour obtenir plus d’informations que nécessaire. Un certain pourcentage de fraude est accepté comme inévitable. Ces coûts et les incertitudes liées au paiement peuvent être évités en personne en utilisant de la monnaie physique, mais il n’existe aucun mécanisme permettant d’effectuer des paiements sur un canal de communication sans tiers de confiance.

Ce dont nous avons besoin, c’est d’un système de paiement électronique basé sur des preuves cryptographiques plutôt que sur la confiance, qui permettrait à deux parties volontaires de réaliser directement des transactions entre elles sans avoir recours à un tiers de confiance. Les transactions dont la réversibilité est informatiquement impossible à réaliser protégeraient les vendeurs de la fraude, et des mécanismes de dépôt fiduciaire routiniers pourraient facilement être mis en œuvre pour protéger les acheteurs. Dans ce document, nous proposons une solution au problème de la double dépense en utilisant un serveur d’horodatage distribué de pair à pair pour générer une preuve informatique de l’ordre chronologique des transactions. Le système est sécurisé tant que les nœuds honnêtes contrôlent collectivement plus de puissance de calcul qu’un groupe de nœuds qui coopéreraient pour réaliser une attaque.

 

2. Transactions

Nous définissons une pièce de monnaie électronique comme une chaîne de signatures numériques. Chaque propriétaire transfère la pièce au suivant en signant numériquement l’empreinte de la transaction précédente et la clé publique du propriétaire suivant, et en les ajoutant à la fin de la pièce. Un bénéficiaire peut vérifier les signatures pour vérifier la chaîne de propriété.

Le problème, bien sûr, est que le bénéficiaire ne peut pas vérifier que l’un des propriétaires n’a pas dépensé deux fois la pièce. Une solution courante consiste à introduire une autorité centrale de confiance, ou [mint], qui vérifie chaque transaction pour s’assurer qu’il n’y a pas de double dépense. Après chaque transaction, la pièce doit être renvoyée à la [mint] pour qu’elle émette une nouvelle pièce, et seules les pièces émises directement par la [mint] sont sûres de ne pas être dépensées deux fois. Le problème avec cette solution est que le sort de l’ensemble du système monétaire dépend de la société qui gère la [mint], chaque transaction devant passer par elle, tout comme une banque.

Nous avons besoin d’un moyen pour le bénéficiaire de savoir que les propriétaires précédents n’ont pas signé de transactions antérieures. Dans notre cas, c’est la transaction la plus ancienne qui compte, et nous ne nous soucions donc pas des tentatives ultérieures de double dépense. La seule façon de confirmer l’absence d’une transaction est d’être au courant de toutes les transactions. Dans le modèle basé sur la monnaie, la monnaie est au courant de toutes les transactions et décide de celles qui arrivent en premier. Pour y parvenir sans tiers de confiance, les transactions doivent être annoncées publiquement [1], et nous avons besoin d’un système permettant aux participants de se mettre d’accord sur un historique unique de l’ordre dans lequel ils ont été reçus. Le bénéficiaire a besoin de la preuve qu’au moment de chaque transaction, la majorité des nœuds ont convenu qu’elle était la première reçue.

 

3. Serveur d’horodatage

La base de la solution que nous proposons est un serveur d’horodatage. Un serveur d’horodatage fonctionne en calculant l’empreinte d’un bloc d’éléments à horodater et en publiant largement cette empreinte, par exemple dans un journal ou dans un message sur Usenet [2-5]. L’horodatage prouve que les données ont dû exister à ce moment-là, de façon évidente, pour pouvoir être intégrées au hachage. Chaque horodatage inclut l’horodatage précédent dans son empreinte, formant ainsi une chaîne, chaque horodatage supplémentaire renforçant le précédent.

 

4. Preuve de travail

Pour mettre en œuvre un serveur d’horodatage distribué sur une base pair-à-pair, nous aurons besoin d’utiliser un système de preuve de travail similaire au système Hashcash [6] développé par Adam Back, plutôt que des articles de journaux ou des messages sur Usenet. La preuve de travail consiste à rechercher une valeur qui, une fois hachée, avec SHA-256 par exemple, commence par un nombre de bits nuls. Le travail moyen requis est exponentiel dans le nombre de bits nuls requis et peut être vérifié en exécutant un seul hachage.

Pour notre réseau d’horodatage, nous mettons en œuvre la preuve de travail en incrémentant un nonce dans le bloc jusqu’à ce qu’une valeur soit trouvée qui donne à l’empreinte du bloc les bits nuls requis. Une fois que l’effort de calcul par CPU a été dépensé pour satisfaire la preuve de travail, le bloc ne peut pas être modifié sans reproduire le travail. Comme les blocs suivants sont enchaînés après lui, le travail pour changer le bloc impliquerait de refaire tous les blocs après lui.

La preuve de travail résout également le problème de la détermination de la représentation dans la prise de décision majoritaire. Si la majorité était basée sur le principe de vote par adresse IP [une adresse IP, une voix], elle pourrait être détournée par toute personne capable de s’octroyer de nombreuses adresses IP. La preuve de travail est essentiellement basée sur la puissance de calcul : un processeur, une voix. La décision majoritaire est représentée par la chaîne la plus longue, sur laquelle le plus grand effort de preuve de travail a été investi. Si la majorité de la puissance de la calcul est contrôlée par des nœuds honnêtes, la chaîne honnête se développera plus rapidement et dépassera toutes les chaînes concurrentes. Pour modifier un bloc passé, un attaquant devrait reproduire la preuve de travail de ce bloc et de tous les blocs suivants, puis rattraper et dépasser le travail des nœuds honnêtes. Nous montrerons plus bas que la probabilité qu’un attaquant plus lent rattrape son retard diminue de façon exponentielle au fur et à mesure que les blocs suivants sont ajoutés.

Pour compenser l’augmentation de la vitesse du matériel et la variation de l’intérêt des nœuds en fonctionnement au fil du temps, la difficulté de la preuve de travail est déterminée par une moyenne mobile visant un nombre moyen de blocs par heure. S’ils sont générés trop rapidement, la difficulté augmente.

 

5. Réseau

 

6. Incitation

Par convention, la première transaction d’un bloc est une transaction spéciale qui crée une nouvelle pièce appartenant au créateur du bloc. Cela incite les nœuds à soutenir le réseau et fournit un moyen de distribuer initialement les pièces en circulation, puisqu’il n’y a pas d’autorité centrale pour les émettre. L’ajout régulier d’une quantité constante de nouvelles pièces est analogue aux mineurs d’or qui dépensent des ressources pour ajouter de l’or en circulation. Dans notre cas, c’est le temps CPU et l’électricité qui sont dépensés.

L’incitation peut également être financée par les frais de transaction. Si la valeur de sortie d’une transaction est inférieure à sa valeur d’entrée, la différence correspond à une commission qui est ajoutée à la valeur d’incitation du bloc contenant la transaction. Une fois qu’un nombre prédéterminé de pièces a été mis en circulation, l’incitation peut être entièrement financée par les frais de transaction et ne plus requérir aucune inflation.

L’incitation peut contribuer à encourager les nœuds à rester honnêtes. Si un attaquant avide est capable de réunir plus de puissance de calcul que tous les nœuds honnêtes, il devra choisir entre l’utiliser pour escroquer les gens en leur récupérant ses paiements, ou l’utiliser pour générer de nouvelles pièces. Il devrait trouver plus rentable de respecter les règles, notamment celles qui lui permettent d’obtenir plus de nouvelles pièces que tous les autres réunis, que de saper le système et la validité de sa propre richesse.

 

7. Économie d’espace disque

 

8. Vérification de paiement simplifiée

1 Il est possible de vérifier les paiements sans faire fonctionner un nœud complet du réseau. 2 Un utilisateur a seulement besoin de conserver une copie des entêtes des blocs de la plus longue chaîne de preuve de travail, qu’il peut obtenir en interrogeant les nœuds du réseau jusqu’à ce qu’il soit convaincu qu’il possède la plus longue chaîne, et obtenir la branche de Merkle liant la transaction au bloc dans lequel elle est horodatée. 3 Il ne peut pas vérifier la transaction par lui-même, mais en la reliant à un endroit de la chaîne, il peut voir qu’un nœud du réseau l’a acceptée, et les blocs ajoutés après le confirment.

Vérification de paiement simplifiée - livre blanc de Bitcoin

4 De ce fait, la vérification est fiable tant que les nœuds honnêtes contrôlent le réseau, mais est plus vulnérable si le réseau est maîtrisé par un attaquant. 5 Alors que les nœuds du réseau peuvent vérifier les transactions par eux-mêmes, la méthode simplifiée peut être trompée par des transactions forgées par l’attaquant aussi longtemps que celui-ci maîtrise le réseau. 6 Une stratégie pour se protéger serait d’accepter les alertes des nœuds du réseau lorsqu’ils détectent un bloc invalide, invitant le logiciel de l’utilisateur à télécharger le bloc complet et les transactions suspectes pour confirmer l’incohérence. 7 Les entreprises qui reçoivent fréquemment des paiements voudront probablement toujours faire fonctionner leurs propres nœuds afin d’obtenir une sécurité plus indépendante et une vérification plus rapide.

 

9. Combinaison et séparation de valeur

Bien qu’il soit possible de traiter les pièces individuellement, il serait difficile d’effectuer une transaction distincte pour chaque centime d’un transfert. Pour permettre aux valeurs d’être séparées et combinées, les transactions contiennent des entrées et des sorties multiples. Normalement, il y aura soit une entrée unique provenant d’une transaction antérieure plus importante, soit des entrées multiples combinant des montants plus petits, et au maximum deux sorties : une pour le paiement, et une pour le retour de la monnaie, le cas échéant, à l’expéditeur.

Il convient de noter que la dispersion, lorsqu’une transaction dépend de plusieurs transactions, et ces transactions dépendent de beaucoup d’autres, n’est pas un problème ici. Il n’est jamais nécessaire d’extraire une copie autonome complète de l’historique d’une transaction.

 

10. Confidentialité

Le modèle bancaire traditionnel atteint un certain niveau de confidentialité en limitant l’accès aux informations aux parties concernées et au tiers de confiance. La nécessité d’annoncer publiquement toutes les transactions exclut cette méthode, mais la confidentialité peut toujours être préservée en interrompant le flux d’informations à un autre endroit : en gardant les clés publiques anonymes. Le public peut voir que quelqu’un envoie un montant à quelqu’un d’autre, mais ne dispose pas d’informations reliant la transaction à qui que ce soit.

Confidentialité - livre blanc de Bitcoin

Comme pare-feu supplémentaire, une nouvelle paire de clés devrait être utilisée pour chaque transaction afin de les empêcher d’être liées à un propriétaire commun. Certains liens sont toujours inévitables avec les transactions à entrées multiples, qui révèlent nécessairement que leurs entrées appartiennent au même propriétaire. Le risque est que si le propriétaire d’une clé est révélé, la liaison pourrait révéler d’autres transactions qui lui appartiennent.

 

11. Calculs

 

12. Conclusion

Nous avons proposé un système de transactions électroniques ne reposant pas sur la confiance. Nous avons commencé par le cadre habituel des pièces fabriquées à partir de signatures numériques, qui fournit un contrôle fort de la propriété, mais qui est incomplet sans un moyen d’empêcher les doubles dépenses. Pour résoudre ce problème, nous avons proposé un réseau pair-à-pair utilisant la preuve de travail pour enregistrer un historique public des transactions qui devient rapidement impossible à modifier par un attaquant si les nœuds honnêtes contrôlent la majorité de la puissance du processeur. Le réseau est robuste dans sa simplicité non structurée. Les nœuds travaillent tous en même temps avec peu de coordination. Ils n’ont pas besoin d’être identifiés, puisque les messages ne sont pas acheminés vers un endroit particulier et doivent seulement être délivrés au mieux. Les nœuds peuvent quitter et rejoindre le réseau à volonté, en acceptant la chaîne de preuve de travail comme preuve de ce qui s’est passé pendant leur absence. Ils votent avec leur puissance de calcul, exprimant leur acceptation des blocs valides en travaillant à leur extension et rejetant les blocs invalides en refusant d’y travailler. Toutes les règles et incitations nécessaires peuvent être appliquées grâce à ce mécanisme de consensus.

 

Références

[1] W. Dai, « b-money », http://www.weidai.com/bmoney.txt, 1998.

[2] H. Massias, X.S. Avila et J.-J. Quisquater, « Design of a secure timestamping service with minimal trust requirements », in 20th Symposium on Information Theory in the Benelux, mai 1999.

[3] S. Haber, W.S. Stornetta, « How to time-stamp a digital document », in Journal of Cryptology, volume 3, numéro 2, pages 99-111, 1991.

[4] D. Bayer, S. Haber, W.S. Stornetta, « Improving the efficiency and reliability of digital time-stamping », in Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.

[5] S. Haber, W.S. Stornetta, « Secure names for bit-strings », in Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, avril 1997.

[6] A. Back, « Hashcash – a denial of service counter-measure », http://www.hashcash.org/papers/hashcash.pdf, 2002.

[7] R.C. Merkle, « Protocols for public key cryptosystems », in Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, avril 1980.

[8] W. Feller, « An introduction to probability theory and its applications », 1957.

 

Aperçu du livre blanc de Bitcoin
Bitcoin: A Peer-to-Peer Electronic Cash System (document original)