Blockchain

Contrats intelligents : les utilisateurs sécurisent la chaîne de blocs

30 mai 2017

Contrats intelligents : les utilisateurs sécurisent la chaîne de blocs

Les contrats intelligents : la Blockchain affronte le secteur juridique

Grâce aux contrats intelligents, la Blockchain a été améliorée bien au-delà de sa capacité à enregistrer des transactions. On peut maintenant utiliser des langages « Turing-complete » tels que Solidity, Serpent et Golang pour écrire une logique commerciale complexe, qui une fois déployée fait fonctionner la chaîne elle-même. En outre, les contrats intelligents agissent comme une transition d’état et un système de stockage permanent, qui manipule les données selon les exigences opérationnelles et accède aux informations environnementales – par exemple, l’horodatage d’un bloc et le compte de l’expéditeur. 

Ethereum est un exemple de plateforme décentralisée qui exécute des contrats intelligents. À l’instar de Bitcoin, elle exécute des contrats dans le cadre d’un système incitatif, qui rémunère les mineurs en fonction de la puissance de calcul dépensée. Pour cela, elle utilise Ether, sa crypto-monnaie d’origine, qui a une valeur réelle. La machine virtuelle Ethereum (EVM) fournit un cadre pour que le contrat intelligent soit exécuté sous forme de « Bytecode » en piles. S’agissant d’un registre en libre accès, n’importe qui peut rejoindre le réseau, effectuer des transactions et / ou accéder au code source du contrat. Tout comme un compte d’utilisateur, le contrat reçoit une Clé Publique, et peut détenir et transférer des Ethers. Pour éviter les contrats « incontrôlables » qui utilisent trop de puissance informatique (attaques DoS), une limite d’émission est appliquée. Par conséquent, toute transaction qui atteindra la limite d’émission de 2 300 unités échouera automatiquement. Les mineurs ont la possibilité d’accepter ou de rejeter une transaction, d’horodater un bloc, de commander des transactions et bien plus encore.

Les failles de sécurité inhérentes aux contrats intelligents

Le paradoxe des contrats intelligents, c’est que les attributs qui leur donnent leur véritable pouvoir – les langages « Turing-complete », l’exécution sur la chaîne, etc. – les transforment en pain béni pour les pirates informatiques. Les nombreux incidents sur Ethereum l’ont récemment prouvé : TheDarkDAO, FirePonzi, Governmental, King of Ether, le jeu de « Pierre Feuille Ciseaux », etc.

Les causes principales de ces incidents de sécurité peuvent être classées en deux grandes catégories :

L’exploitabilité d’une plateforme en raison de sa conception

Exemple 1 : La faille de sécurité d’Ethereum concernant la réentrance. En informatique, un programme ou sous-programme est réentrant s’il peut être interrompu en pleine exécution et être ensuite rappelé en toute sécurité (réentré) avant que les appels précédents ne soient effectués. Cette faille de sécurité, combinée à la limitation d’Ethereum à 1 024 appels, a entraîné l’attaque de La DAO. N.B. La fourchette dure a depuis résolu la limitation du nombre d’appels.

Exemple 2 : La gestion des exceptions. Lorsqu’une transaction échoue dans Ethereum, l’exception remonte à l’appelant d’une fonction contractuelle intelligente. C’est la règle, sauf si l’appel a été effectué à l’aide d’instructions d’envoi / d’appel. En outre, il est possible de transférer des éthers à un compte contractuel qui peut consommer plus que la limite d’émission. Cela a conduit à l’attaque du King of Ether.

Concevoir ou implémenter des « bugs » dans le code source du contrat intelligent

(Le mot « bugs » est entre guillemets, car il est difficile de savoir s’ils étaient involontaires ou malveillants)

Exemple 1 : « Pierre Feuille Ciseaux » – les données du contrat étaient publiquement visibles puisqu’elles n’étaient pas cryptées, de sorte que le premier participant à montrer son jeu perdait systématiquement.

Exemple 2 : FirePonzi – deux variables avaient des noms très similaires (seul un « underscore » les distinguait) afin que le code malveillant qui transférait des éthers à la mauvaise adresse ne soit pas détecté.

Les utilisateurs de la Blockchain : la clé de la sécurité des contrats intelligents

Chaque utilisateur de la Blockchain a la responsabilité de combattre et d’empêcher les futurs incidents de sécurité. Les différentes actions qu’il peut mettre en œuvre dépendront de son profil.

Les Développeurs de Contrats Intelligents

Indépendamment de leur cause, les incidents précédents montrent que les développeurs de contrats intelligents doivent être beaucoup plus focalisés sur la sécurité que leurs homologues des logiciels traditionnels. Ils doivent se rendre compte qu’avec la Blockchain, le paradigme de la conception et de la programmation a évolué :

  1. Contrairement à une solution centralisée, l’état et le code source d’un registre public sont ouverts à tous. Les données / sources sensibles doivent être stockées de manière cryptée, par exemple « Pierre Feuille Ciseaux » – il suffit de crypter l’écriture de chaque participant et de la décrypter lorsque les deux participants ont fait leurs jeux.
  2. Contrairement à un modèle client-serveur, les contrats intelligents sont exécutés à plusieurs reprises par plusieurs mineurs. Les contrats intelligents ne doivent pas être écrits pour modifier l’état d’un système externe (par exemple en utilisant des oracles), sinon cela entraînerait un état incohérent dans l’application externe.
  3. La gestion des exceptions n’est plus une simple question d’états try/catch qui remontent. Les appelants doivent vérifier la valeur de retour de chaque appel pour identifier les conditions d’échec.
  4. Pour implémenter une logique, les contrats intelligents ne doivent pas dépendre de valeurs environnementales telles que l’horodatage du bloc ou l’ordre des transactions (par exemple gérer la concurrence). Les mineurs peuvent manipuler ces valeurs.
  5. Contrairement au cycle de vie d’un logiciel traditionnel (où les mises à jours sont la norme), les contrats intelligents sont immuables une fois qu’ils sont déployés. La conception de contrats intelligents doit être hautement modulaire afin que, le cas échéant, les modifications puissent être isolées dans une zone limitée.
  6. Il faut concevoir des « paiements électroniques pull » par opposition aux « paiements électroniques push » pour éviter de perdre le contrôle de cette caractéristique fondamentale (l’argent !).
  7. Contrairement aux cadres de programmation stable, la Blockchain n’a pas (encore) de banques, d’outils ou de composants réutilisables déjà testés dans le temps. La communauté des développeurs peut travailler à la construction de tels composants, par exemple un contrat intelligent pour générer un nombre aléatoire, un contrat intelligent pour transférer une monnaie de manière sécurisée, des mécanismes de traitement des exceptions, etc.

Les « hackathons » et les cours de formation en ligne de sécurité contribueront grandement à développer cette mentalité de sécurité et des exemples de mise en oeuvre.

Développeurs de Protocole et d’Application

  1. Les communautés de la Blockchain travaillent dur pour trouver et résoudre les failles de sécurité de leurs plates-formes. Cependant, les plateformes devront subir des fourchettes dures / molles (par exemple Ethereum) au fur et à mesure que ces problèmes seront résolus. Jusqu’à présent, Bitcoin est la seule plateforme testée où aucune faille de sécurité n’a jamais été trouvée ; mais l’utilisation de Bitcoin pour créer des contrats intelligents est limitée.
  2. Le souci de la sécurité est réduit de façon exponentielle sur les plateformes autorisées, surtout avec le contrôle des participants au réseau. En outre, des plateformes telles que HyperLedger limitent l’exposition des contrats et des transactions, en mettant en œuvre la notion de transactions confidentielles. Le contenu du contrat est crypté en utilisant des clés secrètes, visibles uniquement pour l’émetteur, l’auditeur et un validateur habilité.
  3. Les développeurs de Protocole et d’Application doivent publier des directives de sécurité. Le guide sur les meilleures pratiques de contrats intelligents publié par ConsenSys est déjà un bon pas dans cette direction.

Sociétés Juridiques et Régulateurs

  1. Ils doivent comprendre qu’avec des contrats intelligents, le code c’est la loi.
  2. Étant donné que le contrat intelligent est immuable, il est essentiel qu’il soit sécurisé au point d’entrée dans la Blockchain. Au fur et à mesure que la Blockchain deviendra plus généralisée, les régulateurs et les cabinets juridiques (avocats et personnel auxiliaire) devront développer leurs compétences en matière de vérification des contrats intelligents et de révision du code source.
  3. Des lois et des lignes directrices devront être adoptées pour la mise à jour des contrats intelligents et pour la gestion des ruptures de contrats.

Testeurs de Sécurité

  1. Tout comme les développeurs, les testeurs de sécurité des contrats intelligents devront comprendre le nouveau paradigme du partage sécurisé informatique, et les différences entre tous les cas d’essai.
  2. Il est plus difficile que pour les solutions de logiciels traditionnels de configurer des environnements de test et de simuler des violations de sécurité – par exemple, mineur malveillant, différence d’horodatage, etc. Des cadres et des outils de test fiables seront donc essentiels pour aider les testeurs. À cet égard, Zeppelin et Oyente sont d’excellentes initiatives.

Quelle est la prochaine étape pour les contrats intelligents ?

La sécurité des contrats intelligents est un problème majeur qui empêche une adoption généralisée de la technologie de la Blockchain. De récentes attaques sur des contrats intelligents ont souligné ce sujet de préoccupation, tout en permettant d’identifier les failles de sécurité et les solutions possibles.

Bien que le travail sur le terrain ait déjà commencé, l’existence d’une unique solution est très peu probable. Un problème fondamental si complexe nécessitera une approche sur plusieurs niveaux, impliquant différents profils d’utilisateurs de la Blockchain. Néanmoins, de toutes les actions nécessaires pour garantir les contrats intelligents, celles qui sont menées au point d’entrée de la Blockchain sont de loin les plus importantes.

Leave a comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *