Comment fonctionne le Bitcoin ?

Après avoir analysé le « Pourquoi ? » du Bitcoin dans La perte de confiance dans les banques a créé le Bitcoin, nous étudions le « Comment ? » dans cet article.

Introduction

Le Bitcoin n’a pas d’existence physique, il n’existe ni pièce ni billet libellé en bitcoins. Le Bitcoin existe au travers d’un grand livre de comptabilité dupliqué sur des ordinateurs, tablettes ou smartphone du monde entier. Ce livre de comptabilité regroupe tout les transferts de propriété de bitcoins depuis l’origine de cette monnaie.

Pour recevoir des bitcoins seule la possession d’une adresse bitcoin (générée à partir d’un logiciel informatique) est nécessaire. De même pour dépenser des bitcoins, seule la clef privée associée à l’adresse bitcoin sur laquelle ont été reçus les bitcoins est nécessaire. Il n’est pas demandé de souscrire ou d’acheter un service auprès d’une société publique ou privée  (ouverture de compte en banque, de forfait téléphonique, porte-monnaie électronique, etc.).

Bitcoin utilise la cryptographie asymétrique

Bitcoin utilise la cryptographie asymétrique pour assurer l’authenticité et l’intégrité des mouvements de fonds bitcoins. Pour pouvoir contrôler la réception de fonds et leurs utilisations, un utilisateur bitcoin génère une paire de clefs (clef privée et clef publique) et une adresse bitcoin.

Clef publiqueLa clé publique permet de recevoir des fonds, soit en la communiquant directement aux débiteurs potentiels, soit en leur communicant une adresse bitcoin générée à partir de cette clef publique. Tout le monde peut connaitre la clé publique sans qu’il n’y ait de risque que quelqu’un puisse voler ou dépenser les fonds associés.
Clef privéeLa clé privée est utilisée pour dépenser les fonds. Elle permet de générer les signatures nécessaires pour prouver la propriété des fonds utilisés dans une transaction. La clé privée doit rester tout le temps secrète, car la révéler à un tiers équivaut à lui donner le contrôle des fonds sécurisés par cette clef. La clef privée doit également être sauvegardée et protégée contre les pertes accidentelles, car une fois perdue, elle ne peut être récupérée et les sommes qu’elle gère seront également perdues à jamais.
Adresse Bitcoin sous forme d'un QR codeL’adresse bitcoin est l’identifiant destiné à être communiqué pour recevoir les paiements. Cet identifiant peut se présenter soit sous la forme d’une suite de chiffres et lettres soit sous la forme d’un QR code à scanner. L’adresse bitcoin représente le possesseur d’une paire de clés privées/publiques ou un script de paiement. Elle inclue un checksum (somme de contrôle) afin d’éviter les erreurs de saisie et donc la perte de fonds.

Voici les étapes de création de ces éléments:

Création de la pair de clefs et de l'adresse bitcoin
Création de la pair de clefs et de l’adresse bitcoin

  • La clef privée d’une longueur de 32 octets, est obtenue par tirage au sort d’un nombre entre 1 et 2256. La clef privée est généralement représentée par un nombre de 64 chiffres en base hexadécimale.
  • La clef publique d’une longueur de 64 octets (33 octets sous forme compressée), est calculée à partir de la clef privée en utilisant la multiplication de courbe elliptique selon le standard Secp256k1. Une clé publique est juste la coordonnée x et y d’un point sur la courbe elliptique. La génération de la clef publique est unidirectionnelle: il est impossible de retrouver la clef privée à partir de la clef publique. Il est à noter qu’une même clef privée fournit toujours la même clef publique.
  • L’adresse bitcoin d’une longueur de 26 à 35 caractères selon le format choisi, est crée par la succession de deux fonctions de hachage (SHA256 et RIPEMD160) puis l’application d’un algorithme d’encodage. Les fonctions de hachages fournissent une empreinte de la valeur passée en entrée. La longueur du résultat obtenu (20 octets) est plus court que la longueur de la clef publique. Les fonctions de hachage sont unidirectionnelles (il n’est pas possible de recalculer la clef publique à partir de l’empreinte). Le rôle de l’algorithme d’encodage est de rendre l’adresse plus compacte et de faciliter sa saisie. Par exemple, l’algorithme d’encodage Base58check utilise plus de lettres de l’alphabet qu’un nombre hexadécimal, évite les caractères qui pourraient être confondus (comme 0 avec O) et ajoute une somme de contrôle (checksum).

