[ARTICLE] Blockchain : quelle sécurité et quels usages ?

Au-delà du phénomène de mode, à quoi peut réellement être utile une blockchain et quelles sont les bonnes pratiques de sécurité à adopter lors du développement d’applications blockchain ?

  1. Définition

Une blockchain est un registre global distribué, entièrement répliqué sur chaque nœud du réseau qui la compose. De cette façon, une blockchain n’a aucun point unique de défaillance. De plus, des échanges d’informations (transactions) ont lieu entre ces nœuds, échanges qui sont authentifiés et irréversibles. Une blockchain est en général suffisamment générique pour se décliner en de multiples usages selon le contexte métier.

1.1 – Caractéristiques d’une blockchain

Une blockchain a les principaux intérêts suivants :

Scalabilité : une blockchain est très facilement extensible, un nœud qui se connecte à n’importe quel autre nœud étend automatiquement la blockchain, sans changement de configuration nécessaire;

Résilience : il est très difficile d’empêcher le réseau entier de fonctionner, quel que soit le type d’attaques envisagé;

Intégrité et authenticité des données : les transactions sont toutes signées, et les entrées du registre distribué ne sont pas modifiables;

Décentralisation : aucun nœud du réseau n’est central ni différencié des autres, le réseau n’a pas de point unique de défaillance;

Rapidité et souplesse des transactions par rapport aux réseaux bancaires classiques : les transactions sont vérifiées et confirmées dans des temps très courts (de quelques dizaines de secondes à quelques minutes).

Par ailleurs, un point fondamentalement intéressant des blockchains est la possibilité, pour certaines, d’y faire exécuter des « smart contracts », des programmes autonomes déployés à un instant t, qui s’exécuteront automatiquement, de façon décentralisée, quand certaines conditions seront réunies. Un smart contract déployé par son auteur, n’est pas modifiable, même par celui-ci, et son exécution est infalsifiable car tous les nœuds du réseau vont l’exécuter pour tomber sur un consensus. Même si des nœuds sont corrompus, le smart contract s’exécutera normalement, quoiqu’il arrive, tant que la moitié du réseau est sain.

Il existe des centaines de blockchains et monnaies électroniques différentes (voir par exemple sur https://coinmarketcap.com/). Beaucoup sont peu utiles, car ne sont que des copies d’autres avec changement de nom. Certaines, ceci dit, se démarquent suffisamment par l’intérêt de leur modèle, citons par exemple : Bitcoin (l’historique et bien installée), Ethereum, Zcash (pour des transferts de monnaie anonymes), Ripple (pour ses applications multi-devises), Lisk (pour des applications Web 100% décentralisées), Tezos (pour son modèle de gouvernance intégré), Iota (pour l’IoT) ou encore Byteball …

1.2 –  Une blockchain prometteuse : Ethereum

Parmi les nombreuses blockchains créées depuis 5 à 6 ans, une se détache assez nettement. Sortie en juillet 2015, Ethereum a de nombreux intérêts : des smarts contracts très puissants, un temps de validation des transactions très court (15 secondes), une documentation riche et un excellent support de la communauté et même de quelques professionnels. Enfin, la plupart des smart contracts existants sont développés pour Ethereum, et beaucoup ont servi à réaliser des levées de fonds collaboratives de plusieurs dizaines de millions d’euros. Un annuaire public des applications Ethereum, « State of the dApps », est disponible sur http://dapps.ethercasts.com/ . Aujourd’hui, la capitalisation investie dans Ethereum représente 9 milliards de dollars, soit le tiers de celle investie dans Bitcoin

2. Cas d’usages

Pour autant, de nombreux cas ne justifient absolument pas l’usage d’une blockchain. En effet, sur une blockchain, d’une part les transactions sont très limitées en taille et en nombre (Bitcoin est limité à environ 5 transactions par seconde, et Ethereum à une dizaine), d’autre part une blockchain est plutôt coûteuse énergétiquement parlant par rapport à une redondance informatique classique.  Une blockchain est surtout utile en présence de plusieurs acteurs indépendants qui n’ont pas confiance entre eux à priori, et s’ils peuvent en tirer bénéfice (un intéressement financier, ou tout du moins une économie d’argent ou de temps).

Les cas d’usages sont le notariat, le vote électronique (avec quelques ajustements pour des raisons de scalabilité), la conservation de la preuve, la collecte ou levée de fonds, ou encore la programmation d’exécution conditionnelle de transactions (séquestres, mises en gage, paris, …). Plusieurs entreprises fournissent même déjà un réel service commercial à leurs clients, c’est le cas par exemple de la start-up française Woleet (https://woleet.io), qui propose un service de notariat électronique, d’ancrage de données et de preuve d’antériorité standardisé sur la blockchain Bitcoin.

Au vu du panel très large de ces usages, deux secteurs principaux ont donc énormément à gagner : la banque et l’assurance. D’après une enquête EFMA et Deloitte 2016, les « fintechs » explorent les usages de la blockchain pour deux raisons principales : créer de nouveaux business models pour 37 % d’entre elles, et gagner en efficacité en réduisant les coûts pour 20 % d’elles. D’ailleurs plusieurs banques allemandes comme la Fidor expérimentent la blockchain Ripple pour des transactions transfrontalières. BNP Paribas procède à de nombreuses expérimentations qui sont assez souvent relayées sur les médias sociaux, tandis que la Caisse des Dépots et la Banque de France participent conjointement à plusieurs expérimentations.

Un frein auparavant pour les banques était que pour la création d’un nouveau bien électronique (ou produit financier), il était nécessaire de créer la blockchain associée. Aujourd’hui, entre la possibilité de créations de blockchains auxiliaires privées (aussi appelées « side-chains »), et surtout l’apparition de standards pour l’émission de jetons électronique génériques, comme le standard ERP20 sur Ethereum (https://github.com/ethereum/EIPs/issues/20), déjà largement utilisé avec succès notamment pour de nombreuses levées de fonds, les choses sont facilitées. L’existence de standards de jetons électroniques est très prometteuse et permet d’envisager de multiples applications dans un futur proche : monnaies locales, points de fidélité pour les enseignes commerciales, bons d’achat et de réduction dématérialisés, …

Pour les assurances, la blockchain permet d’automatiser et de rationaliser la relation avec les assurés : création de polices d’assurance indicielles ou paramétriques sur mesure avec calculs de risque actualisés par oracle, garantie d’unicité de déclaration de sinistre, automatisation du paiement des primes à échéance, acquittement de sinistre et versement des indemnisations… La société Etherisc s’est spécialisée dans la création de polices d’assurances individualisées sur la blockchain Ethereum avec « Flight Delays Suck ! » (https://fdd.etherisc.com), une assurance complètement personnalisable couvrant les retards d’avion, souscrivable quelques minutes avant le départ, et dont le calcul de risques est complètement transparent pour l’utilisateur. Dans le même esprit, notons « Jamii Crop Insurance » (https://crop.etherisc.com), une assurance pour couvrir les cultures contre les risques de sécheresse ou d’inondations. Axa Strategic Ventures réfléchit, quant à elle, au développement de side-chains pour l’interopérabilité entre blockchains et le traitement de transactions massives, tandis qu’Allianz Risk Transfer AG met en œuvre des blockchains pour faciliter la négociation des obligations liées aux catastrophes naturelles.

3. Sécurité

Le besoin de sécurité lors de l’usage de technologies numériques manipulant des fonds ou des preuves électroniques est une évidence. L’affaire « The DAO » l’a encore rappelé récemment, début 2016. « The DAO » était un smart contract destiné à des levées de fonds, notamment pour la société Slock.it qui conçoit des serrures connectées. Devant l’aspect novateur de ce smart contract Ethereum, le succès a été immédiat, et plus de 150 millions d’euros ont été collectés pour un projet initial qui ne nécessitait que quelques centaines de milliers d’euros ! Malheureusement, en juin 2016 une vulnérabilité d’implémentation du smart contract « The DAO » est exploitée et un appel récursif permet de siphonner un tiers des fonds collectés. Une intervention des développeurs a permis in-extremis de colmater la brèche, au prix de grandes questions sur la gouvernance d’une blockchain : qui doit pouvoir intervenir ?

Voyons maintenant ce qu’il est possible de recommander pour améliorer la sécurité des smart contracts. Un premier critère significatif est le langage de développement des smart contracts. Il en existe deux familles :

Langages impératifs : largement répandus et simples à écrire, il est très difficile d’évaluer leur sécurité dès lors que les programmes deviennent de taille moyenne.

Langages fonctionnels : beaucoup moins communs et connus des développeurs, généralement plus complexes à écrire, ils ont par contre l’immense intérêt d’être faciles à vérifier quasi automatiquement d’un point de vue de la sécurité, grâces aux techniques de preuves formelles.

Autrement, les maîtres-mots sont la simplicité, la modularité et la réutilisabilité du code. Le langage de programmation d’Ethereum, Solidity, bien que complexe, permet l’usage de classes et d’objets, ce qui facilite cette réutilisabilité. D’autres bonnes pratiques héritées de l’ingénierie de développement traditionnelle sont l’écriture de tests unitaires et de test d’intégration. Il est aussi conseillé d’adopter la séparation complète des conditions et des actions dans le code, technique aussi appelée  « Condition-Oriented Programming ».

D’autres bonnes pratiques techniques sont :

L’implémentation d’un « killswitch » dans le contrat, fonction d’urgence permettant de bloquer le contrat, de geler les fonds et de procéder à des retraits manuels en cas de dysfonctionnements ou d’exploitation de vulnérabilités dans le contrat.

L’écriture de conditions à l’entrée et à la sortie des fonctions (pré et post-conditions), vérifiant la conformité attendue des données traitées et retournées.

La tentative de réalisation de preuves formelles, mêmes partielles, qui sont toutefois plus faciles à réaliser avec des langages fonctionnels.

L’utilisation des environnements de test dédiés (frameworks, blockchains de test ou « testnets »), ainsi que des « mocks », classes de tests pour dérouler des scénarios à éprouver.

Enfin, ce qui est singulier, c’est que les incitations économiques diverses sont fondamentales pour contribuer à la sécurité d’un smart contract : limite de montants traités, programmes de bug bounties (cf. le leader européen https://bountyfactory.io), ou encore marchés de prédiction comme Augur (https://augur.net/) et Gnosis (https://gnosis.pm), permettent d’anticiper d’éventuels problèmes de sécurité. Ces pratiques très spécifiques commencent à se généraliser.

Conclusion

Il est à noter que toutes ces bonnes pratiques ne prennent que peu en compte les aspects économiques et il se peut que l’attaquant emploie des approches tortueuses ou contre-intuitives si cela s’avère rentable pour lui. La sécurité de la blockchain et des smart contracts est donc un domaine vaste et nécessitant des expertises variées (architecture, algorithmie, cryptographie, développement sécurisé), c’est pourquoi Digital Security se tient à votre disposition pour vous accompagner dans vos projets de conception et de mise en œuvre de blockchain, d’évaluation des risques techniques et juridiques, et d’audits de primitives cryptographiques en général.