Posted by

Blockchain : La Technologie qui se cache derrière le Bitcoin

10 November 2017
blockchain

   Connaissez-vous le Bitcoin ? Évidemment, vous avez déjà entendu parler de cette monnaie électronique décentralisée, dont la création remonte à 2009 par Satoshi Nakamoto, qui est un alias utilisé par les créateurs du Bitcoin. Mais connaissez-vous la principale technologie qui se cache derrière ce fameux Bitcoin, la Blockchain ? Il est plus probable que vous n’en connaissiez pas les détails, ni même son existence, et c’est précisément de Blockchain dont on va traiter dans cet article, en faisant des parallèles avec le Bitcoin, histoire d’y voir plus clair.

Origines de la BlockChain

Revenons-en au commencement.

   Un aspect important du Bitcoin est le fait que c’est une monnaie décentralisée. C’est à dire que n’importe qui peut avoir accès à l’historique complet des transactions (chose impossible avec une banque par exemple), et aussi n’importe qui peut héberger sur son ordinateur une copie de cet historique (là encore, vous ne pouvez pas garder chez vous l’historique des transactions de votre banque). Ainsi, le Bitcoin garantit une certaine transparence.

   Mais à quoi cela sert-il d’avoir accès au fichier des transaction ? Tout simplement, à écrire dans ce fichier une transaction qui vous concerne. Vous pouvez par exemple y écrire : « Moi, John donne 1 Bitcoin à Ely ».

   Mais comment garantir que vous avez l’argent que vous donnez, et surtout comment garantir que c’est bien vous qui avez rédigé cette transaction ? La solution apportée par le Bitcoin est la signature numérique. Cette « signature » est un concept qui repose sur la cryptographie asymétrique inverse. Effectivement, lorsque vous ouvrez un porte-feuille Bitcoin, vous recevez une clef de codage privée, et une clef publique. Votre clef privée vous sert à encoder votre message, de sorte que personne ne peut rédiger une transaction qui vous concerne sans utiliser votre clef (cela garantit la propriété de votre transaction, mais alors vous ne pouvez plus nier avoir fait telle ou telle transaction). Et la clef publique, vous permet de déchiffrer les messages de tout le monde, ce qui assure la transparence des échanges. Pour garantir que vous avez bien l’argent que vous voulez transmettre, le message que vous écrivez doit aussi inclure la provenance de ces Bitcoins. Ainsi, une transaction s’écrit comme « Moi, John donne 1 Bitcoin à Ely, en utilisant 1 Bitcoin reçu de Clément ». Et ceci assure qu’il n’est pas possible de copier-coller des transactions. Effectivement, vous ne pouvez pas utiliser 2 fois les Bitcoins que vous avez reçu de Clément. Finalement, les bitcoins se comportent comme du « cash électronique ».

   Nous avons maintenant un système ouvert, partagé, et un bon système d’authentification. Il reste un problème : il existe énormément de copies de l’historique des transactions, potentiellement une par utilisateur. On peut se les représenter comme des noeuds, qui forment un réseau (les noeuds constituant les utilisateurs). Lorsque j’ajoute une transaction à un noeud, celle-ci est transmise de proche en proche aux autres noeuds du réseau. Ainsi, en plus de l’historique des transactions validées, chaque noeud possède une liste de transactions en attente, pas encore validées. Cette liste peut donc différer légèrement de celles des autres noeuds, du fait que les informations voyagent de proche en proche et n’arrivent pas à tous les noeuds dans le même ordre. Mais alors, comment empêcher que j’inscrive deux transactions différentes à deux noeuds différents du réseau ? C’est là qu’intervient la BlockChain.

Fonctionnement de la BlockChain

   Pour palier à ce problème de fraude, il ne faut retenir qu’un seul noeud du réseau, et valider sa liste en attente pour que tous les autres noeuds se synchronisent sur lui. Ce processus est répété toutes les dix minutes, et les nouvelles transactions sont ainsi ajoutées aux anciennes par block, d’où le terme de BlockChain. Le problème est maintenant de savoir sur quel noeud tout le monde doit se synchroniser. Pour proposer sa propre liste de transactions en attente comme nouveau block sur lequel tout le monde va se synchroniser, il faut déjà lui trouver un identifiant (car chaque block possède son propre identifiant). Or, trouver un identifiant pour son block se révèle être un problème mathématiques très compliqué. Ainsi, toutes les 10 minutes a lieu une sorte de course d’ordinateurs, dans laquelle le vainqueur (celui qui trouve un identifiant valide le premier) voit son block validé. Pour trouver un tel identifiant, on va utiliser une fonction de hachage (voir la définition en fin d’article) . Pour cela, on va créer un fichier contenant l’ensemble des transactions que l’on veut valider, ainsi que le nom du block précédent. On passe ce fichier dans une fonction de hachage, et l’on obtient une chaîne de caractère que l’on va utiliser comme identifiant. Ce lien entre chaque block (chaque identifiant est déterminé en utilisant l’identifiant du block précédent) fait de ce processus une chaîne, d’où encore une fois vous l’aurez compris, le terme « BlockChain ».

   Ceci protège la base de données de la moindre modification. Effectivement, changer le moindre caractère dans le fichier d’un ancien block va complètement changer le résultat de sa fonction de hachage, et ainsi changer complètement son identifiant. Il faudra donc modifier l’identifiant du block suivant, et du suivant, et ce jusqu’au dernier. Il est donc impossible de modifier une transaction passée sans avoir à modifier l’identifiant de tous les blocks inférieurs de la chaîne, sachant qu’il y a un nouveau block toutes les 10 minutes.

   Alors, sécurisée ou pas cette monnaie ? Pas si sûr. Et oui, trouver un identifiant à un bloc repose simplement sur une fonction de hachage, qui n’est pas une fonction si compliquée pour un ordinateur.

   Pour empêcher que des pirates puissent rajouter leurs blocks à toute vitesse, on a ajouté des conditions supplémentaires sur l’identifiant qui fait que le trouver est fastidieux. Quand on fabrique le fichier que l’on veut hacher, on prend l’identifiant du block précédent, la liste des transactions en attente, et on ajoute à la fin un nombre appelé un « nonce ». La présence de ce nonce va modifier le résultat de la fonction de hachage, et on impose des conditions sur le résultat, tels qu’il faille essayer énormément de nonces différents avant d’en trouver un qui convienne, c’est comme essayer tous les codes d’un cadenas jusqu’a trouver celui qui fonctionne. Les conditions sur ce nonce, sont faites de sorte à ce qu’une solution soit trouvée en moyenne toutes les dix minutes.

Enjeux de la BlockChain

   Résumons : chaque noeud du réseau a sa liste de transactions en attente, et travaille d’arrache pied pour que sa liste devienne le prochain block, et que tout le monde se synchronise sur lui. On protège la chaîne de la fraude en demandant aux noeuds du réseau de résoudre un problème compliqué de sorte à pouvoir contribuer, c’est ce qu’on appelle la « preuve de travail », pour contribuer au réseau Bitcoin, il faut travailler. Ainsi, la capacité à frauder devient liée à la puissance de calcul dont on dispose, et non au nombre de noeuds du réseau que l’on possède. A titre indicatif, on estime à 1% la puissance de calcul de Google par rapport à l’ensemble de la puissance du réseau Bitcoin, et à 50% la part de puissance nécessaire pour parvenir à frauder.

   Dans le principe de fonctionnement de la BlockChain, on est protégé par le fait que chacun ne possède qu’une faible puissance de calcul comparée au total. Mais pourquoi les gens accepterait il de mettre leurs ordinateurs, et donc leur puissance de calcul au service du Bitcoin ? En fait on les paye en Bitcoin. Lorsqu’un noeud du réseau arrive à faire passer sa liste de transactions comme nouveau block, son propriétaire reçoit des Bitcoin qui sont créés pour cette occasion, et c’est le seul mécanisme de création de Bitcoin. Ces gens qui mettent leurs ordinateurs au service du Bitcoin sont appelés « mineurs », en références aux mineurs qui allaient chercher de l’or pour augmenter la masse monétaire. Ces récompenses diminuent avec le temps, tel que la masse monétaire du Bitcoin va converger vers 21 millions de Bitcoin.

   Le Bitcoin, bien que révolutionnaire dans son principe, l’est encore plus par la technologie qu’il emploie. La BlockChain permet de garantir une sécurité et une traçabilité bien supérieures aux banques traditionnelles. C’est une technologie qui révolutionne les codes, de part son aspect décentralisé. Son inviolabilité pourrait permettre l’organisation d’élections en ligne par exemple. Mais si l’on parle beaucoup du Bitcoin en ce moment, ce n’est pas tant pour sa technologie, mais pour la spéculation qui se fait dessus. Alors, le Bitcoin, une bulle spéculative ou un investissement d’avenir ?

Glossaire 

Fonction de hachage : Une fonction de hachage prend une chaine de caractère de longueur variable, et retourne une chaine de caractère de longueur fixe, et le moindre changement dans la chaîne d’entrée (comme changer un seul caractère), provoque un grand changement dans la chaine de sortie. Une des applications du hachage est de vérifier qu’un téléchargement s’est bien passé. Une petite erreur dans le téléchargement suffit à rendre le fichier inutilisable. Ainsi, celui qui met le fichier en téléchargement le fait d’abord passer par une fonction de hachage, pour en retirer son « empreinte digitale ». Ainsi, si le fichier téléchargé diffère ne serait-ce que d’un bit du fichier d’origine, le résultat de son hachage sera différent.

Nonce : En cryptographie, un nonce est un nombre arbitraire destiné à être utilisé une seule fois. Il s’agit souvent d’un nombre aléatoire ou pseudo-aléatoire émis dans un protocole d’authentification pour garantir que les anciennes communications ne peuvent pas être réutilisées dans des attaques par rejeu.

Pour les plus curieux :

BlockChain : https://fr.wikipedia.org/wiki/Blockchain

Bitcoin : https://fr.wikipedia.org/wiki/Bitcoin#Financiarisation

Fonction de Hachage : https://fr.wikipedia.org/wiki/Fonction_de_hachage

Signature numérique : https://fr.wikipedia.org/wiki/Signature_num%C3%A9rique

Comments

comments