La blockchain

La blockchain (ou chaîne de blocs) est un registre distribué (également appelé DLT) public qui contient l’historique de toutes les transactions effectuées depuis l’origine du Bitcoin. Sa structure se base sur une succession de blocs ordonnés et liés entre eux, contenants plusieurs transactions. Chaque bloc de la blockchain est identifié par une signature (hash). Cette signature est générée par une application de l’algorithme de hachage cryptographique SHA256 à l’en-tête du bloc. Les blocs sont liés entre eux par le fait que chaque bloc fait référence dans son en-tête au bloc précédent, par le biais du champ « previous block hash ».

La blockchain
La blockchain

Note: Les transactions, l’empreinte de l’entête et la racine de Merkle sont expliquées dans les chapitres suivants.

D’un point de vue informatique, la blockchain peut être stockée sous forme de fichiers plats ou dans une simple base de données.

Le réseau Bitcoin

Bitcoin utilise un réseau décentralisé, plus précisément un réseau pair-à-pair (P2P) construit sur le réseau internet. Un pair (nœud) peut être un ordinateur, une tablette ou un smartphone. Chaque nœud sert à la fois d’émetteur (il distribue les données) et de récepteur (il reçoit les données). Le terme “réseau bitcoin” désigne l’ensemble des nœuds exécutant le protocole pair-à-pair bitcoin. La gestion des transactions et l’émission de nouveaux bitcoins sont menés collectivement par le réseau.

Le réseau bitcoin
Le réseau bitcoin

Lorsqu’il est complet, un nœud bitcoin fournit 4 fonctionnalités:

  • un service de portefeuille
  • un agent de minage
  • la blockchain complète
  • un agent de routage
Les 4 fonctionnalités d'un nœud bitcoin complet
Les 4 fonctionnalités d’un nœud bitcoin complet

Bien que les nœuds P2P soient égaux sur le réseau bitcoin, ils peuvent êtres différents car tous n’embarquent pas les 4 fonctionnalités d’un nœud complet. Par un exemple sur un smartphone avec des ressources limitées, on utilise un nœud plus léger appelé SPV pour Simplified Payment Verification qui ne comporte que les fonctionnalités de portefeuille et de routage. De même, un nœud utilisé exclusivement pour miner des bitcoins n’a pas besoin de la fonctionnalité Portefeuille. Il est à noter que la fonctionnalité Routage est nécessaire pour tous les types de nœuds.

Bitcoin est un projet open source

Il y a plusieurs implémentations compatibles de Bitcoin. L’implémentation de référence, appelée Bitcoin Core, est le descendant direct du logiciel originel créé par Satoshi Nakamoto. Il permet de faire tourner un nœud complet. Son code source est disponible sur GitHub, l’exécutable est téléchargeable sur le site officiel bitcoincore.org.

Qu’est ce qu’une transaction Bitcoin ?

Une transaction bitcoin est une structure de données représentant un transfert de propriété d’une somme de bitcoins entre participants du réseau bitcoin. Réaliser une transaction, c’est ajouter cette structure de données dans le réseau Bitcoin et attendre qu’elles soit validée (minée) puis ajoutée dans la blockchain.

Prenons l’exemple d’une transaction effectuée au profit de l’UNICEF, la transaction identifiée 2f8cb63d6e2ea31928ecf8470cb21343da5edb913ea4ed7512729746f2326dd6.

Exemple de transaction Bitcoin (don à l’Unicef)
Exemple de transaction Bitcoin (don à l’Unicef)

Comme toute les transactions bitcoins, cette transaction est publique. Ses principales caractéristiques sont consultables à partir d’un explorateur de blocs Bitcoin en ligne comme “blockchain.com“:

Transaction vue avec un explorateur de blocs Bitcoin (don à l’Unicef)
Transaction vue avec un explorateur de blocs Bitcoin (Cliquer pour agrandir)

1) Identifiant de la transaction
2) Taille de la transaction
3) A
dresses des bénéficiaires et sommes reçues

4) Adresse du payeur et somme débitée
5) Frais de transaction

Dans cet exemple on observe que la somme débitée pour cette transaction de 1,5 mBTC (0,0015 BTC) est très supérieure à la somme versée au bénéficiaire 0,21381 mBTC et que le surplus 1,25637 mBTC est reversé au débiteur (abstraction faite des frais de 0,02982 mBTC).

