Bitcoin : introduction aux principes de fonctionnement

in #bitcoin6 years ago

Ceci n’est qu’une introduction dont l’objectif est de commencer à comprendre la technologie de Bitcoin (partagée par de nombreuses cryptomonnaies). Je m’abstiendrai d’aborder des questions non essentielles à ce début de compréhension du système comme les capacités de programmation à l’intérieur de la blockchain ou les ajustements de la difficulté ni même de la fameuse limitation à 21 millions de bitcoins. Pire, j’assume des propos erronés car je veux permettre au lecteur d’avoir rapidement une vue schématique globale. Je tiens cependant à ce que cette vision soit saine c’est à dire qu’elle ne limite pas la capacité du lecteur à approfondir le sujet car le but est justement que le lecteur affine sa compréhension par la suite ! Est-il besoin d’ajouter que les questions non-techniques comme celle de la valeur réelle du Bitcoin sont à mille lieux de mon sujet ?

J’écris ce texte car je n’ai pas trouvé de bonne introduction aux principes de fonctionnement de Bitcoin. Si je n’ai pas trouvé un tel texte c’est qu’il n’est pas simple à rédiger, ce qui est logique car le sujet est complexe. Malheureusement, ceci implique qu’il ne sera pas simple à lire non-plus. Le problème me semble venir du fait que Bitcoin réunis des techniques informatiques qu’il faut expliquer séparément et seulement après expliquer leur imbrication dans Bitcoin, à l’image de la description d’un écosystème qui passerai d’abord par celle de ses espèces puis par son climat, par sa topographie, par sa géologie et, à la fin seulement, les interactions entre tous ces éléments. Je demande donc au lecteur en plus de sa patience, de se garder d’anticiper mes explications.

Les systèmes clé-publique – clé-privée

Un petit point avant de commencer : quand on dit qu’un calcul est « facile » c’est qu’il ne consomme pas beaucoup de ressources informatiques que ce soit en terme de temps de calcul ou de mémoire, un calcul devient difficile lorsqu’il consomme beaucoup de l’une ou l’autre de ces ressources (généralement on pense au temps de calcul mais la mémoire peut aussi devenir un vrai problème bien que cette possibilité soit peu utilisée en cryptographie).

Les systèmes de cryptographies à clés publiques ont été inventés lorsque des mathématiciens ont réalisé que certaines opérations et leurs inverses présentaient une asymétrie : une opération pouvait être simple à réaliser alors que son inverse était difficile. L’exemple typique est la multiplication de deux grands nombres premiers. Multiplier deux nombres premiers, même d’une centaine de chiffres, est à la porté d’un collégien méticuleux et patient. À l’inverse, partir du résultat et retrouver les deux nombres initiaux n’est à la portée que de puissants ordinateurs ! Cette asymétrie spécifique est celle à l’origine du plus connu de ces système : le chiffrement RSA. Depuis, d’autres systèmes sont apparus : à logarithmes discrets et à courbes elliptiques notamment. À quelques points de détail près comme la possibilité d’une attaque via un ordinateur quantique (si une telle machine avec plusieurs milliers de Q-bits intriqués est possible : la question me semble assez ouverte) ou de paramètres recommandés par la NSA (ils ont osé : on les reconnaît !), ces systèmes partagent un certain nombre de caractéristiques. Mais avant d’en dresser une liste (qui ne prétendra pas à l’exhaustivité), rappelons que, comme tout objet informatique, les clés publiques et privées sont des nombres : les utiliser revient à faire des calculs avec.

Une propriété, bien souvent oubliée mais essentielle, est que le nombre de couples de clés possibles est extrêmement grand et donc le risque que, par hasard, quelqu’un génère la même clé que vous est extrêmement faible.

Une seconde propriété utile à connaître est que la sauvegarde de la clé privée est nécessaire et suffisante pour s’assurer de la conservation du couple. En effet la clé privée permet de recalculer facilement (informatiquement synonyme de « retrouver ») la clé publique et la conservation de cette dernière n’est donc pas primordiale. Par contre l’inverse n’est pas vrai : la clé publique ne permet pas de recalculer la clé privée avec des moyens raisonnables.

La clé privée permet de faire facilement un calcul sur tout objet informatique dont le résultat pourra, c’est le but, être facilement contrôlé à partir de la clé publique mais qu’extrêmement difficilement fait avec cette dernière. Le résultat de ce calcul s’appelle « signature ». Une opération commune, souvent obligatoire pour des raisons trop complexes pour être approfondies ici, est de signer sa propre clé publique et d’adjoindre cette signature à la clé publique qui est alors qualifiée d’auto-signée.

La clé publique permet de faire un calcul sur tout objet. À partir de l’objet résultant il est simple de recalculer l’objet initial avec la clé privée mais extrêmement difficile de le faire avec la clé publique. Cette opération s’appelle « cryptage ».

Enchaîner les nonces

Les fonctions de hachage

Rappelons d’abord qu’en informatique tout est nombre. Par exemple, à un court texte comme cette phrase correspond un nombre extrêmement grand. Ce nombre reste cependant minuscule par rapport à celui correspondant à ce paragraphe. Ce dernier est lui-même infime par rapport à celui représentant l’intégralité de ce texte. Une fonction de hachage transforme tout nombre (même effroyablement grand) en un nombre, appelé somme de hachage, difficilement prédictible et de petite taille (au sens de l’informatique ce qui signifie quand-même vachement grand pour de pauvres hominidés comme nous). Difficilement prédictible signifie que si on a fait le calcul pour un premier nombre mais que nous souhaitons connaître le résultat pour un autre nombre, quelque soit la relation entre les deux nombres, il est toujours plus simple de refaire le calcul que de reprendre le résultat du premier.

Des nonces pas très catholique

Imaginons un jeu : étant donné un nombre le but sera d’obtenir la somme de hachage la plus faible possible en y ajoutant quelques chiffres qui seront collectivement appelés « nonce ». Chaque essai revient pratiquement à un tirage aléatoire. Les participants calculerons alors frénétiquement les sommes de hachage pour des nonces différents afin d’essayer d’être le premier à en trouver un satisfaisant.

Le chaînage

Imaginons maintenant que nos joueurs, après avoir trouvé un nonce satisfaisant, ajoutent encore des chiffres au nombre qu’ils ont obtenu et reprennent leur jeu, jusqu’à trouver un nouveau nonce et ainsi de suite sans fin. Je ne vous sens pas passionné par ce jeu ! Cependant l’important n’est pas d’y participer mais d’en comprendre les règles et une conséquence : les joueurs obtiendrons vite un objet mathématique, pas très intéressant en lui-même mais avec une caractéristique très difficiles à reproduire : un grand nombre de faibles sommes de hachage lorsqu’on le tronquera. À moins de réunir une plus grande équipe de joueurs qu’eux vous ne pourrez probablement jamais dépasser leur score sans vous appuyer sur leurs résultats donc les rejoindre.

Les transactions

Les sorties

Lecteurs, vous avez probablement été surpris par l’idée de commencer par les sorties et non par les entrées. Les plus lucides d’entre vous ont déjà deviné que les entrées des transactions sont aussi des sorties et que nous allons aborder ici deux aspects de la même chose en commençant simplement par le début.

En sortie, une transaction associe simplement des montants (strictement positifs) à différents comptes. Les sorties sont identifiées par un nombre pseudo-aléatoire. Tant que les sommes associées ne sont pas utilisées elles sont appelées UTXO pour « sorties de transaction non dépensées » (mais en anglais).

Les entrées

Les entrées des transactions sont des UTXO, chaque UTXO ne peut-être utilisée qu’une seule fois. Autant d’UTXO que souhaitées peuvent-être utilisées dans une même transaction. Pour qu’une UTXO soit utilisée dans une transaction il faut que son propriétaire signe la transaction. Cette signature n’étant valide que pour la seule transaction signée, elle ne peut pas être détournée pour signer une autre transaction et voler les fonds.

Validité

Pour qu’une transaction puise être validée, il faut qu’aucune des UTXO utilisées ne soit déjà impliquée dans une transaction validée (ça fait partie de la définition d’une UTXO) et que les signatures correspondant à chaque UTXO y soient inclues. Il faut aussi que les sommes des montants en entrée et en sortie soient les mêmes avec une petite récompense pour le validateur.

Le consensus

Rédiger implique de mettre à plat ses idées. De temps en temps cela permet de découvrir des impensés. Je n’avais jamais vu le consensus comme un concept informatique ! À posteriori la notion de standard de fait, commune en informatique, est une application du consensus : bien qu’aucune autorité dûment intronisée n’aie établie de standard, le fait que tout le monde a pris pour habitude de procéder de telle ou telle façon a créé le standard. Le protocole Bitcoin est un standard de fait, aucune autorité centrale ne le défini. Cependant, non seulement il est utilisé, mais en plus il évolue ! Pour que ces évolutions se produisent, elles doivent être développées par les auteurs des logiciels mais aussi acceptées par les autres utilisateurs et ceci est impossible sans consensus. Le consensus est déjà un élément vital pour Bitcoin. Mais le rapport entre le consensus et Bitcoin est encore plus important : le protocole Bitcoin est conçu pour créer et entretenir le consensus qui maintient l’unicité (et donc l’intérêt) de la blockchain.

