Analyse de risques d'une blockchain - Partie 1
Depuis l’explosion du cours du Bitcoin pendant l’été 2017, « blockchain » est devenu le mot à la mode dans le domaine de la technologie. Le Bitcoin n’est qu’une cryptomonnaie parmi d’autres qui repose sur la technologie de la blockchain. Il est possible d’envisager d’autres utilisations de la blockchain que de générer des tokens financier. Dans cet article je vais me concentrer sur la technologie blockchain et non sur la spécificité des cryptomonnaies.
Dans la croyance collective, la blockchain est une technologie fiable et sécurisée. Or on remarque qu’il y a eu de nombreuses attaques qui ont fait la une des journaux. Les « hacks » sont majoritairement le vol de jetons dans des échanges. Les évangélistes de la blockchain insistent sur ce point pour assurer que la blockchain elle est sécurisée. Avec un groupe de consultants, nous avons réalisé une analyse de risques sur la technologie elle-même, pour s’assurer que la technologie est aussi sécurisée que la croyance populaire l’envisage. Notre étude s’est portée sur la blockchain en elle-même et l’écosystème qui lui permet de fonctionner. Les attaques identifiées sont regroupées en trois catégories : logiciel, réseau ou environnement. Pour chaque risque identifié, nous avons proposé un plan de remédiation à implémenter. Il faut noter que cette analyse se veux le plus généraliste possible. Pour être complète, il faudrait la mettre en relation avec une implémentation afin d’identifier exactement les vulnérabilités du système et leur probabilité d’exploitation. L’impact quant à lui sera dépendant du besoin métier auquel répond la blockchain.
Avant de détailler les risques identifiés, je vais faire un rappel succinct des propriétés de sécurité de la blockchain et présenter un schéma du système. Ceci permettant de mieux cerner le cadre de l’étude.
Description d’un système blockchain
Si vous êtes déjà un expert de la blockchain les paragraphes suivants ne vous serons pas utiles. Je vous invite à aller sur la seconde partie de cet article. Cependant un rappel est toujours bon à prendre.
Description fonctionnelle
Une blockchain est un livre de comptes ouvert qui enregistre des transactions entre chaque individu. Les transactions sont validées en bloc chainé par des mineurs. L’objectif est donc de s’assurer que chaque transaction ne sera pas altérée une fois inscrite sur la blockchain. Les besoins d’intégrité et de traçabilité des opérations sont les deux plus importants besoins en termes de sécurité. Il faut aussi que la blockchain soit accessible pour permettre d’enregistrer des opérations dans un délai raisonnable. Il y a donc bien un critère de disponibilité auquel une blockchain doit répondre. Cependant celui-ci est moindre que les deux précédents. Quant à la confidentialité, la blockchain ne répond pas à ce besoin initialement. En effet l’objectif est de clairement identifier une transaction entre deux individus. Le registre étant accessible à tous, il n’est pas prévu d’obfusquer ses informations.
La garantie de la validité d’un bloc repose sur un consensus entre chaque membre de la blockchain. Le National Institute of Standars and Technology (NIST) a recensé trois modèles dans les blockchains existantes :
-Preuve de travail (Proof of work)
-Preuve de procession (Proof of stake)
-Chacun son tour (Round Robin)
Dans chacun des cas, l’ajout d’un bloc se fait en fonction du précédent et regroupe les nouvelles transactions validées pour la blockchain. Les transactions sont valides à partir du moment où la disposition des fonds de l’expéditeur a été validée dans l’historique de la blockchain. La transaction est ensuite signée par l’expéditeur et le receveur par différentes fonctions cryptographiques.
Description technique
Comme présenté précédemment, la blockchain est un livre de comptes qui permet d’enregistrer les transactions entre différentes personnes. L’architecture technique est donc très proche de tout système distribué. Afin de détailler le système, voici un schéma qui reprends une transaction entre Alice et Bob.
![Schéma d’architecture](/img/schema d’architecture.png)
Une blockchain repose sur 2 éléments : une partie logicielle et une partie réseau. Le logiciel peut lui-même être divisée en deux catégorie en fonction de l’interaction que nous aurons avec la blockchain.
Si nous ne sommes qu’un simple utilisateur, nous avons besoin d’une application qui permette de vérifier l’intégrité d’une blockchain partiellement ( cf : arbre de Merkle) et de proposer des transactions sur le réseau, tout en protégeant les clefs cryptographiques privées. Ces applications sont dénommées « wallet » ou « portefeuille ». Au contraire si nous sommes un mineur, nous n’avons pas besoin d’émettre de transaction. Les fonctions utilisées se focaliseront sur la validation des blocs de transactions. Il est important de clairement identifier dès à présent une surcouche qui est utilisée par les mineurs regroupés en « pool ». Afin d’optimiser les chances de validation d’un bloc et d’obtenir la récompense associée, les mineurs regroupent une puissance de calcul répartie à travers plusieurs ordinateurs (soit en datacenter soit de nombreux ordinateurs de particuliers ou un mix). Les échanges dans ce pool reposent sur un autre logiciel qui est propre à chaque pool.
Une blockchain est aussi un réseau distribué d’ordinateurs. Afin qu’ils puissent communiquer ensemble, ils utilisent un protocole réseau propre à la blockchain. Les échanges P2P (peer to peer), sont normés au niveau applicatif de la couche OSI. Ils permettent donc de reposer sur les infrastructures d’internet avec les avantages et les inconvénients que cela comprend. La base du réseau P2P est de faire confiance à quelques nœuds « centraux » qui vont diffuser les listes des participants au réseau. Il y a donc une centralisation initiale pour chaque acteur qui souhaite participer au réseau. Par la suite la liste des participants s’agrandit et permet d’avoir un réseau décentralisé. Il faut ajouter que la diffusion de cette liste est obligatoire pour un bon fonctionnement de la blockchain. Il est impossible d’y échapper et donc d’être complètement invisible du réseau.
Maintenant que nous avons étudié le fonctionnement d’une blockchain, passons à l’analyse de risques dans le prochain article.
Nota bene: Je souhaite remercier les consultants qui ont travaillé avec moi sur ce sujet. Hamza Chiadmi et Amira A.