Ceci s’explique par le fait que Bitcoin ne gère pas directement le solde des compte mais uniquement des transactions:

  • En entrée d’une transaction se trouvent une ou plusieurs sorties de transactions précédentes et non pas une adresse. En effet dans Bitcoin ce qui est associé à une adresse, ce n’est pas une somme d’argent mais une liste de sorties de transactions reçues.
  • Les sorties de transactions peuvent avoir 2 status: dépensé / non dépensé. Et donc le solde de bitcoins disponibles d’une adresse se calcule en additionnant les sorties de transaction non dépensées également appelées UTXO.
L'entrée d'une transaction bitcoin est la sortie non dépensée d'une précédente transaction (UTXO).
L’entrée d’une transaction bitcoin est la sortie non dépensée d’une précédente transaction (UTXO).

Dans le schéma ci-dessus, la transaction A représente le versement effectuée au profit de l’UNICEF. L’entrée de cette transaction est un UTXO de 1,5mBTC possédé par le donateur grâce à sa clef privée. A l’issue de cette transaction, l’UNICEF possède un UTXO de 0.21381 mBTC, le donateur récupère un de UTXO de 1,25637 mBTC et le mineur qui a ajouté cette transaction à la blockchain perçoit des frais de 0,02982 mBTC.

Grâce à sa clef privée, l’UNICEF pourra ensuite utiliser cet UTXO de 0.21381 mBTC ainsi que d’autres UTXO en sa possession pour financer ses actions.

Le cycle de vie d’une transaction Bitcoin

Concrètement, un paiement bitcoin se traduit par une nouvelle transaction. La création d’une nouvelle transaction et sa transmission aux autre nœuds du réseau sont presque instantanées. Cependant il peut y avoir jusqu’à 10 minutes de délai avant que le réseau ne commence à confirmer cette transaction en l’incluant dans un bloc et avant que le bénéficiaire ne puisse dépenser les bitcoins reçus.

Construction d’une nouvelle transaction

Une transaction est une structure de données représentant un transfert de valeur d’une source de fonds, appelée entrée, vers une destination, appelée sortie. Les entrées et les sorties d’opérations ne sont liées ni à des comptes ni à des identités. Les différents champs composant une transaction sont les suivants:

Structure de données d'une transaction Bitcoin
Structure de données d’une transaction Bitcoin

Sans rentrer dans le détail, il est à noter :

  • Une transaction contient au minimum une entrée et une sortie.
  • Un script de déverrouillage (ScriptSig) est associé à chaque entrée. Ce peut-être une signature des données de la transaction à l’aide de la clef privée ou un algorithme fournissant des données permettant de satisfaire un script de verrouillage. En signant les données de la transaction avec sa clef privée, le payeur prouve qu’il est bien le possesseur de l’UTXO et empêche l’altération des données de transaction.
  • Un script de verrouillage (ScriptPubKey) est associé à chaque sortie. Ce peut-être une clef publique, une ou plusieurs adresse(s) bitcoin ou un algorithme avec des conditions à satisfaire.

Partage et vérification de la nouvelle transaction

Une fois qu’un nœud a construit la transaction, il l’envoi aux nœuds voisins afin de la propager à l’ensemble du réseau Bitcoin. Cependant, avant de transférer une transactions à ses voisins, chaque nœud va d’abord vérifier la transaction qu’il reçoit sur la base d’une liste de critères préétablis. Cela garantit que seules les transactions valides sont propagées.

Lorsqu’il reçoit une nouvelle transaction le nœud Bitcoin ne l’ajoute pas à la blockchain immédiatement mais à une zone tampon appelée Mempool ou Memory pool. Le Mempool est l’endroit où les transactions attendent d’être incluses dans un bloc (minées).

Prise en compte de la nouvelle transaction: Minage

L’ajout de la nouvelle transaction au grand livre de comptabilité qu’est le Bitcoin va passer par un processus de “minage” qui se répète toutes les 10 minutes environ et se déroule selon les étapes suivantes:

Prise en compte de la nouvelle transaction bitcoin: le minage
Prise en compte de la nouvelle transaction bitcoin: le minage

