Une introduction à la blockchain

La technologie blockchain est l’un des buzzwords du moment, l’objet d’une vénération presque mystique dans des secteurs d’activités variés, même si, à l’heure actuelle, les applications concrètes se font attendre. Pour espérer distinguer le bon grain de l’ivraie que constituent les communiqués de presse triomphants et articles publi-rédactionnels dithyrambiques, il importe d’acquérir une connaissance suffisamment profonde de cette technologie. Être en mesure d’apprécier les qualités techniques réelles de la blockchain est un pré-requis pour réfléchir sur ses implications et ses usages.

Pour autant, il n’est pas donné à chacun de saisir immédiatement toutes les subtilités de cette technologie. Cela est bien normal. Pour qui n’est pas un homme de l’art, la blockchain, venue à la célébrité grâce aux développements entourant le bitcoin, est un agrégat obscur de concepts eux-mêmes délicats à percer. Le présent article a pour ambition modeste de contribuer, à son tour, à la propagation d’un état de connaissance de la technologie blockchain. L’auteur de ces lignes sait qu’il suffit parfois d’une phrase, d’une formulation heureuse, pour enfin saisir une notion. Peut-être le lecteur en trouvera t-il une dans ce texte.

Parce qu’il constitue le premier aboutissement de la technologie blockchain, le Bitcoin a une nature fondatrice, et il est inévitable que l’explication du fonctionnement de la blockchain se fasse, dans un premier temps, en référence à cette cryptomonnaie. Une telle approche permet à la fois d’illustrer les mécanismes abstraits qui régissent la blockchain, tout en mettant en relief les variations de fonctionnement possibles. Pour autant, d’autres exemples d’application concrète de la blockchain seront présentés, une fois le fonctionnement de la technologie décrit, dans un prochain article.

Pour débuter cette explication, arrêtons nous d’abord sur une caractéristique fondamentale de la blockchain.

La blockchain: une architecture décentralisée

La blockchain est la technologie informatique sous-jacente au bitcoin. Aboutissement de 20 ans de recherche en calcul distribué, elle constitue une solution apportée au problème classique en informatique dit « des généraux byzantins »1. En résumé, la blockchain permet à deux entités de s’accorder sur une donnée en échangeant sur un réseau non sécurisé, potentiellement compromis, et donc susceptible de leur faire parvenir de fausses informations.

L’un des piliers sur lequel repose cette solution est la nature décentralisée de son fonctionnement. Cela signifie qu’elle n’a recours à aucune autorité centrale pour l’héberger et gérer son fonctionnement. A l’inverse, une architecture centralisée implique de faire confiance à une entité centrale, ce qui rend l’intégralité du réseau vulnérable en cas de compromission de celle-ci (faillite, attaque informatique, mauvaise gestion,…). Le contexte qui a vu naître le bitcoin, la crise financière de 2008 et la perte de confiance dans les institutions financières autour desquelles étaient centrées les monnaies, a amené à remettre en cause ce modèle traditionnel.

Plus spécifiquement, cette architecture fonctionne sur le modèle pair-à-pair ou peer-to-peer (P2P)2. La blockchain est stockée sur une pluralité de nœuds, c’est-à-dire n’importe quel ordinateur relié à internet sur lequel fonctionne un logiciel client, lequel s’occupe de faire contribuer l’ordinateur au fonctionnement de la blockchain. En principe, chaque nœud héberge la blockchain dans son intégralité et participe à son évolution, soit en relayant les transactions et les blocs qui la composent, soit en travaillant à valider les transactions nouvelles en créant des blocs.

Pour autant, on ne peut pas dire que tout utilisateur d’une blockchain (tout utilisateur du bitcoin par exemple) constitue nécessairement un nœud. Pour devenir un nœud dans le réseau, il faut posséder une copie de l’intégralité de la Or, en raison de la taille celle-ci3, certains utilisateurs préfèrent éviter de la télécharger entièrement, et ne récupèrent que les blocs les plus récents. Ils font alors confiance à un tiers pour leur donner des blocs issus de la version authentique de la blockchain. On parle, dans cette hypothèse, de nœuds partiels, par opposition aux nœuds complets.

Cette distinction est très importante dans le protocole Bitcoin. Beaucoup de mineurs appartiennent à des pools4et agissent de ce fait en tant que clients légers. Ils font confiance au gestionnaire du pool pour leur donner les informations nécessaires afin de pouvoir contribuer au minage. Ces clients légers, qui représentent l’écrasante majorité des clients, ne sont pas des nœuds à part entière, et ne contribuent pas à la sécurité du réseau5.

