• Aucun résultat trouvé

3. Sécuriser un écosystème décentralisé d’objets connectés

3.2.3. Les blockchains d’aujourd’hui

a) Une description plus formelle

De manière plus formelle, la blockchain est un registre distribué, fonctionnant sur un réseau pair à pair, où chaque entité possède un identifiant unique et s’échange des informations à l’aide de transactions. Ces dernières sont cryptographiquement signées par leur auteur, afin d’assurer leur authenticité (i.e. qui crée la transaction) et son intégrité (i.e. assurer son inviolabilité). Étant donné la nature du réseau, l’émetteur transmet sa transaction à ses voisins, avec qui il est directement connecté. Lorsque ces derniers la réceptionnent, ils s’assurent de la validité des informations avant de les

transmettre, le cas échéant, de la même manière à leurs proches homologues. Ce procédé se répète, autorisant ainsi uniquement la dissémination d’informations correctes sur le réseau. Toutes les transactions sont ensuite ordonnées et regroupées dans des blocs afin d’être définitivement actées par l’ensemble du réseau. Au travers d’un algorithme de consensus, les entités se mettent d’accord sur l’ordre et le contenu des blocs, à savoir les données, le lien cryptographique avec le bloc précédent et la preuve de validité. Disséminé de la même manière que les transactions, tout bloc considéré comme non valide est supprimé. Pour les autres, ils sont ajoutés à la suite des précédents, créant ainsi la blockchain.

Grâce à toutes ses caractéristiques, la blockchain s’avère être un système pertinent pour enregistrer et synchroniser des informations dans une base de données décentralisée, répliquée sur l’ensemble ou une partie des entités d’un réseau. Cette réplication offre à un tel système une plus grande robustesse face aux pannes et aux attaques en comparaison avec une approche centralisée. Par ailleurs, l’absence d’organisme central incombe aux participants eux-mêmes de maintenir la blockchain, apportant intrinsèquement transparence, traçabilité et sécurité au stockage de données. De manière générale la structure d’une blockchain et de ses blocs est résumée par la Figure 3-8

Figure 3-8 - Structure générale d’une blockchain et de ses blocs

Face à la démocratisation de la blockchain au cours de ces dernières années, une multitude de projets se sont lancés dans l’aventure. Bien qu’il ne soit pas d’un grand intérêt de les lister de manière exhaustive dans cette thèse, il est intéressant d’identifier les différents types de blockchains, leur structure ainsi que les différents acteurs.

b) Types de blockchains

Il existe plusieurs types de blockchains, directement liées à la nature des données, leur accessibilité et les actions qu’un utilisateur est en mesure d’effectuer. On parle alors de blockchain publique ou privée (public ou private), avec ou sans autorisation (permissioned ou permissionless), comme l’explique [116]. Les termes public et private font référence à l’accès des données d’une blockchain,

c’est-à-dire la manière dont les participants peuvent accéder au réseau. Une blockchain publique permet à quiconque d’obtenir un accès de manière inconditionnelle et sans aucune procédure d’acceptation. Bitcoin [114], Ethereum [117], IOTA [118] et Nano [119] sont des blockchains publiques. À l’opposé, les accès dans une blockchain privée, comme Hyperledger [120] et Quorum [121] sont soumis aux contrôles des propriétaires (e.g. les administrateurs). À l’inverse, permissioned et permissionless désignent les restrictions de certains membres à effectuer certaines tâches (e.g. création et validation des blocs). Bien que cela ne soit pas systématique, les blockchains privées usent souvent de ce type de restrictions. On parle alors de private permissioned blockchain. Un troisième type, nommé consortium, est également présent dans la littérature [116] [122], [123] et [124]. Ce concept est né en partant du postulat qu’une blockchain privée n’est constituée que d’une seule et unique organisation (i.e. fully private blockchain). Il convient de préciser que plusieurs entités peuvent être impliquées dans une telle blockchain, conservant l’approche distribuée, mais chacune d’elle est contrôlée par le même organisme. Le modèle consortium quant à lui, fait référence à une blockchain privée, ayant plusieurs organismes de contrôle. Par exemple, un groupe de plusieurs entreprises, dont chacune d’elles est en charge du maintien de la blockchain. Les projets Corda [125] et XDC [126] sont basés sur ce type de modèle.