Décrire aussi méthodiquement le consensus que je l’ai fait des autres points m’est impossible car c’est d’abord un concept sociologique. À défaut de propos théorique, progressons par l’exemple. Un type de consensus courant est celui qui donne cohérence aux langues. Prenons l’exemple du Français qui, en plus d’être familier aux lecteurs, a surtout la particularité, rare parmi les langues, d’avoir un gardien : l’Académie Française.

À première vue le Français semble donc être défini par le haut et non par un consensus. Cependant deux problèmes émergent : primo, l’Académie définie le Français en Français et par écrit ce qui n’aide pas beaucoup quelqu’un ne lisant pas cette langue à apprendre à la parler. Secundo, le Français existait avant l’Académie. Le mot « chat » signifiait la même chose qu’actuellement bien avant la naissance de l’Académie ou de Carl von Linné (ce dernier est à l’origine de la définition moderne des espèces : il a donc redéfini le « chat » dans toutes les langues qui possédaient cette notion). Le Français est donc définit d’abord par consensus, le rôle de l’Académie bien qu’important est finalement secondaire. Elle aide au maintient du consensus et ralenti probablement l’évolution de la langue mais ne l’a ni créée ni n’en assure la survie à elle seule.

En résumé la définition par consensus c’est dire que « rouge » est la couleur que tout le monde appelle « rouge » et la définition du consensus c’est ce qui fait que tout le monde appel « rouge » la même couleur.

Les acteurs du Bitcoin

Nous entrons dans la phase finale de l’explication, un conseil, relisez tout ce qui précède avant de continuer !

Pour décrire les interactions entre les différentes technologies nous utiliserons les points de vues des différents acteurs de l’écosystème Bitcoin. Les actions réalisées directement et consciemment par un humain ne seront pas distinguées de celles effectuées implicitement pour son compte par un logiciel.

Les utilisateurs

Commençons par les intervenants les plus simples : les utilisateurs. Ils acquièrent des bitcoins et les dépensent. Pour pouvoir recevoir des bitcoins, ils génèrent des couples clé-privée – clé publique. Quand ils doivent recevoir des fonds ils transmettent une de leurs clés publiques à leur débiteur : c’est un peu leur numéro de compte.

L’immensité de l’ensemble des clés possibles est telle qu’elle rend extrêmement improbable qu’une clé soit générée 2 fois (tant que les générateurs de nombres aléatoires utilisés sont bons). Chaque clé n’étant générée qu’une fois, seul son créateur et ceux à qui elle aura été transmise (volontairement ou non) la connaîtrons et pourrons s’en servir.

Lorsqu’ils doivent régler leur créanciers, ils émettent une transaction qu’ils signent avec leurs clés privées qui sont comme des tampons leur permettant de signer des chèques. En sortie de cette transaction, une partie est bien évidement affectée aux différents payements, un pour-boire ira au validateur et le solde devra être renvoyé vers une adresse de l’utilisateur. Cette dernière est habituellement créée pour l’occasion.

Une fois mise en forme, la transaction est transmise sur le réseau afin qu’elle puisse être validée.

Les mineurs

Les mineurs sont nos joueurs, ils valident aussi les transactions : les chiffres qu’ils ajoutent à chaque fois sont les transactions qu’ils valident et le nonce correspondant trouvé. Rappelez-vous qu’en informatique tout est chiffres ! Ces ensembles ajoutés sont appelés « blocs ». Chaque mineur choisi les chiffres qu’il ajoute mais son bloc ne sera accepté par les autres que si les transactions qu’il contient sont valides. L’intérêt des mineurs est double, le premier (actuellement le plus important) est que dans chaque bloc ils peuvent inclure une transaction spéciale qui crée ex-nihilo des bitcoins. Le second est de récupérer les pour-boire inclus dans les transactions.

Un point important : les blocs sont acceptés par consensus, sans autorité centrale. En conséquence, qu’une transaction soit incluse dans un bloc est insuffisant pour la considérer comme validée : un autre bloc, meilleur que lui, peut-être trouvé et peut le remplacer. En ce cas le premier bloc disparaît de la blockchain et la transaction n’est plus validée (elle pourra toutefois être incluse dans un bloc futur sans intervention de l’émetteur). On conseil généralement d’attendre que 6 blocs soit minés à la suite de celui contenant la transaction pour la considérer comme validée.

Les autres professionnels

Dans cette catégorie, nous trouverons les marchants de bitcoins qui achètent aux mineurs pour vendre aux particuliers, mais aussi les traders, les marchants acceptant le bitcoin en payement, animateurs de sites ou de chaînes sur le Bitcoin et maintenant les tenanciers de nœuds du Lightning Network. Bref ils constituent l’écosystème Bitcoin.

Leur responsabilité est d’aider à construire le consensus en communiquant avec les utilisateurs et le reste du grand public. Ils exercent aussi une surveillance collective car leur intérêt collectif est de garder l’écosystème Bitcoin sain.

Ici je me permets la seule petite digression non-technique : il est frappant que ce système, anarchique, soit resté stable, bien géré et relativement uni tout en évoluant malgré des crises parfois violentes. Il est probable que la bonne compréhension de l’intérêt collectif soit à l’origine de cette gestion somme-toute saine.

Les développeurs

Bien-entendu tous les intervenants ont besoin de logiciels (et même de matériels spécifiques pour les mineurs). Ces logiciels ont été créés par des développeurs qui furent aussi les premiers mineurs et les premiers utilisateurs. Ils ont donc probablement gardé des fonds importants en bitcoins, ce qui les intéressent au bon fonctionnement du système. Ils peuvent aussi être rémunérés par d’autres professionnels pour promouvoir ou développer de nouvelles fonctionnalités. Sans eux aucune évolution ni même correction de bugs n’est possible.

Pour aller plus loin

Au delà de l’évidence qui est de passer aux travaux pratiques en installant un client Bitcoin (ou Litecoin, les principes sont les mêmes) et en commençant à réaliser quelques transactions, sauvegarde et réplication de porte-monnaie, je vois deux très bonnes pistes d’approfondissement.

Les capacités de programmation de la blockchain

D’un point de vu technique c’est ce qui permettra le plus au lecteur d’améliorer sa capacité à réaliser des opérations complexes avec la blockchain. Cela lui donnera aussi une nouvelle vision des transactions qui sont en fait de petits programmes.

Le mystère de la preuve de travail

La chose la moins bien comprise dans Bitcoin et la nécessité de la preuve de travail avec cette quête absurde des nonces. Cette quête est une dépense d’énergie dont la seule justification est de crée un verrou physique à la manipulation de l’historique qu’est la blockchain : il faudrait dépenser autant d’énergie pour en créer une version alternative qu’il a été nécessaire pour créer l’originale. Cette justification semble bien légère. En effet la pré-existence de la chaîne originale, diffusée plus tôt est un obstacle dont l’insuffisance reste à démontrer : si j’ai déjà une version de la chaîne de blocs, pourquoi en accepterai-je une nouvelle ? Cependant de nombreuses personnes ont tenté de créer des blockchains avec d’autres systèmes que la preuve de travail (c’était un des objectifs d’Ethereum que de se passer de preuve de travail) sans réel succès.

Ce problème est ouvert !

Sort:  

Félicitations @ldespeyroux pour votre beau travail!

Ce post a attiré l'attention de @ajanphoto et a été upvoté à 100% par @steemalsace et son trail de curation comportant actuellement 28 upvotes .
De plus votre post apparaîtra peut-être cette semaine dans notre article de sélection hebdomadaire des meilleurs post francophones.

Vous pouvez suivre @steemalsace pour en savoir plus sur le projet de soutien à la communauté fr et voir d'autres articles qualitatifs francophones ! Nous visons la clarté et la transparence.

Rejoignez le Discord SteemAlsace

Pour nous soutenir par vos votes : rejoignez notre Fanbase et notre Curation Trail sur Steemauto.com. C'est important pour soutenir nos membres, les steemians et Witness francophones ICI!

@ajanphoto

Congratulations @ldespeyroux! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 100 upvotes. Your next target is to reach 250 upvotes.

Click here to view your Board of Honor
If you no longer want to receive notifications, reply to this comment with the word STOP

Support SteemitBoard's project! Vote for its witness and get one more award!

Merci, article très intéressant ;-) !

Thank you so much for sharing this amazing post with us!

Have you heard about Partiko? It’s a really convenient mobile app for Steem! With Partiko, you can easily see what’s going on in the Steem community, make posts and comments (no beneficiary cut forever!), and always stayed connected with your followers via push notification!

Partiko also rewards you with Partiko Points (3000 Partiko Point bonus when you first use it!), and Partiko Points can be converted into Steem tokens. You can earn Partiko Points easily by making posts and comments using Partiko.

We also noticed that your Steem Power is low. We will be very happy to delegate 15 Steem Power to you once you have made a post using Partiko! With more Steem Power, you can make more posts and comments, and earn more rewards!

If that all sounds interesting, you can:

Thank you so much for reading this message!

Congratulations @ldespeyroux! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Do not miss the last post from @steemitboard:

SteemFest Meet The Stemians Contest - The mysterious rule revealed
Vote for @Steemitboard as a witness to get one more award and increased upvotes!