Blockchain - Guide rapide

Ces dernières années, il y a beaucoup de buzz sur Blockchain. Beaucoup ont décrit cela comme la technologie la plus perturbatrice de la décennie. Surtout, les marchés financiers pourraient être les plus touchés.

La technologie est en cours d'adaptation dans de nombreux secteurs verticaux tels que la santé, les médicaments, l'assurance, les propriétés intelligentes, les automobiles et même les gouvernements.

Cependant, jusqu'à présent, la mise en œuvre la plus réussie de Blockchain est le Bitcoin - A Peer-to-Peer Electronic Cash System, qui est d'ailleurs également la première implémentation de la technologie blockchain. Ainsi, pour comprendre la technologie de la blockchain, il est préférable de comprendre comment Bitcoin System est conçu et mis en œuvre.

Dans cet article, vous apprendrez ce qu'est la Blockchain, son architecture, son implémentation et ses différentes fonctionnalités. Je vais site la mise en œuvre Bitcoin tout en décrivant les subtilités de la blockchain.

L'architecture blockchain n'est pas si banale et beaucoup ont écrit de bons articles, des tutoriels dont plusieurs vidéos. Ces publics vont du novice au professionnel. Dans ce didacticiel, je me concentrerai sur la compréhension conceptuelle de l'architecture de la blockchain, en gardant à l'esprit les novices et les professionnels. Avant de se plonger dans la blockchain, il est important de savoir pourquoi le besoin de cette nouvelle technologie est apparu? La réponse à cette question réside dans ce que l'on appelleDouble − Spending.

Prenons une situation montrée dans l'image -

Comme on le voit clairement ici, Bob offre un billet de 10 $ à Lisa en échange d'un livre. Une fois que Lisa a reçu cette facture physique de 10 $, Bob n'a aucun moyen de réutiliser cet argent pour une autre transaction, car la monnaie physique est maintenant en possession de Lisa.

Maintenant, considérons une situation où l'argent est payé sous forme numérique. Ceci est illustré dans l'image -

Comme le format d'échange d'argent est au format numérique, il s'agit essentiellement d'un fichier physique binaire stocké quelque part sur l'appareil de Bob. Une fois que Bob a donné ce fichier (monnaie numérique) à Lisa, il peut également en donner une copie à Alice. Tous deux pensent maintenant avoir reçu l'argent sans avoir aucun moyen d'authentifier la pièce numérique et livreraient ainsi leurs biens respectifs à Bob. C'est appelédouble-spending lorsque l'expéditeur dépense le même argent à plus d'un endroit pour obtenir des services ou des biens auprès de plusieurs fournisseurs.

Pour résoudre ce problème de double dépense, on emploierait une autorité centralisée pour surveiller toutes les transactions. Ceci est illustré dans l'image -

L'autorité centralisée, qui en commun est votre banque, tient un registre comptable de toutes les transactions. Maintenant, Bob doit envoyer son argent numérique à la banque qui ferait une entrée dans son grand livre en débitant le compte de Bob. Après s'être assuré que Bob avait un solde suffisant pour payer l'argent numérique qu'il voulait envoyer, enverrait l'argent à Lisa en créditant son compte dans son grand livre.

Maintenant, il est garanti que Bob ne peut pas dépenser deux fois l'argent. Si chaque transaction numérique est acheminée via une autorité centralisée comme celle-ci, le problème de la double dépense serait résolu. Cela offre également un autre avantage en validant l'authenticité de chaque pièce (monnaie numérique) qu'elle reçoit dans la transaction. Ainsi, la fausse monnaie (argent en double comme dans le cas de Bob payant à Alice en utilisant une copie) serait facilement détectée et empêchée de la circulation.

L'introduction d'une autorité centralisée, bien qu'elle résout le problème de la double dépense, introduit un autre problème majeur - le coût de création et de maintien de l'autorité centralisée elle-même.

Comme les banques ont besoin d'argent pour leurs opérations, elles commencent à réduire les commissions sur chaque transaction de change qu'elles font pour leurs clients. Cela peut parfois devenir très coûteux, en particulier dans les transferts d'argent à l'étranger où plusieurs agents (banques) peuvent être impliqués dans l'ensemble de la transaction.