Ajout de la transaction au bloc candidat: Chaque mineur commence par créer son propre bloc candidat à partir des transactions du Mempool (transactions non confirmées). Habituellement il choisit les transactions offrant les frais les plus élevés afin d’augmenter ses gains. Les transactions sont ensuite hachées pour former une structure d’arbre de Merkle qui produira une racine Merkle. La racine de Merkle est une simple empreinte (hash) qui représente tous les hachages précédents de cet arbre, et donc toutes les transactions qui ont été incluses dans ce bloc particulier. Les principaux éléments insérés dans l’entête du bloc candidat sont:  la racine de Merkle, l’empreinte du bloc précédent et un nombre aléatoire utilisé pour l’algorithme de preuve-de-travail appelé nonce.

Résolution de l’algorithme de preuve-de-travail: L’algorithme de preuve-de-travail est basé sur le hachage de l’entête du bloc candidat à l’aide de la fonction de hachage SHA256. La preuve-de-travail est obtenue lorsque l’empreinte commence par un nombre prédéfini de 0 spécifié par le protocole. Il est à savoir que bien que déterministe (la même valeur en entrée produit toujours la même valeur de sortie), le résultat d’une fonction de hachage ne peut pas être devinée à l’avance. Cela signifie que la seule façon de produire un résultat de hachage commençant par un nombre prédéfini de 0 est d’essayer encore et encore, en modifiant aléatoirement l’entrée jusqu’à ce que le résultat de hachage souhaité apparaisse par hasard. Pour modifier cette entrée le mineur fait varier le nonce.

Transmission du bloc et de la preuve: Une fois qu’un nœud de minage a réussi à résoudre l’algorithme de preuve-de-travail sur le bloc candidat il transmet immédiatement ce nouveau bloc ainsi que la preuve-de-travail aux nœuds voisins afin de la propager à l’ensemble du réseau Bitcoin. Cependant, avant de le transférer à ses voisins, chaque nœud Bitcoin va d’abord le valider.

Validation du bloc: Lorsqu’un nœud reçoit un nouveau bloc, il le valide en vérifiant une liste de critères. Ces critères doivent tous être remplis sinon le bloc est rejeté. La validation indépendante des blocs assure aux mineurs honnêtes l’incorporation de leurs blocs dans la blockchain, ainsi qu’une  rémunération. Les mineurs agissant malhonnêtement voient leurs blocs rejetés, perdant ainsi la rémunération qui leur aurait permis de couvrir leurs frais d’électricité et de matériel. Entre autres critères, le bloc vérifie la preuve-de-travail et que toutes les transaction composant ce nouveau bloc sont valides et n’ont pas déjà été dépensées.

Utilisation du bloc par les suivants: Quand un nouveau bloc est reçu, le nœud va essayer de le placer dans la blockchain. En utilisant le champ « previous block hash » du bloc, qui est la référence au parent du bloc, le nœud tente de trouver ce parent dans la blockchain existante. La plupart du temps, le parent sera la « pointe » de la chaîne principale, ce qui signifie que ce nouveau bloc prolonge la chaîne principale. Lorsque les nœuds de réseau ont utilisé la signature du bloc accepté pour la création du bloc suivant de la chaîne, les transactions qui le le composent sont considérées comme « confirmées ». Les nouveaux propriétaires de bitcoin peuvent alors dépenser les bitcoins qu’ils ont reçu dans ces transactions.

Comment le mineur est-il rémunéré ?

Chaque mineur inclut dans son bloc candidat une transaction spéciale, appelée “coinbase“, qui ne consomme pas d’UTXO. Cette transaction spéciale permet de transférer à l’adresse du mineur une rémunération constituée par l’addition d’une récompense avec le cumul des frais de toutes les transactions incluses dans le bloc. S’il résout l’algorithme de preuve-de-travail qui rend son bloc valide, ce bloc est ajouté à la blockchain et la rémunération devient disponible. 

La récompense attribuée au mineur ayant résolu l’algorithme de preuve-de-travail se fait par l’émission de nouveau bitcoins. Il s’agit de la seule source de création de nouvelles unités de Bitcoin. Cette récompense a démarré à 50 BTC en 2008 et est réduite de moitié tous les 4 ans (halving) pour se terminer en 2140 environ, lorsque le plafond des 21 millions de bitcoins sera atteint.

Pour résumer

Bitcoin est un écosystème de transfert et de vérification de propriété reposant sur un réseau de pair à pair sans aucune autorité centrale. Si vous souhaiter en apprendre plus sur le protocole, je vous invite à lire l’article Fonctionnalités avancées du Bitcoin.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *