Une tribune de la chercheuse Primavera de Filippi sur les leçons de l’affaire TheDAO

Après plusieurs semaines d’intenses débats suite au piratage du fond TheDAO, c’est la solution du “hard fork”, c’est-à-dire une modification de l’historique des transactions de la blockchain Ethereum, qui a finalement été choisie. Ce hard fork aura lieu ce 20 juillet, dans l’après-midi. Une nouvelle chaîne de blocs va ainsi être créée, permettant aux personnes ayant investi dans le projet TheDAO de récupérer les fonds volés. Cet évènement, inédit, a suscité de nombreux commentaires dans la communauté blockchain. Dans une tribune publiée le 11 juillet, Primavera de Filippi, chercheuse au Cersa (CNRS) et au Berkman Center for Internet & Society de l’Université d’Harvard, avait livré sa vision de la situation. Cet article reprend en français ses propos.

Le 17 juin a constitué une date clef pour la communauté, petite mais dévouée, formée autour de la technologie décentralisée Ethereum. Ce jour-là, il est devenu clair (du moins pour la plupart) que les organisations sociales ne peuvent être dirigées uniquement et exclusivement par du code.

L’histoire commence le 30 avril 2016 avec le lancement de TheDAO. TheDAO, pour Decentralized Autonomous Organization, est un collectif sans leaders composés d’investisseurs qui votent sur des projets à financer.

TheDAO fonctionne sur la blockchain Ethereum, un registre distribué inspiré par la blockchain Bitcoin. Ethereum a sa propre devise numérique, l’ether. Il fonctionne avec un langage Turing-complet, permettant aux gens de déployer des applications décentralisées – fonctionnant avec des smart contracts – sur cette blockchain.

En d’autres mots, TheDAO est un morceau de code, ou smart contract, fonctionnant sur la blockchain Ethereum. Quiconque ayant investi de l’ether dans le fond a reçu un certain nombre de jetons DAO, qui lui permet de voter pour les projets que TheDAO va financer. A la fin du mois du mai, TheDAO avait levé l’équivalent de plus de 150 millions de dollars en ethers via ces investisseurs.

Le 17 juin, seulement quelques semaines après son lancement, TheDAO a été piraté. Le hacker a exploité un bug dans le code, extirpant 3,6 millions d’ethers, l’équivalent de 50 millions de dollars au moment de l’attaque.

“L’idéal d’une technologie parfaitement trustless n’est rien d’autre qu’un idéal”

Dans le système financier traditionnel, les intermédiaires financiers ont le pouvoir d’annuler a posteriori, unilatéralement, les transactions illégitimes. Dans un réseau blockchain, après qu’une transaction a été faite, elle ne peut (théoriquement) pas être annulée a posteriori – à moins que tous les nœuds actifs du réseau s’accordent sur le contraire.

Etant donné le caractère massif de l’attaque, certains membres influents de la communauté Ethereum, dont son inventeur Vitalik Buterin, ont suggéré deux possibilités pour résoudre le problème, nécessitant toutes deux la coopération de la communauté Ethereum :

– Mettre à jour le client Ethereum de façon à geler chaque mouvement de fonds provenant du compte du hacker, en censurant toutes les transactions reliées à ce compte (ce qui a été appelé un soft-fork). L’avantage de cette solution est qu’elle peut être mise en application sans avoir à obtenir le consensus de la communauté Ethereum dans son ensemble.

– Modifier l’état de la blockchain Ethereum, dans le but de restaurer l’état originel de TheDAO tel qu’il était avant le vol (ce qui a été appelé un hard-fork). Le problème de cette option est qu’elle nécessite l’accord de la communauté Ethereum dans son ensemble, car le réseau risquerait sinon de se scinder en deux [Ndlr : entre les pro et les anti hard-fork].

Ce qui apparaîtrait à beaucoup comme une simple décision (« Devons-nous remédier aux dommages causés par un bug logiciel ? ») s’est avérée être une question particulièrement controversée.

La situation a mené à une division au sein de la communauté Ethereum, entre ceux prônant une intervention pour annuler a posteriori la transaction illicite, et ceux tenant absolument à respecter le code tel qu’il a été écrit (en dépit de ses défauts), même si cette option va à l’encontre de l’intention originelle du code.

Certains membres du second groupe estiment en effet que le hacker n’a rien fait de mal, et qu’il a seulement trouvé une façon intelligente d’utiliser le code pour obtenir des fonds additionnels – dans cette perspective, restaurer l’état précédent de TheDAO reviendrait à voler les fonds au hacker.

Au bout du compte, la division peut être réduite à un désaccord autour d’une question : savoir si « l’intention du code » devrait prévaloir sur « le sens littéral du code ».

Afin de mieux comprendre les arguments de chaque partie, il peut être utile de distinguer deux différents types de codes :

– Le code juridique, rédigé dans une langue qui est par essence flexible et ambigüe. C’est la raison pour laquelle la loi doit toujours être interprétée par un juge pour déterminer, au cas par cas, si et comment elle doit être appliquée à des faits particuliers. Dans certains cas, le juge peut décider d’ignorer le sens littéral de la loi, lorsqu’il apparaît que, compte tenu des faits du cas, appliquer aveuglement les règles violeraient de fait l’intention initiale du législateur.

– Le code informatique, rédigé dans un langage strict et formalisé, qui est uniquement destiné à être appliqué aux cas pour lesquels il a été rédigé. Par opposition à la loi, le code informatique manque de flexibilité, pourtant nécessaire pour couvrir des situations imprévues qui peuvent émerger dans une société complexe. Du reste, plus une règle est formalisée, plus il est simple pour un attaquant de l’exploiter ou de la contourner.

Si l’on devait choisir entre l’une des deux options, la plupart des gens choisiraient probablement la première. Pourtant, nombreux sont ceux, dans la communauté blockchain, qui tendent à penser que les individus et les organisations ne peuvent pas être dignes de confiance et que les interactions sociales devraient en conséquence être gérées uniquement et exclusivement par du code informatique.

C’est ce qui a motivé le développement de Bitcoin et d’autres applications fondées sur la blockchain. Ces technologies dites « trustless » sont conçues pour permettre aux gens d’interagir avec d’autres d’une façon pair-à-pair, même s’ils ne se connaissent pas et ne se font donc pas confiance a priori. A condition que la technologie sous-jacente soit de confiance, la blockchain permet aux individus de se coordonner entre eux et de s’échanger de la valeur sans avoir besoin de tierce partie.

“L’immuabilité et l’irrévocabilité se sont converties en dogmes devant être préservées coûte que coûte”

Bien sûr, il n’existe aucun système qui soit réellement « trustless », qui évacue entièrement la question de la confiance. Si l’idée peut bien fonctionner en tant qu’outil rhétorique, l’idéal d’une technologie parfaitement trustless n’est rien d’autre qu’un idéal. Chaque blockchain relie aujourd’hui un nombre d’agents auxquels il est nécessaire de faire confiance pour assurer les opérations sur le réseau – notamment les développeurs du logiciel, les mineurs validant les transactions, et plus généralement tous les participants actifs du réseau.

Ces agents de confiance sont souvent vus comme une menace par la communauté blockchain, car ils pourraient éventuellement se transformer en points de contrôle centralisés, menaçant ainsi la nature trustless du réseau.

Mais ces agents ont un rôle important à jouer quand la confiance dans la technologie est rompue à cause de circonstances imprévues, comme une faille dans le code ou la conception de la blockchain. S’il n’est plus possible de faire confiance à la technologie, alors le système entier risque de rompre, à moins que la technologie soit réparée et mise à jour. Dans le cas d’une blockchain, cela implique de permettre à ces agents d’intervenir – via un soft fork ou un hard fork – dans le but de restaurer les garanties originelles du système, et idéalement, de restaurer la confiance dans la technologie.