Tous les problèmes ci-dessus sont résolus par l'introduction de la monnaie numérique, appelée Bitcoin. Je vais maintenant vous donner un bref aperçu de ce qu'est Bitcoin avant de plonger dans sa conception et son architecture.

Le Bitcoin a été introduit dans ce monde par Satoshi Nakamoto à travers un livre blanc de type recherche intitulé Bitcoin: A Peer-to-Peer Electronic Cash System en 2008.

Le Bitcoin a non seulement résolu le problème de la double dépense, mais a également offert de nombreux autres avantages, l'un de ces avantages à mentionner ici est l'anonymat dans les transactions. Satoshi qui a créé le système et a effectué quelques transactions sur ce système est totalement anonyme pour le monde entier.

Imaginez, dans ce monde de médias sociaux, lorsque la vie privée de chaque individu est en jeu, le monde n'est pas en mesure de découvrir jusqu'à présent qui est Satoshi? En fait, nous ne savons pas si Satoshi est un individu ou un groupe de personnes. Le googler a également révélé le fait que les bitcoins détenus par Satoshi Nakamoto valent environ 19,4 milliards de dollars - cet argent reste désormais non réclamé dans le système Bitcoin. Alors, qu'est-ce que Bitcoin - jetons un œil!

Qu'est-ce que Bitcoin?

Comme vous l'avez vu précédemment, la banque tient un registre enregistrant chaque transaction. Ce grand livre est privé et géré par la banque. Satoshi a proposé que ce registre soit public et tenu à jour par la communauté.

Au moment où vous rendez un tel grand livre public, plusieurs considérations vous viendront à l'esprit. Ce registre doit être infalsifiable afin que personne ne puisse modifier ses écritures. Comme chaque entrée dans le grand livre est visible publiquement, nous devrons trouver comment maintenir l'anonymat - évidemment, vous ne voudriez pas que tout le monde sache que je vous ai payé un million de dollars.

De plus, comme il n'y a qu'un seul grand livre pour suivre chaque transaction dans le monde, la taille du grand livre serait une autre grande préoccupation. Fournir une solution à ces subtilités n'était pas anodin et c'est ce que je tente ici de vous faire comprendre l'architecture sous-jacente de Bitcoin en termes simples.

Cette architecture sous-jacente est le Blockchainet c'est le sujet de ce tutoriel. Pour comprendre l'architecture Blockchain, vous devez comprendre quelques fonctionnalités clés sur lesquelles elle est basée. Alors, commençons avec PKI - Cryptographie à clé publique.

La cryptographie à clé publique ou en bref PKI est également connue sous le nom de cryptographie asymétrique. Il utilise deux paires de clés - publique et privée. Une clé est un certain nombre binaire long. La clé publique est distribuée dans le monde entier et est véritablement publique comme son nom l'indique. La clé privée doit être strictement privée et il ne faut jamais la perdre.

Dans le cas de Bitcoin, si jamais vous perdez la clé privée de votre portefeuille Bitcoin, tout le contenu de votre portefeuille serait instantanément vulnérable au vol et avant que vous ne le sachiez, tout votre argent (le contenu de votre portefeuille) serait parti sans mécanisme dans le système pour découvrir qui l'a volé - c'est l'anonymat dans le système que j'ai mentionné plus tôt.

L'infrastructure PKI remplit deux fonctions: l'authentification et la confidentialité des messages via un mécanisme de cryptage / décryptage. Je vais maintenant expliquer ces deux fonctions -

Authentification

Lorsque les deux parties échangent des messages, il est important d'établir une confiance entre l'expéditeur et le destinataire. Surtout, le destinataire doit faire confiance à la source du message. En revenant à notre scénario précédent (illustré à la figure 1) de Bob envoyant de l'argent à Lisa pour acheter certains produits d'elle, voyons comment l'ICP construit cette confiance entre Bob et Lisa. Regardez l'image ci-dessous -

En premier lieu, si Bob veut envoyer de l'argent à Lisa, il doit créer sa propre clé privée / publique. Notez que les deux clés sont toujours associées et que vous ne pouvez pas mélanger les clés privées et publiques de différentes personnes ou de différentes instances.

Maintenant, Bob dit qu'il envoie 10 $ à Lisa. Il crée donc un message (un message en texte brut) contenant la clé publique de Bob (expéditeur), la clé publique de Lisa (destinataire) et le montant (10 $).

