C’est un système « pair à pair » ou « poste à poste » (« peer-to-peer ») comme les réseaux d’échange de musique ou le système de téléphonie Skype. Les ordinateurs des utilisateurs sont tous dotés des mêmes fonctions et peuvent jouer tous les rôles, et communiquent directement entre eux à travers le réseau internet, sans qu’aucun ne joue un rôle central privilégié ni qu’il existe des liaisons privilégiées.

Cette architecture s’oppose aux systèmes client-serveur dont l’essentiel des fonctions est assuré par un système central avec lequel communiquent tous les autres, souvent par des liaisons spécialisées. Les objectifs sont de s’affranchir des serveurs spécialisés, de répartir la charge de traitement sur tous les participants, de rendre le système aussi robuste que l’internet lui-même, et d’empêcher sa prise de contrôle par un agent quelconque, notamment les institutions financières et l’État.

Le cœur du système est un grand journal de toutes les transactions passées, qui contient toute l’information nécessaire à la connaissance de l’état de tous les comptes. Il est formé d’une suite de « blocs » d’une taille comparable à celle d’une photo numérisée, contenant chacun un certain nombre de transactions (typiquement quelques centaines), et liés par ordre chronologique (la « blockchain »). Chaque bloc est protégé par un dispositif cryptographique qui interdit toute modification mais laisse les transactions visibles. C’est en quelque sorte l’analogue d’un coffre-fort inviolable mais transparent. Cette chaîne de blocs, qui contient le grand journal des transactions, est répliquée et tenue à jour en permanence sur tous les ordinateurs du réseau.

Chaque utilisateur peut demander au système de créer pour lui un nombre quelconque d’adresses codées, qui sont l’analogue de portefeuilles électroniques. Il peut alors émettre des transactions pour transférer des bitcoins depuis un ou plusieurs de ses portefeuilles vers un ou plusieurs autres, pouvant appartenir à un autre utilisateur.

Une transaction peut offrir une commission en bitcoins, définie par son auteur, à l’intention de l’utilisateur qui la validera comme décrit plus loin. Ces transactions sont anonymes, puisque seuls les codes des portefeuilles y figurent, et que les utilisateurs peuvent conserver secrets les liens entre eux-mêmes et leurs portefeuilles, rendant ainsi impossible de remonter d’un portefeuille vers son propriétaire. Les utilisateurs conservent généralement ces adresses dans un « wallet » (portemonnaie), qui contient notamment le solde actuel de chaque portefeuille, déduit de l’ensemble des transactions passées le concernant. Chaque utilisateur a la responsabilité de préserver la confidentialité de son portemonnaie. Il existe plusieurs logiciels de gestion de portemonnaie, dont certains sur smartphone.

Chaque nouvelle transaction est diffusée à tous les ordinateurs du réseau. Périodiquement (actuellement toutes les 10 minutes) les transactions proposées sont regroupées, après validation, pour constituer un « bloc », qui sera protégé en y incluant une clé de contrôle calculée par un algorithme cryptographique à partir du contenu du bloc. Cette clé permettra de vérifier, à chaque accès ultérieur au bloc, que son contenu n’a pas été modifié depuis sa création. Pour rendre cette protection aussi inviolable que possible, la clé doit satisfaire certaines conditions qui rendent son calcul extrêmement difficile.

La difficulté de la formation d’un bloc valide, qui se traduit par une consommation élevée de temps machine, est un paramètre ajustable du système. Si le temps réellement passé à la formation des blocs diminue, la difficulté est augmentée ; s’il augmente, la difficulté est diminuée. On maintient ainsi des conditions contraignantes qui garantissent un niveau élevé de protection, mais font en même temps de la création des blocs une opération extrêmement difficile qui appelle une rémunération.

Un grand nombre d’utilisateurs peuvent entreprendre simultanément la construction de nouveaux blocs à partir des transactions en attente. Pour cela, ils vérifient que chacune des transactions est valide et cohérente avec les précédentes, et calculent une clé de protection du bloc. En cas de succès, ils diffusent le nouveau bloc à tous les utilisateurs pour qu’ils l’ajoutent à leur copie du journal. Chacun des récepteurs vérifie à son tour la validité du bloc et de chacune des transactions qu’il contient par rapport à sa propre version du journal, et y ajoute ce bloc si et seulement s’il en estime le contenu valide. Chaque nouveau bloc, et chacune des transactions qu’il contient, est ainsi contrôlé un très grand nombre de fois, et n’est ajouté au journal des transactions que s’il que s’il passe avec succès tous ces contrôles.

L’auteur d’un bloc reconnu comme valide par une majorité des autres sites est récompensé par les commissions offertes par les auteurs des transactions incluses dans le bloc, plus des bitcoins créés ex nihilo. C’est pourquoi cette opération est appelée « mining » et les sites qui l’entreprennent des « mineurs », par analogie avec l’extraction de l’or. Mais il faut bien voir que la fonction principale de cette opération est de certifier la validité des transactions et de construire le journal, et que la création monétaire n’est qu’une fonction annexe.

La chaîne de blocs qui contient toutes les transactions certifiées est construite de telle façon que, pour modifier une transaction existante, il faut recalculer une nouvelle clé de contrôle pour le bloc qui la contient et tous les blocs suivants, ce qui nécessite un temps machine d’autant plus prohibitif que la transaction est plus ancienne. De plus, cette modification serait vue par tous les ordinateurs du réseau, qui pourraient alors l’ignorer et continuer à utiliser le journal correct, et sanctionner le nœud fautif, par exemple en l’excluant du réseau.

Rappelons que tous les ordinateurs du réseau sont équipés du même programme, et que tous ont en mémoire un exemplaire du journal des transactions certifiées, ainsi que les transactions en attente. C’est cette multiplication des exemplaires sur des ordinateurs répartis dans le monde entier et servant toutes les catégories d’utilisateurs qui assure la fiabilité du système. Aucun nœud du réseau n’est critique. Toute erreur décelée sur un nœud peut être corrigée à partir des autres nœuds. Si un nœud est défaillant ou se comporte de façon suspecte voire frauduleuse, par exemple s’il est victime d’une attaque ou d’une prise de contrôle, il peut être ignoré ou exclu sans que cela impacte la bonne marche de l’ensemble.

Le logiciel implanté sur les ordinateurs du réseau est géré sur le mode « open source » : il est public y compris le code source, et peut être inspecté à tout moment par toute personne intéressée. Les erreurs ou les failles sont signalées en temps réel à toute la communauté ; de nombreux membres de celle-ci peuvent coopérer à leur résolution, et coopèrent de fait. Ces défauts sont donc rapidement corrigés. De même, les suggestions d’extensions et modifications sont soumises au vote de la communauté, et développées par des volontaires.

Comme nous l’avons vu, le service que rendent les « mineurs » à la collectivité des utilisateurs en collaborant à la construction du journal des transactions est rémunéré par des bitcoins créés à cet usage. Réciproquement, rendre ce service est la seule façon de créer de nouveaux bitcoins. Le système est construit de telle façon que cette opération soit de plus en plus difficile et coûteuse, et que sa rémunération en bitcoins diminue régulièrement avec le temps, par analogie avec les ressources naturelles telles que l’or ou le pétrole. Tout virtuel qu’il est, le « gisement » finira donc par s’épuiser. Le nombre de bitcoins existants à chaque instant est ainsi programmé une fois pour toutes, et ne dépassera jamais 21 millions, chiffre qu’il atteindra en 2040.

Les principes informatiques et mathématiques du système bitcoin ont été publiés en 2008 de façon anonyme, sous le pseudonyme de Satoshi Nakamoto, par une équipe de chercheurs dont l’identité n’a jamais été dévoilée. Le service lui-même a été ouvert en février 2009 et fonctionne depuis pratiquement sans interruption.

Le nombre total de nœuds du réseau est difficile à mesurer, et le nombre total d’utilisateurs encore plus, mais le nombre de nœuds actifs à un moment donné se situe entre 5000 et 15000, localisés dans 50 pays sur tous les continents sauf l’Afrique, et les utilisateurs se comptent en centaines de milliers (certains disent nettement plus d’un million), qui exécutent actuellement entre 50000 et 70000 transactions par jour. De plus, bitcoin est au centre de tout un écosystème de programmes et services annexes en développement rapide.

Les critiques techniques

Les critiques adressées au système bitcoin sont de deux ordres : des critiques techniques, portant sur le système de paiement, et des critiques économiques, portant sur la validité du bitcoin en tant qu’unité monétaire. Ces dernières feront l'objet d'un autre article.

Parmi les critiques techniques, celles qui dénoncent un prétendu manque de fiabilité ou la vulnérabilité trahissent le plus souvent une méconnaissance de l’architecture du système, qui fonctionne depuis 4 ans sans incident majeur, bien qu’il ait été la cible de plusieurs attaques sans conséquences graves.

Le très grand nombre de nœuds qui exécutent le même logiciel et détiennent un exemplaire du journal des transactions rend le système invulnérable. Chacun des nœuds peut être défaillant ou piraté sans que cela nuise au fonctionnement de l’ensemble. Chacune des copies du journal peut être détruite, mais il est impossible qu’elles le soient toutes simultanément, et il sera toujours possible de le reconstituer, et avec lui toutes les informations qui en sont extraites, par exemple le contenu de chaque portefeuille. Il n’y a donc aucun risque que les informations qui forment le cœur du système soient durablement détruites ou falsifiées. Le système bitcoin est d’ores et déjà le plus fiable et le moins vulnérable de tous les systèmes de paiement, électroniques ou non, et il peut encore être amélioré si nécessaire.

Une confusion est née du fait que plusieurs systèmes assurant des fonctions liées au bitcoin sont venus se greffer sur le système de paiement proprement dit pour lui servir de point d’entrée, par exemple des systèmes de change entre devises, dont le plus connu est MtGox, et des systèmes de « portemonnaie » en ligne. Or ces systèmes conservent une architecture conventionnelle qui les rend vulnérables. Tous les cas de piratage ou de prise de contrôle concernent ces systèmes périphériques, et non le système d’échange proprement dit, ce qui invite les développeurs à intégrer notamment les fonctions de change dans le système « pair à pair ».

D’autres critiques portent sur les ressources nécessaires. La tenue à jour du journal des transactions sur tous les nœuds du réseau consomme une certaine puissance informatique, notamment chez les « mineurs », et engendre une importante charge de transmission. Ce n’est actuellement pas un problème, d’autant que les performances des ordinateurs et des moyens de communications continuent à évoluer à un rythme soutenu. Cela pourrait poser une sérieuse limite à la taille du réseau, et donc à l’expansion du bitcoin, si l’utilisation se développe fortement, étant donné que la consommation de temps machine, et donc les ressources nécessaires de chaque utilisateur, croissent avec la taille du réseau.

Des solutions sont à l’étude. Elles partent notamment du constat que pour assurer l’intégrité et la sécurité du journal des transactions et des autres informations sur lesquelles compte chaque utilisateur, chaque nœud n’a pas besoin de communiquer directement avec tous les autres, mais peut se contenter d’une sous-population de serveurs de confiance, pourvu qu’ils soient assez nombreux (quelques centaines), géographiquement dispersés et hétérogènes pour représenter l’ensemble du réseau, et pourvu que le réseau dans son ensemble reste connexe. C’est sur ce principe que repose le projet Ripple en cours de développement, qui se pose déjà en successeur de bitcoin en tant que système de paiement, avec l’avantage de permettre l’utilisation de toutes les devises (dont le bitcoin).

Un autre problème potentiel est la taille croissante du journal des transactions, qui réside sur tous les serveurs. Elle est actuellement d’environ 7 Gigabytes et croît d’environ 1 Gb par mois, et cette croissance sera d’autant plus rapide que le bitcoin sera plus utilisé. Il est possible que les progrès dans la capacité des disques suffisent à régler le problème, mais en tout état de cause la structure interne des blocs est conçue pour que ces blocs puissent être vidés des anciennes transactions devenues inutiles, et également pour que des serveurs « légers » puissent se contenter de ne conserver que les en-têtes des blocs (quelques dizaines d’octets) et télécharger de façon sélective les seules transactions qui les intéressent.

On peut donc raisonnablement penser que tous les défauts et limitations techniques résiduels, dont ceux relatifs à la sécurité, seront corrigés rapidement au fur et à mesure qu’ils apparaîtront, soit par modification des systèmes existants soit par développement de nouveaux systèmes.

On peut également prédire qu’il existera de nombreux systèmes de paiement, tous mondiaux par définition, mais que les systèmes directs « pair à pair » supplanteront progressivement tous les autres systèmes de paiement électroniques.

Gérard Dréan

Trait.jpg

Références

Le document théorique fondateur : http://bitcoin.org/bitcoin.pdf

L’article de wikipedia : http://fr.wikipedia.org/wiki/Bitcoin

Un site français sur bitcoin: http://www.bitcoin.fr/

Un site permettant de suivre en temps réel le fonctionnement de bitcoin et donnant des tas d’autres informations : http://blockchain.info/fr/

Réservé aux « geeks », le protocole de traitement des messages et des blocs reçus par les nœuds du réseau : https://en.bitcoin.it/wiki/Protocol_rules