Ces processus ne sont pas exceptionnels ; ils ont déjà été effectués à de multiples reprises, aussi bien avec Bitcoin qu’Ethereum, pour réparer des bugs ou mettre à jour le protocole. Cependant cela n’avait – jusqu’ici – jamais été fait pour modifier l’historique des transactions. C’est cette action précise qui est actuellement sous le feu des critiques de la part de certains membres de la communauté blockchain, qui estiment qu’elle violerait les garanties de bases d’immuabilité et d’irrévocabilité de la blockchain.

Indépendamment de savoir si cela a un sens d’appliquer un soft ou un hard fork sur le réseau Ethereum, le débat actuel a mis en lumière un problème bien plus fondamental.

Il semble que nous ayons perdu de vue le motif originel ayant justifié le développement de ces systèmes trustless : permettre aux gens de collaborer et de se coordonner entre eux d’une façon pair-à-pair, sans autorité centrale. Ce qui était initialement une façon de parvenir à une fin est maintenant devenu une fin en soi. Au lieu d’être considérées comme des outils pour promouvoir la désintermédiation et l’émancipation individuelle, l’immuabilité et l’irrévocabilité se sont transformées en dogmes devant être préservés coûte que coûte, sans considérer leurs effets sur la communauté blockchain, et sur la société plus généralement.

Nous sommes maintenant en train de préserver le caractère (supposé) trustless de la technologie, même quand survient une erreur manifeste ou une injustice. Nous sommes en train de refuser de changer l’historique des transactions, non pas parce que nous pensons qu’un historique est meilleur qu’un autre, mais juste parce que le changer nécessiterait une forme d’intervention humaine.

Mais n’est-ce pas exactement ce qu’implique un consensus distribué ? Permettre aux gens de se coordonner entre eux, de façon décentralisée, sur ce qu’ils pensent que l’état du consensus devrait être ? Si la communauté Ethereum s’accorde à dire qu’une transaction spécifique est erronée, n’a-t-elle pas le droit – voire le devoir – d’intervenir pour résoudre le problème ?

Comme je l’avais écrit auparavant, la gouvernance centralisée n’est plus possible sur une infrastructure blockchain, parce que les institutions centralisées, comme les gouvernements ou les entreprises, ont perdu la capacité à réguler le système. Le pouvoir s’est déplacé des autorités centralisées vers les membres individuels de la communauté blockchain, qui ont maintenant la capacité de dicter les règles du jeu.

Mais ce pouvoir implique aussi des responsabilités. Les membres de la communauté blockchain ont beaucoup de pouvoir, et sont responsables socialement de la façon dont ils décident de l’exercer, ou de ne pas l’exercer. Ils ne peuvent pas déléguer leurs responsabilités à un simple morceau de code, si ce sont eux qui font fonctionner ce code.

S’il n’y a pas d’autorité centrale capable d’appliquer la loi, la communauté blockchain a l’obligation morale ou la responsabilité d’intervenir pour faire respecter l’intention de la loi (ou du code, en l’occurrence) de façon à préserver l’ordre public et la morale. C’est exactement ce qu’implique la « gouvernance distribuée ».

Le sujet de fond est que, si l’objectif est de promouvoir l’émancipation individuelle, nous devons donner aux gens la capacité – et la responsabilité – de façonner leur propre avenir. Tant qu’il y a consensus, les gens devraient être capables de mettre à jour leur « contrat social » – et ce, même si celui-ci a été encodé dans un « smart contract ». Tout refus de le faire signifierait que les individus ont en réalité délégué leur pouvoir à un système trustless, qui pourrait se retourner contre eux.

Primavera de Filippi

Article publié initialement en anglais sur Motherboard et traduit par Blockchain France