Le but de cet envoi tel que «Je veux acheter de la citrouille chez vous» est également ajouté au message. Le message entier est maintenant signé à l'aide de la clé privée de Bob. Lorsque Lisa recevra ce message, elle utilisera l'algorithme de vérification de signature de PKI et la clé publique de Bob pour s'assurer que le message provient bien de Bob. Le fonctionnement de l'ICP dépasse le cadre de ce didacticiel. Le lecteur intéressé est renvoyé à ce site pour une discussion plus détaillée sur l'ICP. Cela établit l'authenticité de l'expéditeur du message. Maintenant, regardons la confidentialité des messages.

Confidentialité des messages

Maintenant, comme Lisa a reçu son paiement, elle veut envoyer le lien vers son ebook que Bob veut acheter. Alors Lisa créait un message et l'envoyait à Bob comme indiqué sur l'image -

La Lisa crée un message tel que "Voici le lien vers mon ebook que vous aviez demandé", le signe avec la clé publique de Bob qu'elle a reçue dans le message de demande de Bob et crypte également le message en utilisant une clé secrète qui est partagée entre les deux pendant la négociation HTTPS.

Maintenant, Lisa est sûre que seul Bob peut décoder le message en utilisant la clé privée détenue par Bob seul. De plus, quelqu'un qui intercepterait le message ne pourrait pas récupérer son contenu car le contenu est chiffré par une clé secrète détenue uniquement par Bob et Alice. Cela garantit à Lisa que l'accès à son ebook n'est accordé qu'à Bob.

Après avoir vu les deux fonctionnalités, Authentification et Confidentialité des messages, impliquées par PKI, allons de l'avant pour voir comment Bitcoin utilise PKI pour sécuriser le grand livre public que j'ai mentionné dans le chapitre «Qu'est-ce que Bitcoin?».

Pour votre connaissance - Les algorithmes PKI les plus populaires sont RSA et ECDSA , Bitcoin utilise ce dernier.

L'une des fonctions les plus importantes de PKI est la fonction de hachage. Une fonction de hachage mappe les données de toute taille arbitraire à des données de taille fixe. Bitcoin utilise la fonction de hachage SHA-256 qui produit un hachage (sortie) de taille 256 bits (32 octets). Ceci est illustré dans l'image -

Bob, en passant une commande auprès de Lisa, crée un message similaire à celui illustré ci-dessus. Ce message est haché via une fonction de hachage qui produit un hachage de 32 octets. La beauté de ce hachage est qu'à toutes fins pratiques, le hachage (le nombre de 256 bits) est considéré comme unique pour le contenu du message. Si le message est modifié, la valeur de hachage changera. Non seulement cela étant donné une valeur de hachage, il est impossible de reconstruire le message d'origine.

Après avoir vu l'importance du hachage, passons à un autre concept en Bitcoin qu'est le minage.

Lorsque Bob crée une demande d'achat pour Lisa, il ne l'envoie pas à Lisa seule. Le message de requête est plutôt diffusé sur l'ensemble du réseau auquel il est connecté. Le réseau de Bob est représenté sur l'image.

Le message va à tous les nœuds connectés (machines). Certains des nœuds du diagramme sont marqués comme mineurs. Ce sont les machines qui exécutent un logiciel pour extraire le message bitcoin. Je vais maintenant vous expliquer ce que signifie ce minage.

Processus minier

Comme l'ensemble du réseau est largement distribué, chaque mineur du réseau est censé recevoir plusieurs messages de plusieurs fournisseurs à une période donnée. Ce que fait le mineur, c'est qu'il combine ces messages en un seul bloc. Ceci est illustré dans l'image -

Une fois qu'un bloc de messages est formé, le mineur crée un hachage sur le bloc en utilisant la fonction de hachage décrite précédemment. Maintenant, comme vous le savez, si un tiers modifie le contenu de ce bloc, son hachage deviendrait invalide. Incidemment, chaque message est horodaté afin que personne ne puisse modifier son ordre chronologique sans affecter la valeur de hachage du bloc. Ainsi, les messages du bloc sont parfaitement protégés contre les altérations. La manière dont ce fait est utilisé pour sécuriser toutes les transactions sur le réseau est expliquée plus en détail.

Les blocs créés par divers mineurs sont enchaînés pour former ce que l'on appelle un registre public véritablement distribué.

Chaque bloc de la chaîne contient plusieurs messages (transactions) comme indiqué précédemment dans la figure 8. Un bloc de la chaîne peut provenir de n'importe quel mineur. Lors de la création de la chaîne de blocs, nous observons la règle selon laquelle le hachage du bloc précédent est ajouté au bloc courant.

Ainsi, un mineur lors de la création du bloc, récupère le hachage du dernier bloc de la chaîne, le combine avec son propre ensemble de messages et crée un hachage pour son bloc nouvellement créé. Ce bloc nouvellement créé devient maintenant la nouvelle extrémité de la chaîne et ainsi la chaîne continue de croître à mesure que de plus en plus de blocs y sont ajoutés par les mineurs.

Comme toutes les transactions sont horodatées, nous devons implémenter un serveur d'horodatage distribué sur un réseau peer-to-peer. Cela nécessite une implémentation supplémentaire et c'est la preuve de travail que je vais décrire maintenant. À chaque bloc, nous ajoutons maintenant un autre élément appeléNonce comme le montre la figure ci-dessous -

Nonce est un nombre tel que le hachage du bloc répond à un certain critère. Ce critère pourrait être que le hachage généré doit avoir ses quatre premiers chiffres pour être zéro.

Ainsi, le hachage généré ressemblerait à 000010101010xxx. En règle générale, le mineur commence avec une valeur Nonce de 0 et continue de l'incrémenter jusqu'à ce que le hachage généré réponde au critère spécifié.

Notez que la génération de hachage fonctionne au hasard et est hors de votre contrôle - c'est-à-dire que vous ne pouvez pas forcer la fonction de hachage à générer un certain hachage. Ainsi, plusieurs itérations peuvent être nécessaires jusqu'à ce que le hachage souhaité avec quatre zéros en tête soit généré. Le temps prévu pour générer un bloc dans le système Bitcoin est de 10 minutes. Une fois que le mineur a réussi à extraire le bloc, il le libère dans le système, ce qui en fait maintenant le dernier bloc de la chaîne.

Notez qu'il y a plusieurs mineurs en compétition pour générer le bloc légitime. Le système Bitcoin récompense le premier mineur à succès en lui donnant certains bitcoins. En général, le mineur avec plus de puissance de calcul peut être un gagnant précoce. Cela peut provoquer des attaques sur l'ensemble du système par ceux qui possèdent une énorme puissance de traitement. Je décrirai les attaques et comment elles sont atténuées vers la fin de ce tutoriel.

Je vais maintenant résumer les étapes décrites ci-dessus; c'est ce qui se passe dans le réseau -

  • Quiconque souhaite obtenir des services du tiers qui a annoncé sur le réseau crée d'abord une transaction (message au destinataire souhaité).

  • Sur une période donnée, de nombreux expéditeurs (acheteurs) et destinataires (vendeurs) peuvent créer de telles transactions.

  • Toutes les transactions sont diffusées sur le réseau vers tous les nœuds. Notez qu'il n'est pas nécessaire qu'une transaction donnée atteigne chacun des autres nœuds du réseau.

  • Chaque nœud rassemble les nouvelles transactions dans un bloc. Notez que l'ensemble des transactions dans chaque bloc est indépendant de l'ensemble des blocs créés par d'autres et sera naturellement différent des autres. Cela n'a pas d'importance; le système garantit que chaque transaction diffusée sur le réseau est incluse dans un bloc sur une durée raisonnable. En général, l'expéditeur incitera le nœud en offrant une certaine quantité de bitcoins au mineur pour ses efforts. Le mineur peut choisir de donner la priorité à l'inclusion dans le bloc à ceux qui ont des incitations plus élevées.

  • Le nœud travaille maintenant à trouver la preuve de travail pour son bloc assemblé.

  • Lorsque le nœud trouve une preuve de travail, il diffuse le bloc assemblé sur le réseau.

  • Les nœuds qui reçoivent le nouveau bloc ne l'accepteront qu'après avoir vérifié que toutes les transactions du bloc sont valides et non déjà dépensées.

  • Si le bloc est accepté comme valide, le nœud qui travaille sur son propre nouveau bloc devra réassembler les transactions dans son bloc en s'assurant que les transactions ne sont pas dupliquées. Le nœud travaille maintenant sur la recherche de la preuve de travail sur son bloc nouvellement créé; ce faisant, il prendra le hachage du bloc accepté comme hachage précédent.

  • De même, la blockchain continue de croître pour toujours.

