La technologie Blockchain est depuis longtemps annoncée comme un bouleversement majeur dans l'informatique. Le Bitcoin en est un parfait exemple : cette cryptomonnaie dont la valeur a explosé repose sur le principe de blockchain. Le but de cet article est de décrire le fonctionnement et les principaux concepts inhérents à la mise en place d’une blockchain. Les sujets plus précis tels que l’analyse de crypto-monnaies ou encore le développement d’applications décentralisées pourront faire l’objet d’articles dédiés.
Qu'est-ce qu’une blockchain ?
Une blockchain est par définition une chaîne de blocs. Elle est comparable à un grand registre virtuel, sous forme de réseau peer-to-peer, regroupant un ensemble de transactions effectuées entre les utilisateurs de ce réseau. Chaque mouvement inscrit dans la blockchain l’est à vie et est infalsifiable.
Voici le principe général d’une blockchain :
Une blockchain présente plusieurs intérêts majeurs :
-
Elle est transparente : bien que les échanges demeurent anonymes, n’importe qui peut les consulter.
-
Elle est sécurisée : les transactions sont infalsifiables et sécurisées par des protocoles basés sur la cryptographie asymétrique.
-
Elle est indépendante de tout tiers de confiance ("trusted third party") : c’est l’ensemble du réseau qui se charge d’authentifier les transactions grâce à la cryptographie employée.
Il existe de nombreux domaines d’application tels que signer un contrat de mariage, voter électroniquement ou encore envoyer de l’argent à l’autre bout du monde. En s’affranchissant de tout tiers de confiance extérieur, une blockchain assure des coûts et un délai considérablement réduits pour l’utilisateur.
Historique
La première blockchain est apparue en 2009 avec Bitcoin et utilise la technologie pour sécuriser les échanges de ses “tokens” (unités de compte), les bitcoins.
En novembre 2015, la technologie Blockchain fait la une de “The Economist”. Cet article accélère fortement la démocratisation du sujet, qui était jusque-là encore réservé aux initiés.
Aujourd’hui il existe une multitude de blockchains, chacune possède ses spécificités et ses propres “tokens” qui constituent sa monnaie d’échange.
Quelques exemples :
Il existe 3 types de Blockchain
Les blockchains publiques
Ouvertes et accessibles à tous, tout le monde peut y effectuer ou vérifier des transactions.
Les blockchains privées
Ces dernières sont exécutées sur un réseau privé et les nœuds (utilisateurs) du réseau doivent avoir une autorisation pour y accéder. Elles sont principalement utilisées pour expérimenter la technologie. On peut également retrouver des blockchains privées au sein d'entreprises pour faire communiquer différents systèmes d'information. De nombreux tutoriels existent pour les développeurs, afin de mettre en place leur propre blockchain privée et appréhender la technologie.
Les consortiums
Il s'agit d'une blockchain hybride : certains nœuds peuvent être rendus publiques, tandis que d’autres restent privés pour les actions sensibles. C’est donc une blockchain avec des accès gérés par une partie des acteurs, qui convient aux contextes réglementés comme les banques ou assureurs.
Composition d'une blockchain
Comme indiqué précédemment, une blockchain est une chaîne de blocs contenant chacun plusieurs transactions, et qui vont être inscrits au fur et à mesure dans la blockchain par des nœuds du réseau.
L’implémentation peut différer d’une blockchain à l’autre, mais les principaux éléments d’un bloc sont les suivants :
- un index
- un hash servant à identifier le bloc
- le hash du bloc précédent
- un timestamp
- un ensemble de transactions
Le premier bloc d'une blockchain est appelé le "Genesis Block".
L’article suivant permet de mieux comprendre cette représentation, en implémentant soi-même une blockchain en 200 lignes de code JavaScript :
https://medium.com/@lhartikk/a-blockchain-in-200-lines-of-code-963cc1cc0e54
Utilisation
Le portefeuille
Il s’agit du logiciel client qui va permettre de se connecter à une blockchain pour interagir avec cette dernière. L’utilisateur constitue alors un nœud de la blockchain et peut synchroniser cette dernière sur son poste.
C’est ici que le terme de “décentralisation” prend tout son sens : une blockchain est stockée partout, chaque nœud du réseau en détient une copie.
Un portefeuille utilise la cryptographie asymétrique : l’utilisateur possède une clé privée et une clé publique afin d’échanger de manière sécurisée sur la blockchain. La clé publique est connue par tous et sert d’adresse pour les échanges effectués.
Pour Bitcoin, il existe déjà un large choix de portefeuilles pour l’utilisateur :
Voici par exemple la page d’envoi de bitcoins du portefeuille BitGo :
On y retrouve :
- Le solde du portefeuille
- L’adresse (clé publique) du destinataire
- Un libellé pour le destinataire
- Le montant à transférer
- La conversion vers une monnaie fiduciaire de son choix
- Un libellé (optionnel) pour le transfert
Les transactions
Lorsqu’un utilisateur soumet une transaction (transfert de bitcoins vers une personne par exemple), cette dernière est envoyée sur la blockchain et passe en attente de validation.
C’est alors que les “mineurs” entrent en jeu. Ces utilisateurs apportent de la puissance de calcul au réseau afin de vérifier ces transactions. Typiquement, le logiciel des mineurs va consulter l’historique des transactions, et s’assurer qu’un utilisateur désirant effectuer une transaction possède bien ce qu’il prétend avoir.
Intervient ensuite un consensus pour s’assurer qu’un mineur a bien fourni de la puissance de calcul pour calculer le hash du nouveau bloc. Il s’agit de la preuve de travail (“proof-of-work”), qui sera détaillée dans la suite de cet article.
Une fois fait, le mineur diffuse le hash du nouveau bloc à l’ensemble du réseau. Si le résultat satisfait le consensus, le bloc est ajouté à la blockchain et le mineur est rémunéré avec des tokens de la blockchain, fraîchement créés.
C’est d’ailleurs grâce à ce système de récompense que de nouveaux bitcoins sont créés. A noter qu'ils sont générés de manière dégressive puisque tous les 210.000 blocs minés, la valeur de cette récompense est divisée par 2, c'est ce qu'on appelle le "Halving". Il y a cependant une limite fixée à 21 millions, une fois ce nombre atteint, aucun nouveau bitcoin ne pourra être généré.
Le lien suivant permet de consulter le nombre de bitcoins en circulation : https://blockchain.info/fr/charts/total-bitcoins (plus de 16 millions en 2017)
La preuve de travail
Parlons un peu plus technique avec cet exemple de preuve de travail :
Considérons une chaîne de caractères “Hello World” et un challenge à résoudre.
Ce dernier sera de concaténer un nombre appelé “nonce” à la chaîne, puis chiffrer l’ensemble grâce à l’algorithme de hachage SHA-256, afin de tomber sur une valeur qui réponde au problème posé.
Concrètement, si le challenge impose d’avoir un hash résultat commençant par quatre zéros, voici ce que va faire le logiciel de minage :
- Il va concaténer la chaîne de caractères avec une première valeur de “nonce”, égale à 0.
- Il va appliquer un SHA-256 sur la chaîne obtenue et vérifier le résultat :
- si le hash résultat commence par quatre zéros, on s’arrête. La solution au problème est la valeur du “nonce”.
- si le hash ne commence pas par quatre zéros, on incrémente le “nonce” et on effectue de nouveau l’opération 2.
La valeur du “nonce” constitue alors la solution du problème et va être proposée aux autres mineurs, la vérification sera très rapide puisque qu’il n’y a qu’une opération de hachage à effectuer, et ce directement avec le “nonce” proposé. Si la solution est correcte, le bloc sera accepté et ajouté à la blockchain, et le mineur ayant résolu le problème recevra des tokens de la blockchain.
Sur Bitcoin, du fait de la difficulté atteinte, il est aujourd’hui très rare qu’un mineur travaille seul, et il est plus courant de contribuer à un “pool” de minage, pour mettre en commun la puissance de calcul de plusieurs mineurs pour des résultats plus fréquents, et où les gains sont ensuite partagés entre les différents participants.
Dans le cadre d’une blockchain, la chaîne de caractères à laquelle sera appliqué le “nonce” contient généralement le hash du bloc précédent ainsi que les détails du bloc candidat. Aussi, la difficulté du challenge est adaptée régulièrement, afin de conserver un temps de minage constant pour générer un nouveau bloc (environ 10 minutes sur la blockchain Bitcoin).
La preuve d’enjeu
Bien qu’il ait fait ses preuves, le principe de “proof-of-work” présente néanmoins un gros désavantage : il nécessite beaucoup de puissance de calcul, consomme donc énormément d’électricité et génère beaucoup de pollution.
L’autre méthode envisagée est la preuve d’enjeu (“proof-of-stake”). Le principe est le suivant : plus on a de tokens sur une blockchain, plus on a de chances de vérifier des transactions et donc de récupérer d’autres tokens. Une personne ayant validé un bloc devra attendre un certain délai avant de pouvoir réitérer l’opération afin de prévenir toute dominance de certains utilisateurs plus riches sur le réseau.
La preuve d’enjeu est par exemple déjà utilisée par la cryptomonnaie “blackcoin” et Ethereum devrait également l’adopter prochainement.
Plus de détails sur le minage, le “proof-of-work” et le “proof-of-stake” dans les liens suivants :
- https://bitcoin.fr/minage/
- https://bitcoin.fr/preuve-de-travail-proof-of-work/
- https://bitcoin.fr/pow-pos/
Conclusion
Maintenant que le fonctionnement d’une blockchain a été expliqué, il faut bien avoir conscience que son utilisation ne se cantonne pas qu’à l’échange de cryptomonnaies.
Le réel intérêt qui risque de bouleverser son usage est la notion d’applications décentralisées. C’est ce que permet par exemple Ethereum, par l’utilisation de contrats intelligents, déployés au sein de sa blockchain, et qui permettent d’étendre grandement les possibilités de la technologie.
Un grand nombre d’institutions et d’usages sont aujourd’hui en train d’être impactés par cette technologie. Ce dernier lien est un documentaire permettant de bien prendre conscience de ce bouleversement : http://blockchain-documentary.com/