Principes techniques

Toutes les personnes qui utilisent le logiciel Bitcoin Core forment un réseau informatique communiquant à travers Internet. Lorsqu’un ordinateur du réseau Bitcoin cherche à s’y connecter, sa première tâche consiste à trouver d’autres ordinateurs. Dans les premières versions du logiciel, cette étape était réalisée en se connectant à un réseau IRC. Par la suite, cette méthode est devenue uniquement une solution de rechange, car la méthode privilégiée consiste désormais à utiliser une liste d’adresses IP statiques écrites directement dans le code source du logiciel.

Une fois l’ordinateur connecté, la deuxième étape consiste à mettre à jour la base de données de toutes les transactions effectuées depuis le lancement du projet, ce qui peut prendre plusieurs jours lors de la première connexion. Une transaction consiste en un transfert d’un certain montant de bitcoins d’un certain compte à un autre. Un compte est identifié par une adresse bitcoin, qui en simplifiant est l’analogue d’un numéro de compte en banque. Pour être valide, chaque transaction doit être signée, au sens cryptographique du terme. Pour cela, la cryptographie asymétrique est utilisée, ce qui est rendu possible par le fait qu’une adresse bitcoin est aussi l’empreinte cryptographique d’une clef publique. Une transaction prend en entrée la référence d’une transaction précédente qui justifie que les fonds nécessaires sont bien possédés, et présente en sortie une ou plusieurs adresses bitcoins avec les montants attribués correspondants. Une transaction épuise toujours entièrement le montant en entrée, car cela simplifie les calculs de balance totale.

Une fois la base de données téléchargée, le logiciel fonctionne en mode nominal : il communique alors continuellement avec les autres ordinateurs du réseau, avec lesquels il échange des informations sur les adresses IP du réseau et sur les nouvelles transactions apparaissant au fur et à mesure que des utilisateurs s’échangent des bitcoins. Quand une nouvelle transaction est reçue, elle n’est pas considérée comme valide tout de suite. Elle doit d’abord être incorporée dans ce qu’on appelle un bloc de transactions. Il s’agit d’un regroupement de transactions récentes qui attend pour être validé de subir un traitement cryptographique appelé preuve de travail. Effectuer cette preuve de travail requiert du temps de calcul, et en moyenne, avec une difficulté de zéro, un seul ordinateur ordinaire y parvient dans un intervalle de temps d’environ dix minutes. A mesure que la puissance de calcul de réseau s’accroît, la difficulté s’adapte automatiquement pour maintenir cet intervalle.

Cette idée de regrouper les transactions en blocs et de ne valider ces blocs qu’à l’issue d’une preuve de calcul est le point le plus original du système. C’est la solution au problème du double paiement, car les différences dans la connaissance des transactions sur le réseau, différences inévitables ne serait-ce qu’à cause des latences de communication, sont alors arbitrées par ce processus de détermination du bloc, qui joue le rôle d’un tirage au sort. Lorsqu’un ordinateur remporte ce tirage au sort, il reçoit des bitcoins ne provenant pas d’une transaction précédente. Cette attribution de bitcoins permet l’introduction initiale de bitcoins dans la base, et prend la forme d’une transaction spéciale située en tête de bloc. Selon l’ordinalité du bloc, le montant de bitcoins attribué est variable et diminue géométriquement de telle sorte que la somme totale de bitcoins en circulation ne pourra jamais excéder vingt et un millions de bitcoins.

Pour transmettre des bitcoins, chaque ordinateur doit signer une transaction faisant référence en entrée à une transaction précédente dont le montant de sortie est suffisant. La clef privée doit correspondre à la clef publique avec laquelle a été créée l’adresse bitcoin en sortie de la transaction précédente. L’ordinateur doit donc stocker toutes ces clefs privées localement, sans bien sûr partager ces informations. Le fichier correspondant s’appelle wallet.dat, et c’est ce fichier qui doit être conservé et sauvegardé par l’utilisateur, et de façon confidentielle. La perte de ce portefeuille électronique entraînerait de façon irréversible la disparition des bitcoins correspondants, qui resteraient éternellement dans la base sans jamais pouvoir changer d’adresse.

La cryptographie est utilisée pour permettre le tirage au sort décrit plus haut, ainsi que la signature des transactions. À aucun moment le système ne chiffre des données transmises sur le réseau. Toutes les transactions sont donc en clair, et leur anonymat n’est protégé que par le fait que le logiciel n’utilise aucune donnée personnelle sur l’utilisateur. Par conséquent, un utilisateur ne peut trahir son identité que s’il le fait volontairement, si son adresse IP est traçable, ou éventuellement à la suite d’une méticuleuse et complexe étude statistique sur la base de données des transactions.