Maintenant, comme nous avons vu comment tout le système fonctionne, permettez-moi de décrire certains des effets secondaires et comment les résoudre.

Comme nous l'avons vu dans le chapitre Bitcoin - Minage, un mineur peut être inondé de nombreuses transactions à une période donnée. La taille maximale d'un bloc est prédéfinie dans le système, ce qui nécessite que seul un certain nombre de transactions soit inclus dans le bloc.

Le nombre de transactions dans le bloc est déterminé par la taille de bloc prédéfinie et la longueur moyenne de chaque bloc. Un conseil important ici est que l'expéditeur ne doit pas inclure trop d'informations dans son message afin de le rendre court et inciter ainsi le mineur à l'accepter avant les autres messages longs.

Un expéditeur ajoutera généralement également des frais de transaction en termes d'un certain nombre de bitcoins afin d'inciter le mineur à être inclus tôt dans son bloc.

L'autre conséquence de la construction de la blockchain est sa simple taille. Sur une période de temps, la blockchain entière peut devenir trop grande pour qu'un nœud puisse la stocker sur son disque. Ceci est résolu en utilisant Merkle Tree qui est décrit ci-après.

Le problème d'espace disque dans un nœud est facilement surmonté car toutes les transactions d'un bloc sont hachées dans un arbre Merkle comme indiqué dans l'image -

L'en-tête de bloc contient maintenant le hachage du bloc précédent, un Nonce et le Root Hashde toutes les transactions du bloc en cours dans un arbre Merkle. Comme çaRoot Hashinclut les hachages de toutes les transactions dans le bloc, ces transactions peuvent être élaguées pour économiser de l'espace disque. Alors maintenant, votre blockchain ressemblera à l'image ci-dessous -

Cela peut entraîner une économie importante de l'espace disque. Cette stratégie est utilisée par un client normal qui souhaite simplement recevoir des paiements d'autres personnes. Cependant, les mineurs doivent sauvegarder la blockchain complète. Maintenant, la question se pose, comment un récepteur vérifie le paiement sans avoir la possibilité de retracer une pièce reçue jusqu'à son origine. Ceci est expliqué ensuite.

Prenons un cas où, en tant que fournisseur, vous voudrez peut-être vérifier un certain paiement effectué dans le passé. Comme la blockchain que vous tenez sur votre machine ne contient que les en-têtes de bloc comme indiqué dans la figure précédente, la transaction que vous recherchez est manquante dans la copie de votre blockchain.

Vous pouvez maintenant rechercher en arrière dans votre copie de la blockchain jusqu'à ce que vous trouviez un bloc dans lequel la transaction souhaitée est horodatée. Maintenant, demandez l'arborescence de merkle du bloc sélectionné et vous aurez la transaction que vous recherchez. Ceci est illustré dans la figure ci-dessous -

Ici, nous supposons que vous recherchez Tx103. Bien que vous ne puissiez pas voir le contenu de Tx103, vous savez que cela a été accepté par le bloc auquel il appartient et tous les blocs suivants de la chaîne. Ainsi, vous pouvez faire confiance à cette transaction en toute sécurité et poursuivre vos activités.

Comme nous l'avons vu, le réseau Bitcoin contient plusieurs mineurs. Il est possible que les deux mineurs différents résolvent la preuve de travail en même temps et ajoutent ainsi leurs blocs au dernier bloc connu de la chaîne. Ceci est illustré dans l'image ci-dessous -

Maintenant, nous avons deux branches après le bloc 3. Les deux branches sont valides. Ainsi, le bloc extrait suivant peut être ajouté dans l'une ou l'autre des branches. Supposons que le mineur ajoute le bloc nouvellement extrait au bloc 104-A, la branche contenant le bloc 104-A sera plus longue que la branche contenant le bloc 104-B. Ceci est illustré dans l'image ci-dessous -

