se produit d’ailleurs assez régulièrement. Certaines blockchains tentent de résoudre ce problème en implémentant des algorithmes de consensus différents qui n’impliquent pas de minage.
Voilà, vous connaissez maintenant comment fonctionne une blockchain!
Fig. 8: La blockchain est identique sur tous les nœuds du réseau sauf quand un pirate essaye de la modifier. On voit ici que le nœud C tente de modifier la data du bloc #2
Quand on parle de blockchain, on ne parle pas forcément de crypto-monnaies. Remarquez que jusqu'à présent, la data stockée dans les blocs de nos exemples étaient de simples chaînes de caractères. On peut stocker tout type de données : des identités, des documents électroniques, des contrats d’assurance, etc. Cependant, si on y stocke des transactions financières comme aux fig. 9, 10 et 11, on a alors effectivement une crypto-monnaie et on pourra y échanger de l’argent, sous forme de tokens. Mais l’inverse n’est pas vrai. On peut vraiment stocker tout type de données dans une blockchain. Vous imaginez donc qu’il existe de nombreux domaines d’application pour la blockchain. À chaque fois qu’il est nécessaire d’avoir un système d'échange sécurisé et de traçage de données entre parties sans totale confiance sur un réseau non sécurisé, vous devriez vous poser la question d’une éventuelle utilisation d’une blockchain.
Précisons qu’il existe des blockchains publiques (Bitcoin, Ethereum,...) et des blockchains privées, appelées DLT pour Distributed Ledger Technology, car elles n’engagent pas toujours une structure de donnée Blockchains à proprement parler, mais seulement quelques composants clés, comme la signature électronique.
Chez OCTO, nous utilisons beaucoup les blockchains Ethereum, Corda et Hyperledger Fabric afin de tracer, suivre, partager et sécuriser non seulement les transactions financières, mais aussi les processus de fabrication, les chaînes d'approvisionnements, les contrats d’assurance et bancaires et tout autre processus d’échanges complexes entre plusieurs acteurs.
Dans la suite de cet article nous allons considérer uniquement une blockchain crypto-monnaie de type Bitcoin.
Remarquez aux fig. 9, 10 et 11 que la data contient des transactions du type “$40.27 from Elizabeth to Jane”. On désigne par $ une valeur monétaire qui n’est pas forcément du dollar, mais qui pourrait être n’importe quel token, tel que du Bitcoin, de l’Ethereum, etc.
Cependant, dans notre exemple, comment sait-on que Elizabeth a assez d’argent pour envoyer $40.27 à Jane ?
La blockchain Bitcoin ne contient pas de registre montrant à tout moment le solde de chaque compte. Au lieu de ça, lorsque Elizabeth tente d’effectuer une transaction, le processus va remonter le temps dans la blockchain et calculer la différence entre toutes ses transactions entrantes et toutes ses transactions sortantes afin d’en déduire le maximum d’argent que Elizabeth peut envoyer.
Fig. 9: Un bloc contenant des transactions financières
Fig. 10: Une blockchain contenant des transactions financières
Fig. 11: Une blockchain distribuée contenant des transactions financières, ou crypto-monnaies
Vous comprenez maintenant comment la blockchain est capable de calculer le solde de chaque personne et d'autoriser ou non ses transactions. Cependant, d'où vient tout cet argent “stocké” dans la blockchain? Si nous remontions complètement la blockchain jusqu’au premier bloc, il y aurait bien un moment où de l’argent a été introduit pour la première fois. Si les montants étaient uniquement calculés à partir des transactions entre utilisateurs, il n’y aurait aucune création de nouveau token. Il y aurait 0 bitcoin…
En fait, de nouveaux bitcoins sont générés par la blockchain quand un nouveau bloc est signé et ces nouveaux tokens sont donnés au premier mineur qui a signé le bloc. À la fig. 12, vous pouvez voir que $100 sont créés de toute pièce et donnés à Anders pour le remercier d’avoir investi sa puissance de calcul à miner un bloc. On appelle cela la reward ou coinbase. Anders est alors capable de dépenser cet argent comme s'il l’avait reçu d’un autre utilisateur. C’est ce processus qui permet de mettre en circulation des nouveaux tokens, de la même manière qu’une banque centrale est capable d’imprimer de nouveaux billets. L’avantage d’une blockchain par rapport à une banque centrale est que le processus est complètement autonome et inaltérable. Il n’est pas possible d’avoir de surinflation.
Cependant, il y a un encore un gros problème dans notre schéma de blockchain. Êtes-vous à ce stade capable de l’identifier? Sachant qu'Elizabeth a un solde positif de $50, est-ce que Jane pourrait ajouter la transaction “$40.27 from Elizabeth to Jane” elle-même à un nouveau bloc sans qu'Elizabeth donne son accord ? À ce stade, n’importe qui semble être capable de dépenser l’argent de n’importe qui d’autre !
Fig. 12: Un bloc avec sa coinbase/reward a Anders, qui lui permet de faire des transactions.
Il est essentiel pour le bon fonctionnement de la blockchain que seule Elizabeth soit capable d’envoyer la transaction “$40.27 from Elizabeth to Jane”. Pour cela, nous allons avoir besoin d’un mécanisme cryptographique de clé privée et clé publique.
La fig. 13 montre une paire de clés. La clé privée est un nombre hexadécimal très long généré aléatoirement (vous pouvez le faire vous-même). La clé publique est un nombre hexadécimal qui est calculé à partir de la clé privée. Il est possible de calculer la clé publique à partir de la clé privée, mais l’inverse n’est pas vrai. Il est pratiquement impossible de retrouver la clé privée à partir de la clé publique.
Comme son nom l'indique, la clé privée doit rester privée. Vous ne devez jamais la communiquer à qui que ce soit. Par contre, la clé publique doit être publique et accessible à tous. Pourquoi ?
Fig. 13: Une clé privée que l’on a choisie aléatoirement et la clé publique associée générée par l’algorithme cryptographique
La clé publique va permettre de vérifier nos signatures. En effet, notre clé privée va servir à générer des signatures pour nos données. La fig. 14 montre une signature générée par notre clé privée pour le message “Bonjour les OCTOs”. Remarquez que si nous changeons le message, la signature change.
Fig. 14: On signe notre donnée avec notre clé privée
Maintenant, si l’on donne à quelqu’un notre message et notre signature, cette personne est capable de vérifier l’authenticité du message. Comment ? Simplement en allant chercher notre clé publique et appliquer l’algorithme de vérification cryptographique sur le message et sa signature. Rappelons que la personne n’a pas accès à notre clé privée, mais en utilisant uniquement la clé publique, l’algorithme cryptographique va lui dire “Oui, ce message a bien été écrit par la personne possédant la clé privée” (voir fig. 15) et garantit qu’il n’a pas été modifié par un tiers auquel cas la signature ne serait plus valide (voir fig. 16).
Fig. 15: Grâce à la clé publique et la signature, n’importe qui peut vérifier que cette donnée a bien été émise par le détenteur de la clé privée...
Fig. 16: ...ou inversement, que la donnée a été altérée ou ne provient pas du détenteur de la clé privée.
Maintenant, au lieu d’utiliser une simple chaîne de caractères dans la data, nous allons-y insérer une transaction ! La transaction aura notre clé publique en tant qu'émetteur, et la clé publique du destinataire, et nous signons cela avec notre clé privée. Voir fig. 17 en exemple.
La blockchain est maintenant capable d'utiliser notre clé publique pour vérifier que nous sommes bien à l’origine de cette transaction (fig. 18), que nous sommes bien l'expéditeur et que la transaction n’a pas été altérée par un tiers.
Fig. 17: On signe notre transaction avec notre clé privée
Fig. 18: La blockchain vérifie que cette transaction a bien été envoyée par le propriétaire de la clé privée
Revenons à notre schéma non sécurisé de blockchain fig. 10 sauf que maintenant toutes les transactions sont signées par leur expéditeur respectif (fig. 19, 20 et 21). Chaque transaction possède la signature de l'expéditeur. Remarquez que l’on ne marque plus des noms de personnes ($11.00 from Anders to Elizabeth) mais des clés publiques ($11.00 from bc8c66ac158de287272 to d3029db8bbb2db17de20)
Si un pirate essaye de changer par exemple la valeur du montant d’une transaction, deux choses se produisent:
- le bloc n’est plus signé car le hash a changé, comme nous l’avons vu au chapitre 5
- la signature change et ne vérifie plus cette transaction !
Si on mine encore le bloc, il sera de nouveau signé mais la signature de cette transaction reste invalide. Il est impossible de valider à nouveau la transaction sans avoir la clé privée de l'expéditeur de la transaction.
C’est ainsi que les transactions dans la blockchain sont protégées en permettant uniquement à l'expéditeur de signer ses transactions, et cela marche parfaitement.
Finalement, pour recevoir et envoyer de l’argent, il vous suffit de générer une paire de clés, et c’est tout ! Il n’y a pas besoin d’ouvrir un compte chez une banque ou de prouver son identité auprès d’une entité centralisée, ou toute autre démarche qui pourrait être censurée. La blockchain est résistante à la censure. N’importe qui peut envoyer et recevoir de l’argent !
Fig. 20: Une blockchain complète
Fig. 21: Une blockchain complète et distribuée
Félicitations, vous faites désormais partie du 0.01% de la population capable d'expliquer comment fonctionne une blockchain. Merci OCTO :)