Plus le réseau comporte de nœuds, plus la sécurité de la blockchain augmente. En effet, pour résister à certaines attaques 6, les transactions transitent par une succession de nœuds de manière aléatoire. Plus les nœuds sont nombreux, plus le nombre de parcours possibles augmente, et plus ces attaques sont difficiles à réaliser. En outre, le caractère décentralisé du réseau dépend directement du nombre de nœuds. Moins il existe de nœuds, plus il est facile pour des attaquants de s’en prendre à la blockchain car le nombre de cibles à attaquer diminue. Dès lors, les attaques peuvent se concentrer et globalement, l’effort à fournir est moindre pour les attaquants.
Pour les utilisateurs de la blockchain, agir en tant que nœud complet augmente la sécurité des transactions, en leur assurant d’être constamment en possession d’une copie exacte et authentique de la blockchain7.

Devenir un nœud sur le réseau ne requiert pas beaucoup de puissance de calcul. L’essentiel est de faire fonctionner un client en mode complet, de s’assurer que les ports nécessaires sont ouvert (le port 8333 dans le cas du bitcoin) et de disposer d’une connexion rapide. La puissance de calcul n’est nécessaire que pour l’opération de minage/validation.

La nature décentralisée de la blockchain ayant été exposée, il convient d’étudier plus en détail son fonctionnement, et de définir certaines notions utilisées précédemment.

Le fonctionnement d’une blockchain

Concrètement, la blockchain est une base de donnée d’opérations (appelées « transactions ») consultable par tous, de sorte que chacun a accès à l’historique des opérations de tous les participants. Appliqué aux cryptomonnaies, cela permet de vérifier aisément que le payeur possède les fonds nécessaires pour effectuer une transaction. Mais si chacun peut accéder à la blockchain, comment s’assurer de son intégrité et se prémunir des attaques ?
D’abord, les transactions sont regroupées régulièrement pour former des blocs reliés entre eux de façon linéaire par le processus de minage, qui fait également en sorte que tout bloc ajouté à la chaîne soit impossible à altérer ou à supprimer. Dès lors, une transaction intégrée dans un bloc qui a été accepté dans la chaîne devient irréversible, et chaque bloc ajouté postérieurement renforce cette irréversibilité.
Pour ce faire, la technologie blockchain s’appuie sur un ensemble de techniques cryptographiques qui lui donne son caractère sécurisé et infalsifiable. Ces techniques interviennent à plusieurs étapes du fonctionnement d’une blockchain.
Par ailleurs, le langage de programmation utilisé pour définir les transactions est, pour l’essentiel des blockchains, volontairement Turing-incomplet, en ce sens qu’il s’agit d’un langage limité dans ses capacités, qui ne peut être utilisé pour créer des boucles et bombes logiques capables de mettre la blockchain en état de déni de service8.

Afin d’étendre le champ des fonctionnalités possibles, certaines blockchains utilisent toutefois un langage Turing-complet (Ethereum notamment). Il y a donc un arbitrage à effectuer entre fonctionnalités et sécurité de la blockchain.

Pour comprendre le fonctionnement de la blockchain, retraçons les étapes de la vie d’une transaction, le composant primaire de la blockchain dont elle constitue une entrée.

La création d’une transaction

S’il ne s’agit fondamentalement que d’une forme de base de données, une blockchain est plus précisément un registre de transactions distribué (on parle de Distributed Ledger Technology ou DLT). Avant d’être intégrées dans le registre, les entrées appelées à y figurer, les transactions, subissent un ensemble de transformations destinées à garantir leur irréversibilité et leur fiabilité. Pour cela, on a recourt au chiffrement asymétrique qui permet de s’assurer de l’identité de l’émetteur et du destinataire de la transaction.

Clé publique, clé privée

Chaque utilisateur de la blockchain possède une clé privée, laquelle est stockée sur un fichier localement sur l’ordinateur, et doit rester impérativement confidentielle. A partir de cette clé privée est générée une clé publique. La clé publique est utilisée pour recevoir une transaction, tandis que la clé privée est utilisée pour émettre une transaction.
L’émission d’une transaction est autorisée par la signature de celle-ci à l’aide de la clé privée de l’émetteur. Il existe en effet une relation mathématique entre cette signature, la clé privée et la clé publique qui permet au destinataire et à l’ensemble des nœuds de vérifier que l’émetteur possédait bien la clé privée au moment de la signature. Cette signature est inscrite dans l’en-tête de la transaction.
Pour recevoir une transaction, le destinataire génère quant à lui une adresse à l’aide de sa clé publique. C’est à cette adresse qu’est envoyée la transaction. Il existe là aussi une relation mathématique entre l’adresse, la clé publique et la clé privée qui permet à l’émetteur et à l’ensemble des nœuds de vérifier que le destinataire possédait bien la clé privée.
En définitive, une transaction se compose schématiquement d’une adresse A, d’une signature, d’une adresse B, et d’un contenu.

Il est possible de générer une transaction à l’aide de plusieurs signatures, c’est-à-dire de plusieurs clés privées. Cela rend possible des schémas dans lesquels un certain nombre de signatures est requis pour autoriser la transaction (toutes les signatures sur (n) signatures, la majorité de (n), etc…).
En outre, la transaction peut être crée en ligne ou hors ligne. Elle peut également être crée par une personne qui ne possède par la clé privée (par exemple un salarié), pour une signature ultérieure (par le chef d’entreprise).

Le contenu de la transaction

Bien entendu, s’agissant d’une entrée dans une base de donnée, la transaction contient une information, que l’ensemble du dispositif cryptographique vise à rendre infalsifiable. En effet, la signature générée à l’aide de la clé privée de l’émetteur intègre également le contenu de la transaction, de telle sorte que toute modification du contenu invalide nécessairement la signature.

Ce contenu intègre lui-même plusieurs éléments, qui varient selon les applications de la blockchain :

  • La version : les règles de la blockchain que cette transaction suit.
  • Le locktime : le moment à partir duquel la transaction est valide et peut être relayé sur le réseau et ajoutée à la blockchain. On peut assimiler le recours au locktime à la technique du postdatage en matière de chèque.
  • La data : c’est-à-dire la donnée qui doit être inscrite dans la blockchain. Dans la blockchain Bitcoin, cette donnée est constituée du transaction input and output (UTXO).

Qu’est ce que le transaction input and output ? Dans le cadre d’une blockchain utilisée pour transférer des valeurs, par exemple le Bitcoin (BTC), la valeur en question n’existe nulle part. La blockchain ne contient que des transactions, il n’existe pas de compte ou de total pour chaque adresse. Si l’on souhaite déplacer une valeur d’une adresse A vers une adresse B, il faut remonter toute la blockchain pour déterminer si A possède cette valeur à l’issue de toutes les transactions.
Ainsi, si l’émetteur a précédemment reçu 2 BTC, 3 BTC puis 1 BTC, son porte-monnaie ne contient pas 6 BTC mais les trois transactions séparément. Si l’émetteur doit à son tour payer 1 BTC, il consommera la transaction la plus adaptée (en l’occurrence, le précédent output de 1 BTC). Autrement dit, plutôt que de dépenser une fraction de valeur disponible (le total d’une adresse) correspondant au montant souhaité, l’émetteur A doit nécessairement dépenser l’output d’une transaction dont il a été précédemment le destinataire, qui sera donc l’input de la nouvelle transaction. Ces transactions sont assimilables à des billets de banques, en ce qu’elles ne peuvent être fractionnées et doivent être dépensées intégralement. Si le montant de la transaction dépensée dépasse le montant voulu, il est nécessaire d’organiser une transaction supplémentaire entre A et B, pour restituer le change.

Il est essentiel de comprendre le fonctionnement du transaction input and output car il s’agit du mécanisme sur lequel repose toutes les blockchains dont la fonction est l’échange de valeurs. En théorie, le champ data peut toutefois contenir n’importe quelle donnée.

La propagation de la transaction

Une fois la transaction complétée, elle doit être transmise au réseau. Cette transmission peut s’effectuer par n’importe quel moyen, qu’il soit sécurisé ou non. La transaction est reçue par un ou plusieurs nœuds du réseau pair-à-pair, qui le propagent ensuite à leur tour à l’ensemble des nœuds.
Parce que les transactions sont signées, chiffrées, et ne contiennent aucune information privée, il n’est pas nécessaire de s’assurer de l’intégrité des nœuds ou de faire confiance au réseau, à l’inverse par exemple d’une transaction par carte bancaire, qui doit impérativement être transmise de manière sécurisée puisqu’elle contient des informations sensibles.
La première opération qu’effectuent alors ces nœuds est de valider indépendamment la transaction, c’est-à-dire, notamment, vérifier que la signature est correcte, que toutes les composantes requises sont présentes et conformes aux règles de la blockchain.