Dans l'architecture Bitcoin, la branche la plus longue gagne toujours et les plus courtes sont purgées. Le bloc 104-B doit donc être purgé. Avant de purger ce bloc, toutes les transactions de ce bloc seront renvoyées au pool de transactions afin qu'elles soient extraites et ajoutées à un futur bloc. C'est ainsi que les conflits sont résolus et qu'une seule chaîne de blocs est maintenue par le système.

Comme le grand livre qui enregistre toutes les transactions Bitcoin est rendu vraiment public, la confidentialité est en jeu. N'importe qui dans le monde pourrait savoir qui a payé qui? Le système bancaire traditionnel est capable de maintenir ce type de confidentialité en gardant ses archives confidentielles.

La confidentialité dans le système Bitcoin est obtenue par une stratégie différente. Notez que nous avons dit que l'expéditeur d'un bitcoin doit savoir à qui payer. Il demande donc la clé publique du vendeur auquel il souhaite effectuer le paiement. Cette clé publique peut être anonyme.

En ce sens, en tant que fournisseur de certains services, lorsque quelqu'un vous demande où envoyer le paiement, vous lui envoyez simplement votre clé publique. L'association de cette clé publique avec vous n'est enregistrée nulle part dans le grand livre. De cette façon, toute personne en dehors de cette transaction ne saurait que combien d'argent est traité et à quelle clé publique l'argent est versé.

Pour atteindre un degré de confidentialité plus élevé, pour chaque transaction, vous pouvez générer une nouvelle clé privée / publique pour chaque transaction afin que plusieurs transactions effectuées par vous ne puissent pas être regroupées par un tiers. Pour un étranger, cela signifierait simplement que plusieurs transactions de plus petite valeur ont été effectuées et qu'elles ne seront jamais liées à une source commune.

Enfin, tout système basé sur Internet en ligne est vulnérable aux abus. Je vais maintenant décrire quelques types d'attaques possibles sur le système Bitcoin et comment celles-ci sont atténuées.

Je vais discuter de trois types différents d'attaques probables dans le système Bitcoin -

Attaque de course

En tant qu'attaquant, vous pouvez envoyer la même pièce à différents vendeurs en succession rapide, probablement en utilisant deux machines différentes. Si les vendeurs n'attendent pas la confirmation de bloc avant de livrer les marchandises, ils se rendront très vite compte que la transaction a été rejetée pendant le processus d'extraction. La solution à ce type d'attaque est que le vendeur doit attendre au moins une confirmation de blocage avant d'envoyer les marchandises.

Attaque de Finney

Dans ce cas, l'attaquant est le mineur. Le mineur extrait un bloc avec sa transaction et ne le libère pas dans le système. Il utilise maintenant les mêmes pièces dans une deuxième transaction, puis libère le bloc pré-extrait. Évidemment, la deuxième transaction serait finalement rejetée par d'autres mineurs, mais cela prendra un certain temps. Pour atténuer ce risque, le vendeur doit attendre au moins six confirmations de bloc avant de libérer les marchandises.

L'attaque à 51%

Dans ce type d'attaque, nous émettons une hypothèse irréalisable selon laquelle quelqu'un possède 51% de la puissance de calcul du réseau. L'attaquant dans ce type d'attaque exploite une blockchain privée où il double les pièces.

Comme il possède la majorité de la puissance de calcul, il a la garantie que sa blockchain privée à un moment donné serait plus longue que la chaîne du réseau «honnête». Il libère ensuite sa blockchain privée dans le système, rendant toutes les transactions précédemment enregistrées dans la blockchain honnête invalides.

Ce type d'attaque est fictif car il est très coûteux d'acquérir une puissance de calcul égale ou supérieure à 51% de la puissance de calcul de l'ensemble du réseau.

Dans ce court didacticiel, vous avez découvert plusieurs concepts de Blockchain en prenant Bitcoin comme étude de cas. Le Bitcoin est la première implémentation réussie de la blockchain. Aujourd'hui, le monde a trouvé des applications de la technologie blockchain dans plusieurs industries, où la confiance sans l'implication d'une autorité centralisée est souhaitée. Alors bienvenue dans le monde de la Blockchain.

Lectures supplémentaires -

  • Papier original de Satoshi - Bitcoin: un système de paiement électronique peer-to-peer

  • Site officiel - Bitcoin.org