Bitcoin est le premier système monétaire fonctionnant sans l’intervention d’une autorité centrale. Il repose sur plusieurs concepts assurant son bon fonctionnement. Entre autres, il s'établit sur un serveur d’horodatage distribué afin de générer la preuve de la chronologie des transactions. Cet outil permet de résoudre un des problèmes les plus importants pour implémenter un système de paiement sans autorité centrale : la double dépense.
Dans cet article, on étudie certains des aspects techniques à la base du protocole Bitcoin : les signatures numériques, le serveur d’horodatage distribué et la transaction.
Les signatures numériques
Contrairement au système bancaire traditionnel qui associe la monnaie à une identité, la propriété d’une pièce sur Bitcoin est assurée par l’utilisation de la cryptographie asymétrique. Chaque morceau de bitcoin est associé sur le réseau à une paire de clés cryptographiques.
On définit ainsi deux notions : la clé publique et la clé privée. La clé publique permet à l’utilisateur de recevoir des bitcoins, notamment par le biais d’une adresse, en produisant une condition de dépense sur une pièce. Pour dépenser ces fonds, le propriétaire légitime devra produire une signature à l’aide de la clé privée associée.
Le problème de ce système réside dans le fait que les personnes recevant des bitcoins n’ont aucun moyen de vérifier que ces unités n’ont pas été dépensées deux fois : c’est ce que l’on appelle la double dépense. Un réseau de paiement permettant cela ne peut évidemment pas fonctionner. Nous avons besoin d’un moyen pour que le bénéficiaire d’un paiement en bitcoins puisse vérifier que les pièces reçues n’ont pas déjà été dépensées lors d’une précédente transaction vers un autre bénéficiaire.
Le réseau Bitcoin utilise ainsi un serveur d’horodatage afin de pouvoir marquer les transactions dans le temps.
➤ En savoir plus sur ce qu’est Bitcoin.
Le serveur d'horodatage distribué (blockchain)
Pour éviter la double dépense, sur Bitcoin, on définit que la transaction la plus vieille est celle qui compte. Par exemple, imaginons qu’Alice possède 2 bitcoins, et les envoie à Bob à 15:00. Cette transaction sera validée par le réseau. Si Alice essaie d’envoyer ces 2 mêmes bitcoins à Charles à 16:00, cette transaction sera refusée puisque Alice les a déjà dépensés par le passé.
Pour que Bob puisse s’assurer qu'Alice n’a pas déjà dépensé ces bitcoins, il doit avoir accès à un registre recensant toutes les transactions déjà validées. Sur Bitcoin, ce registre est un serveur d’horodatage.
Nous pourrions ainsi définir un acteur central, qui gèrerait ce registre, et qui déterminerait quelles transactions sont arrivées en premières. Mais sur Bitcoin, afin de réduire le besoin de confiance, nous souhaitons avoir un réseau de paiement qui ne repose sur aucune autorité centrale. Ce serveur d’horodatage doit donc être distribué à chaque utilisateur. Pour éviter la double dépense, il faut que tout le monde soit au courant de tout l’historique des transactions. Ainsi, lorsque Bob reçoit une transaction de la part d’Alice, il est capable lui-même de vérifier que les bitcoins engagés ne l’ont pas déjà été dans une autre transaction par le passé.
Le format du serveur d’horodatage choisi pour Bitcoin est une chaîne de blocs. Bien que ce terme soit souvent mal compris, c’est ce que vous connaissez sous le nom de « Blockchain ».
➤ En savoir plus sur la Blockchain.
Son principe est simple : chaque transaction est enregistrée dans un bloc horodaté. Un bloc est simplement un agglomérat de transactions. Ils sont créés en moyenne toutes les 10 minutes et chacun inclut l’empreinte du bloc le précédant. Ils forment ainsi une chaîne.
Avec tous ces rouages, nous commençons à deviner un réseau de paiement efficace. Mais il nous reste encore quelques problèmes à résoudre ! Comment s’assurer que les utilisateurs s’entendent sur une unique blockchain commune ? Et comment choisir qui inscrit les nouveaux blocs, et ainsi les nouvelles transactions, dans ce registre distribué ?
C’est ici qu’intervient la pierre angulaire du système Bitcoin : le Consensus de Nakamoto par preuve de travail (Proof-of-Work).
➤ En savoir plus sur la preuve de travail (Proof-of-Work).
Comment fonctionne une transaction Bitcoin ?
Tout d’abord, l’utilisateur qui souhaite envoyer un paiement va construire une transaction. Dans celle-ci, il va indiquer quels sont les bitcoins à dépenser et où il faut les envoyer. La transaction Bitcoin est alors constituée d’entrées et de sorties (en anglais les « inputs » et les « outputs »). Les entrées représentent les bitcoins utilisés pour payer. On dit que les entrées sont « consommées » par la transaction. Les sorties représentent les destinations du paiement. On dit que les sorties sont « créées » en contrepartie des entrées qui sont « consommées ».
Pour que la transaction soit valide, le montant total des sorties doit être inférieur ou égal au montant total des entrées. Les frais de transaction, qui reviennent aux mineurs, représentent la différence entre le total des entrées et le total des sorties.
Une fois ces informations regroupées, l’émetteur de la transaction va la signer avec la clé privée associée aux bitcoins utilisés pour le paiement en entrée. La signature permet de prouver que l’utilisateur qui veut dépenser est bien le propriétaire légitime de la clé privée, et donc des bitcoins engagés, sans pour autant révéler la clé. Si les bitcoins en inputs sont associés à des paires de clés différentes, il faut produire une signature par paire de clés.
L’émetteur diffuse ensuite sa transaction signée au réseau Bitcoin, c'est-à-dire aux nœuds. Les nœuds vérifient individuellement que la transaction et les signatures reçues sont bien valides. Si c’est le cas, chaque nœud diffuse cette transaction à d’autres nœuds qui vont également la vérifier puis la rediffuser. Ce processus continue jusqu’à que tous les nœuds du réseau soient informés de l’existence de cette transaction.
La transaction de l’émetteur est maintenant dans la « mempool » (Memory Pool). Autrement dit, elle est dans la mémoire des nœuds, en attendant qu’un mineur l’inclue dans un bloc valide, ce qui représentera sa première confirmation.
Conclusion
Le système monétaire Bitcoin s’établit sur de nombreux mécanismes. Chacun de ces rouages ne constitue pas une réelle technologie à lui seul, pourtant, ils sont tous indispensables au bon fonctionnement de Bitcoin.
La propriété des bitcoins est assurée par l’utilisation de signatures électroniques. Les clés publiques permettent de recevoir des bitcoins en créant des conditions de dépense, et les clés privées associées permettent de les débloquer.
Pour éviter la double dépense sur ce réseau pair-à-pair, on utilise un serveur d’horodatage, également parfois nommé « Blockchain ».
Une transaction Bitcoin est constituée d’entrées (inputs) et de sorties (outputs). Les entrées sont consommées pour pouvoir créer les sorties.