L’intégration de la transaction dans un bloc

Une fois la transaction propagée, elle est mise en attente pour être intégrée dans la blockchain. Cette intégration est réalisée par l’opération de minage menée par certains nœuds. Mais qu’appelle t-on « minage » ?

Le minage consiste, pour un nœud, à grouper des transactions entre elles choisies parmi toutes celles en attente, afin de remplir un nouveau bloc candidat à ajouter aux blocs précédents dans la chaîne. Le nombre de transaction qui peuvent remplir un bloc est un des paramètres de la blockchain.

L’ensemble des caractéristiques du bloc, tout particulièrement l’ensemble de ses transactions et son horodatage, servent de paramètre pour la génération d’un en-tête (header) unique qui identifie ce bloc. De la même manière que la signature d’une transaction est altérée par toute modification de celle-ci, l’en-tête d’un bloc est altéré dès lors que les transactions qu’il intègre changent, même de la manière la plus infime.

A ce stade, une question peut être posée : qu’est ce qui motive un noeud à effectuer cette opération de minage qui, on le verra, s’avère coûteuse ? La réponse apportée diffère selon qu’il s’agit d’une blockchain privée ou publique (cf. infra). Dans une blockchain publique, par exemple la blockchain Bitcoin, certaines règles sont prévues afin d’inciter les nœuds à contribuer au fonctionnement de la chaîne.
D’abord, chaque transaction doit inclure le paiement de frais de transaction. L’émetteur de la transaction en choisit le montant, tout en sachant que plus ce montant est élevé, plus les nœuds intégreront en priorité cette transaction dans un nouveau bloc. Ainsi, plus le montant des frais est élevé, plus rapidement la transaction devient définitive.
Ensuite, chaque bloc commence par une coinbase, c’est-à-dire une transaction nouvelle qui prévoit la création de nouveaux Bitcoin et leur attribution au mineur responsable de l’apparition du bloc. Cette transaction ajoute également au porte-monnaie du mineur l’ensemble des frais de transaction. Il s’agit à la fois d’une récompense pour la contribution du mineur à la blockchain et de l’unique moyen de créer de nouveaux Bitcoins.

Le consensus

La blockchain telle que conçue par Nakamoto résout le fameux problème des généraux byzantins à l’aide du mécanisme de la preuve de travail. Il s’agit toujours à l’heure actuelle du seul moyen véritable de parvenir au consensus. De quoi s’agit-il ?

Le bloc qui vient d’être assemblé n’est pas valide tant que le nœud n’a pas trouvé une solution à l’algorithme qui constitue la preuve de travail. La résolution de la preuve de travail (proof of work) consiste, en résumé, à créer des hashes (ou « somme de contrôle ») de manière répétée à partir de l’en-tête du bloc jusqu’à en trouver un qui satisfasse des règles prédéfinies. Ce résultat est impossible à prédire, le seul moyen de le trouver est de continuellement générer des hashes jusqu’à trouver le bon.

Les règles qui conditionnent l’admission d’un hash (nommées target) peuvent varier afin de rendre le minage plus complexe. Ce principe joue un rôle très important dans la blockchain Bitcoin (voir les développements relatifs au Blocktime).

Ce travail de minage repose sur des calculs triviaux (le calcul d’un hash est très simple pour un ordinateur), mais qui doivent être effectués le plus vite possible. En effet, tous les nœuds sont en concurrence les uns avec les autres afin de trouver une solution en premier. Une fois qu’une solution est trouvée, le nœud propage la blockchain complétée du nouveau bloc valide à tous les autres nœuds, qui le valident en vérifiant que sa structure est correcte9 et que la solution est bonne, puis reprennent le travail à zéro sur un nouveau bloc.

Il n’existe, à ce jour, pas d’autre mécanisme que la preuve de travail qui permette d’atteindre seul le consensus. D’autres modes de consensus ont été développés (cf. infra), mais ils doivent être nécessairement combinés à un moment ou un autre au calcul d’une preuve de travail pour garantir la sécurité de l’ensemble de la blockchain. Ces modes alternatifs ont toutefois l’intérêt de combler les failles de la preuve de travail, en particulier sa vulnérabilité à l’attaque des 51%, qui peut se produire quand une seule entité possède au moins 51% des capacités de minage sur le réseau.

Blockchains privées, blockchains publiques

Suite à la prise de popularité des blockchains publiques, d’aucuns ont souhaité décliner le concept d’un registre décentralisé à haute garantie d’authenticité sans pour autant le rendre accessible à tous, et devoir donc mettre en œuvre un système cryptoéconomique10 de consensus.

Les blockchains publiques

L’essentiel des blockchains actuellement en fonctionnement sont publiques, en ce sens qu’elles sont accessibles à tous en lecture et surtout en écriture. Il s’agit, d’une certaine manière, de l’environnement idéal de mise en œuvre d’une blockchain, qui a vocation à créer la confiance sans avoir besoin de la confiance. Le principal avantage de cette technologie est qu’elle parvient à accomplir la mission qui lui est confiée sans se préoccuper ni de l’identité ni des intentions de ses utilisateurs.
En outre, puisque la sécurité de la blockchain repose sur sa décentralisation, et qu’une plus grande décentralisation apporte une plus grande sécurité, il est logique de rechercher le plus grand nombre de nœuds possibles. Pour cela, le plus efficace est de faire évoluer la blockchain publiquement.

Les blockchains privées

Dans une blockchain privée, ou « à permission », les nœuds mineurs sont définis dès le départ à la création de la blockchain. Contrairement à une blockchain publique dans laquelle chacun peut devenir un nœud mineur, honnête ou non, on suppose dans ce type de blockchain que les mineurs sont honnêtes11. Dès lors, chaque mineur produit un bloc tour à tour, et tous les autres le reconnaissent comme valide sur la base de cette confiance. En théorie, la sécurité et la fiabilité de la blockchain est assurée tant que 2/3 des mineurs sont honnêtes.

D’aucuns ont proposé un niveau supplémentaire de distinction, entre blockchains « consortium » et blockchains purement privées. Dans le premier cas, la blockchain n’est accessible qu’à un consortium d’entités, un ensemble de nœuds présélectionnés. On pense par exemple à une blockchain partagée entre plusieurs institutions financières. Dans le second cas, la blockchain est restreinte à l’usage d’une seule organisation.
On peut, en réalité, douter de la pertinence de cette distinction. La blockchain purement privée n’est, en soi, qu’une base de données classique avec une couche de vérification cryptographique. En LAN, cela n’a, fondamentalement, presque aucun intérêt.

Quel est donc l’intérêt d’une blockchain privée ? Le recours à une blockchain privée se justifie dès lors que, tout en cherchant à établir un registre distribué entre des acteurs d’intérêts divergents sans recourir à une autorité centrale, il existe un besoin de contrôler les accès en écriture, masquer les transactions et garder le contrôle sur les fonctionnalités de la blockchain. Les blockchains privées ont donc notamment un intérêt dans les secteurs réglementés, en particulier ceux de la banque et de la finance.

 

Dans un prochain article, nous étudierons sur la base de ces développements les avantages et inconvénients d’une blockchain, ainsi que les principales applications de cette technologie à l’heure actuelle.

  1. http://research.microsoft.com/en-us/um/people/lamport/pubs/byz.pdf
  2. Comme d’autres technologies, par exemple le protocole BitTorrent. Le protocole Bitcoin en est donc un homologue.
  3. Environ 80 Go à ce jour.
  4. Un pool est un regroupement d’utilisateurs qui mettent en commun leur puissance de calcul afin d’augmenter leurs chances de miner un bloc et obtenir la récompense. Celle-ci est redistribuée entre les utilisateurs, qui bénéficient d’un revenu plus stable, bien que moins important.
  5. Voir, pour s’en convaincre la représentation visuelle des nœuds complets (https://blockchain.info/nodes-globe).
  6. Par exemple la fameuse « double dépense » en matière de cryptomonnaies, par laquelle un individu parvient à dépenser deux fois une somme.
  7. Cette configuration permet notamment d’éviter une attaque de type « Sybil », qui consiste à encercler un nœud et lui envoyer de fausses informations.
  8. Pour la blockchain bitcoin, ce langage est nommé Script. Il n’est pas différent des langages de programmation à pile en notation post-fixée des années 1960 de type Forth, capable d’être exécuté sur des appareils aussi rudimentaires qu’une calculatrice.
  9. Dans la blockchain Bitcoin par exemple, le bloc doit faire moins de 1MB, référencer un bloc précédent, et intégrer une transaction coinbase en plus de satisfaire la preuve de travail.
  10. Néologisme de Vitalik Buterin, désignant la combinaison de la vérification cryptographique et de l’incitation économique.
  11. Plusieurs algorithmes de consensus fonctionnent sur ce principe : PFBT, Ripple,…

Comments are closed, but trackbacks and pingbacks are open.