c) Types de participants

Pour des raisons de simplicité d’approche, le terme « participant » a été employé jusqu’ici pour définir une entité connectée et interagissant sur un réseau blockchain. Il convient d’employer son équivalent plus formel : « nœud » (node), désignant un ordinateur ou tout autre périphérique capable de prendre part au réseau. Il en existe différents types, tous ayant des rôles bien précis comme les référencent [116] et [127]. À noter que d’un protocole à un autre, les noms attribués à ces différents types peuvent varier.

Les nœuds complets (full nodes) sont le cœur d’une blockchain, car ils supportent et assurent sa sécurité : ils maintiennent une copie complète de la blockchain et participent à la vérification et la propagation des transactions et des blocs. Attention, il est uniquement question de vérification de ces derniers, autorisant la propagation sur le réseau (e.g. la transaction et/ou le bloc sont-ils en accord avec les règles de consensus ou sont-ils frauduleux). Cela ne comprend donc pas la procédure de création de blocs. Cette dernière est assurée par les mineurs (miner nodes), parfois appelés validateurs (validator nodes) suivant l’algorithme de consensus employé. Ils sont identiques aux nœuds complets, à la différence qu’ils sont capables de générer des blocs afin de compléter la blockchain. Enfin, le troisième type correspond aux nœuds légers (lightweight node), ou parfois appelés simples nœuds (simple node) ou encore clients (clients). Comme leur nom l’indique, ces derniers sont de simples utilisateurs du réseau blockchain, dont leur rôle est de transmettre et recevoir des

transactions. Puisqu’ils ne possèdent pas de copie complète de la blockchain, ils ne participent pas à sa sécurisation ni à sa maintenance. Ils peuvent être vus comme de simples terminaux donnant accès aux informations. En conséquence, bien qu’il soit fortement intéressant d’avoir accès à des nœuds ne nécessitant que peu de ressources, la viabilité et les performances d’un système blockchain reposent entièrement sur ses nœuds complets, en charge de sa maintenance et de sa sécurité.

d) Bitcoin

Conceptualisé en 2008 et officiellement lancé le 3 janvier 2009 par Satoshi Nakamoto (celui dont on prononce le nom, mais dont on ne connait pas l’identité), le projet Bitcoin [114] constitue la première implémentation de la blockchain. Il est né d’une volonté de créer un moyen de paiement numérique pair à pair sécurisé et entièrement décentralisé. Ce concept de monnaie électronique, dont un jeton s’intitule bitcoin, portera le nom de « cryptomonnaie » (cryptocurrency), en raison de son utilisation intensive de fonctions cryptographiques (e.g. transaction, algorithme de consensus). La force d’un tel système, et plus particulièrement des propriétés offertes par la blockchain, réside dans la résolution d’un problème financier numérique de longue date : la double dépense (double-

spending). Ce phénomène frauduleux consiste à dépenser plusieurs fois un même jeton numérique,

par exemple en le dupliquant. Pour résoudre cette problématique, Bitcoin associe un algorithme de consensus avec une structure blockchain linéaire (cf. Figure 3-9), où une seule transaction du jeton numérique ne peut être présente (celle qui est acceptée par la majorité des nœuds).

Figure 3-9 - Structure de blockchain linéaire (chaine unique)

Une autre caractéristique importante de Bitcoin concerne le format de transaction qu’il exploite, connu sous le sigle UTXO [128] (unspent transaction outputs) traduit par « transactions non dépensées », ou plus en adéquation avec notre langage, le « rendu de monnaie ». Par analogie avec un billet ou une pièce, une UTXO est indivisible et constitue une unité d’échange. Par exemple, soit un portefeuille contenant 25€ (un billet de vingt euros et un de cinq euros). Cela représente deux UTXO (une de 20€, et une autre de 5€). Lors de l’achat d’un objet valant 15€, il faudra utiliser l’UTXO de 20€, dont 10€ iront au vendeur, et les 5€ restants seront reversés dans le portefeuille de l’acheteur, sous la forme d’une nouvelle UTXO (ou billet) de 5€. Cette dernière pourra être utilisée

pour un nouvel achat. Ainsi, chaque UTXO est liée à une précédente, et le solde d’un compte est obtenu en effectuant la somme des UTXOs du portefeuille. Ce modèle de transaction permet d’effectuer plusieurs transactions en parallèle (autant de UTXO disponibles) et une forte traçabilité.

e) Ethereum

Ethereum [117] a été conçu en 2013 par Vitalik Buterin, un des développeurs de Bitcoin, dans le but de faciliter le développement d’applications décentralisées basées sur la blockchain. Ethereum possède comme Bitcoin sa propre cryptomonnaie, appelée ether, et est lui aussi construit sur une blockchain linéaire (chaine unique, cf. Figure 3-9). Mais à l’inverse, Ethereum adopte un modèle de compte/solde [128] (Account/Balance model) au lieu des UTXO. Son fonctionnement est similaire à celui des cartes bancaires que nous utilisons : un compte est associé à un solde, qui est contrôlé avant chaque transfert. Si le solde est suffisant alors l’opération est effectuée. En reprenant l’exemple précédent, la quantité d’argent disponible dans le portefeuille étant supérieure au prix d’achat (25€ > 15€) le transfert est autorisé, et ce, avec le montant exact de 15€. Ce modèle n’a plus besoin de conserver la liste complète des précédentes transactions, ce qui réduit la quantité de données à stocker. En revanche, puisqu’il faut au préalable vérifier le solde, seule une opération peut être effectuée à la fois.

Mais la grande particularité d’Ethereum réside dans sa capacité à exécuter du code sur la blockchain : les contrats intelligents (smart contracts). C’est en 1994 qu’ils sont introduits par Nick Szabo [129], qui les définit comme « un protocole de transaction informatisé qui exécute les termes d'un contrat ». De manière générale, ce sont des programmes informatiques, qui s’exécutent automatiquement lorsque les clauses préalablement définies sont remplies. Ils peuvent être vus comme une numérisation de n’importe quel type de contrat pouvant être passé entre des individus/entreprises, dans la mesure où cela peut faire l’objet d’une programmation informatique. Un smart contract peut prendre la forme de simples structure conditionnelles (e.g. « si les examinateurs valident ce travail, alors M. Dalmasso sera autorisé à soutenir sa thèse »), mais aussi des plus complexes, comme des contrats d’assurance (e.g. indemnisation automatique suivant des conditions préalablement définies), la mise en place d’un système de votes pour une élection, ou encore de la location de particulier à particulier. Les smart contracts agissent en tant que tiers de confiance entre plusieurs entités afin de garantir l’application des règles définies. Étant donné qu’ils sont instanciés, stockés et exécutés sur la blockchain (c’est-à-dire par les nœuds du réseau), ils jouissent de ses propriétés de transparence, de traçabilité, d’immuabilité et de décentralisation, ce qui est le fondement même d’une application décentralisée.

f) Nano

Intrinsèquement, les structures de blockchains linéaires/chaines uniques qu’emploient Bitcoin et Ethereum souffrent d’une faible scalabilité, en partie liée à l’ajout séquentiel des blocs. En effet, étant donné leur fort lien cryptographique entre eux, ils ne peuvent être ajoutés à la blockchain que les uns après les autres. C’est avec pour objectif de contrer ce problème de scalabilité qu’un premier pas a été initié avec le projet de cryptomonnaie Nano (anciennement RaiBlocks) [119] fin 2014. Sa structure est basée sur un graphe orienté acyclique (directed acyclic graph, DAG), organisé en blocs-tressés (block-lattice) comme illustré sur la Figure 3-10. À l’inverse du modèle précédent, où toutes les transactions des différents utilisateurs sont réunies dans des blocs, Nano crée une blockchain spécifique à chaque utilisateur. La Figure 3-10 représente trois participants (bleu, vert et orange), dont leur chaine de blocs respective contient uniquement l’historique du solde et des transactions monétaires de leur propre compte (i.e. utilisation du modèle Account/Balance précédemment défini). Par ailleurs, il convient de noter qu’à l’inverse de Bitcoin et Ethereum, un bloc ne contient qu’une seule transaction. Chaque blockchain ne peut être mise à jour que par son propriétaire, ce qui permet d’ajouter instantanément un bloc et ce de manière asynchrone par rapport aux autres chaines : un transfert monétaire du participant bleu vers l’orange n’exige la création que de deux blocs, un par l’émetteur (bleu) et un par le récepteur (orange), la transaction n’étant valide que lorsque les deux participants auront ajouté leur bloc respectif. Ainsi, ce système permet d’atteindre des vitesses de transactions presque immédiates et ne nécessitant l’accord que des deux entités en question. À noter toutefois que l’ensemble des autres nœuds doivent suivre les échanges afin de mettre en jour leur copie du registre distribué.

Figure 3-10 - Structure en blocs-tressés

g) IOTA

Toujours dans l’optique d’améliorer la latence des transactions, une autre approche, a été proposée, avec le projet IOTA [130] en 2016. Bien qu’il figure parmi les technologies de registres distribués, ses concepteurs le positionnent comme étant le successeur de la blockchain. Comme le

laisse sous-entendre son nom, IOTA a un fort penchant pour l’IdO avec des domaines d’applications tels que les transports, les chaines de productions, ou encore les villes intelligentes (smart cities). Pour atteindre ses ambitions, le système doit favoriser les micro-transactions, propices à l’IdO, tout en étant capable de gérer un grand nombre d’entre elles simultanément, de manière sécurisée. Le protocole IOTA repose sur Tangle, une architecture de registres distribués basée sur une autre forme de graphe orienté acyclique, comme illustré sur la Figure 3-11.

Figure 3-11 - Graphe orienté acyclique

Dans sa définition exacte, IOTA n’utilise pas de bloc, mais uniquement des transactions, liées les unes aux autres et basées sur le modèle UTXO vu précédemment (comme Nano, cela peut être vu comme un bloc contenant une seule transaction). Plus précisément, pour effectuer sa transaction sur le réseau, l’émetteur est dans l’obligation d’en vérifier et valider deux précédentes, sélectionnées aléatoirement et qui ne sont pas en conflit. Sur la Figure 3-11, B4 valide B2 et B3 pour être inscrit dans le graphe. C’est ce qui est appelé une validation directe. Au fur et à mesure que de nouvelles transactions sont ajoutées, les antérieures s’enfoncent dans le Tangle, les rendant de plus en plus actées par l’ensemble du réseau. Sur la Figure 3-11, B5 valide directement B2 et B3, ce qui valide indirectement B1. Ce fonctionnement s’avère remarquable, puisque plus le nombre de participants augmente, plus il y aura de transactions et par conséquent le temps de validation sera court. De plus, cette approche permet une parallélisation complète du traitement des transactions. Toutes ces propriétés font que la scalabilité théorique d’IOTA n’est limitée que par l’activité du réseau. En revanche, certaines études soulignent pour l’heure le manque d’évaluation concrète sur le niveau de sécurité qu’offre cette approche [116], [131], [132] et [133].