Tutorial : Comment deviner une clé privée Ethereum ?
Envoyez « Clé privée ETH + le nom de votre ami » au 3636 – Je vous vois déjà paniquer à la lecture de ce titre. Détendez-vous, la situation n’est pas si grave : nous n’allons bien évidemment pas apprendre ensemble à deviner des clés privées Ethereum, puisque cela est en théorie impossible. Néanmoins, des chercheurs travaillant pour la firme spécialisée en cyber-sécurité Independent Security Evaluators (ISE) ont eu une idée plus originale : existe-t-il des situations où des erreurs ont lieu lors de la génération des clés privées ou de leurs dérivations en clés publiques, puis en adresses publiques ? Et surtout, serait-il possible de tirer parti de ces faiblesses afin de deviner certaines de clés privées originelles qui seraient finalement plus fragiles ?
La réponse est oui, et elle les a amené involontairement à suivre les traces d’un “bandit” de la cryptosphère, très occupé à scruter ces adresses pour les piller et se constituer un trésor de guerre conséquent.
Plongeons ensemble dans ces eaux où l’entropie laisse à désirer.
La clé est la clé : rappels concernant la cryptographie asymétrique
Commençons par rappeler quelques principes généraux propres à la cryptographie asymétrique en général, puis nous entrerons plus dans le détail des paires de clés utilisées pour Ethereum et de leurs dérivations possibles.
Prise simplement, une clé privée Ethereum pourrait théoriquement être obtenue en choisissant au hasard n’importe quel nombre compris entre 1 et 2256 . L’important, en soi, réside définitivement dans le fait de le choisir réellement au hasard, c’est-à-dire de la générer de telle sorte qu’elle ne soit pas prédictible.
Cette clé publique est ensuite dérivée de la clé privée selon une multiplication de courbe elliptique (dite secp256k1, ECDSA), c’est-à-dire pour schématiser que deux nombres sont tirés de la clé privée et multipliés l’un avec l’autre pour générer un point donné sur une courbe elliptique comme suit :
Dans l’hypothèse où la procédure est suivie correctement et sans faille particulière, la clé publique respectera la fameuse trapdoor function, c’est-à-dire qu’il ne sera pas possible de remonter à l’envers d’une clé publique à une clé privée.
Pour récapituler, la clé publique est ensuite hashée en utilisant la fonction de hashage Kekkak-256. Le hash obtenu est alors tronqué en ne conservant que les 20 derniers caractères, lesquels correspondent enfin à l’adresse publique.
De là, vous pouvez déjà percevoir pourquoi la clé est la clé : le protocole de chiffrement ou de dérivation a beau être solide en lui-même, si ce qui permet de produire la clé ne repose pas sur un procédé validé fondé sur un degré d’entropie suffisant (image de l’aléatoire suffisamment aléatoire), alors elle devient en réalité devinable.
Mais quels facteurs peuvent entraîner ce défaut d’aléatoire, et cette prédictibilité dans la clé privée, donnant alors accès aux fonds qui se cachent derrière cette adresse ?
C’est à cette question que les chercheurs de l’ISE tentent de répondre dans leur exploration crypto-centrique. Voyons plus en détails ensemble dans quel situation le colosse cryptographique qu’est censé représenter une clé privée Ethereum peut en définitive être trahi par son talon d’Achille.
https://giphy.com/gifs/3o72FauRvj76qp5bI4/html5
Quand le Hasard est maladroit
La recherche initiale de l’ISE s’est donc focalisée sur l’identification des différentes variables qui, si faussées, pourraient conduire à produire des clés privées fragiles, par exemple parce que ces clés privées sont en réalité tronquées et qu’elles sont plus simples à deviner par simple brute force.
Pour illustrer, prenons l’exemple de la clé privée suivante, donné par l’équipe de l’ISE :
- 0x47579DA2BEA463533DBFAD6FCF8E90876C2FE9760DC1162ACC4059EE37BDDB5C
Au lieu de permettre à son propriétaire d’accéder aux fonds gérés par cette clé, une clé affaiblie (weakened 256-bits key) est en fait tronquée à 32-bits seulement, ce qui signifie que l’utilisateur a accès aux fonds gérés par la clé privée simplifiée suivante :
- 0x0000000000000000000000000000000000000000000000000000000037BDDB5C
Cette possibilité est documentée par l’équipe dans un certain nombre de cas, par exemple lorsque le code sous-jacent au service ou au matériel utilisé pour générer les clés est de faible qualité et perclus d’erreurs de codage, lorsque d’autres bugs surviennent dans l’environnement-même lors de la génération, ou encore lors d’exceptions diverses non documentées. En résumé, ces erreurs peuvent conduire à un troncage de l’adresse privée générée qui soit faussé, sans que l’utilisateur n’en ait même conscience : le propriétaire envoie alors des fonds vers son adresse qu’il pense sécurisée, mais en réalité la clé privée entière rattachée est beaucoup plus simple qu’elle ne le devrait, et il est donc possible de la bruteforcer.
L’équipe de l’ISE a donc décidé de scruter elle-aussi le cyber-espace d’Ethereum, en s’intéressant à des parties distinctes du spectre de génération des clés privées : plutôt que de tenter de scruter d’office les 256 bits intégraux, ils ont donc segmenté leurs explorations. Comment ? En recherchant si des adresses pouvaient être tronquées par 32-bits, mais sur chaque portion du spectre entier.
En fonctionnant ainsi, ils ont pu accéder aux clés privées fragiles suivantes, comme illustré ci-après :
Les chercheurs ont pu identifier 49060 transactions ayant concernés ces 732 clés privées, pour lesquelles il leur a donc été possible d’accéder au contrôle des fonds sous-jacents. Surprise : si les balances restent à l’équilibre à 0 ETH, en réalité des fonds transitent quotidiennement par elles, puisque des utilisateurs sont victimes d’adresses privées fragilisées, mais ces fonds disparaissent d’office. Pourquoi ?
Au détour de leur recherche, les chercheurs de l’ISE ont identifié presque par accident un attaquant en particulier. Très gourmand en ETH, il a attiré leur attention, même si ce crypto-margoulin ne serait pas seul dans cette course au siphonnage.
https://giphy.com/gifs/l0HlHp2aBxnKirj3O
Ils l’ont appelé le Blockchain Bandit. Mais que fait donc ce brigand de grand chemin ?
Le margoulin qui disparaît dans l’ether
Ce mystérieux bandit se livre en définitive à une activité toute simple : il mobilise des ressources informatiques que l’on image très conséquentes afin de scanner en permanence toutes les clés faibles dans tout le spectre observable, quelles que soient l’origine technique de cette fragilité. Mais, à la différence de l’ISE, il ne le fait ni pour la gloire ni pour la recherche fondamentale : il récupère automatiquement tous les fonds qui viendraient à échouer sur une de ces adresses. Même les miettes, comme vous vous en doutez.
Tous les fonds détournés finissent par être redirigés à cette adresse.
Les chercheurs ont commenté auprès de Wired que ce cyber-arnaqueur n’est pas seul dans cette compétition débridée, mais qu’il est incontestablement un des plus talentueux : En janvier 2018, lorsque le pic du marché fut atteint, l’adresse totalisait déjà 38 000 Ethers, soit la modique somme de 45 millions d’euros. Le plus beau n’est-il pas qu’en définitive ces fonds soient toujours là ?
Le brainwallet, une autre illustration du problème
Toutes les fragilités présentées au cours de l’étude menée par l’ISE reposent donc sur le manque d’aléatoire dans la génération de la clé privée initiale, la mettant à portée de divers procédés de brute force. Il ne reste plus qu’à laisser travailler les machines, et attendre qu’elles ne scannent des clés privées faibles, qu’elles vérifient si des fonds y sont stockés, et si oui qu’elles les récupèrent.
Ce mécanisme peut être appliqué à un autre type de clé potentiellement fragile, ne concernant bien sûr pas qu’Ethereum : le fameux brainwallet. Ce type de wallet repose sur des clés privées dérivées depuis des passwords ou des passphrases, lesquels sont fournis par l’utilisateur.
Si l’idée peut paraître séduisante de prime abord, rappelons qu’il n’en est rien, et que se servir d’un brainwallet est une bien mauvaise idée dans les faits. Le procédé peut plaire puisque l’utilisateur n’a qu’à rentrer son mot de passe pour accéder à ses fonds, ne laissant pas sa clé privée stockée dans un matériel donné. Ainsi, il serait tout naturel de croire que, puisqu’aucune clé n’est stockée ailleurs que dans notre propre tête, alors il est impossible de l’extraire d’un matériel informatique et sa sûreté serait assurée.
Comme le montre bien l’exemple de ces clés privées Ethereum compromises par manque d’entropie, si le mot de passe choisi n’est en réalité pas assez sécurisé, alors il finira forcément compromis par la grâce du brute force, sans même avoir besoin de compromettre un wallet physique qui, lui, est pourtant doté d’un secure element pour le protéger. Or, s’il y a bien une chose que l’Humain ne cesse de démontrer, c’est qu’il est toujours pétri de certitudes, et que son mot de passe est toujours à ses yeux le plus sécurisé du monde. Et nous ne dérogeons pas à la règle dans la cryptosphère.
Comme l’a étudié dès 2017 Marie Vasek dans une thèse dédiée aux liens entre cybercrime et Bitcoin, les brainwallets servant à stocker des bitcoins n’ont pas connu meilleur sort que les adresses Ethereum repérées par les chercheurs de l’ISE. De l’inception de Bitcoin à février 2017, ce seraient ainsi 2846 bitcoins qui auraient un jour été stockés de cette manière bien imprudente, puis siphonnés par des pirates de plus en plus professionnels. Pour vérifier ses dires, elle s’est appuyé sur un utilitaire open source permettant de dériver des clés privées aléatoirement avec des listes de passwords et de passphrases générées aléatoirement à partir d’un matériel composé de mots de passe ayant fuités lors d’attaques informatiques contre des sites majeurs, ou encore d’informations aspirées sur les forums dédiées au Bitcoin : ce logiciel est appelé BrainFlayer, et initialement il a été déployé comme un proof-of-concept par l’analyste en cyber-sécurité Ryan Castellucci.
Si ce nom vous dit quelque chose, c’est que M. Castellucci est connu pour avoir présenté à la DEFCON23 en 2015 comment cracker des brainwallets Bitcoin à l’aide de son utilitaire, lors d’une conférence restée célèbre.
La communauté le connaît également pour son rôle déclencheur dans le scandale du brainwallet BitFi promu par John McAfee : il avait tiré la sonnette d’alarme, en démontrant qu’il lui était possible théoriquement d’attaquer des utilisateurs du BitFi avec son simple utilitaire BrainFlayer.
Notons au passage que Mme Vasek faisait en 2017 une autre remarque qui semble résonner aujourd’hui avec force et être illustrée par les découvertes de l’ISE : elle notait déjà à l’époque que le temps pendant lequel des fonds pouvaient rester stockées sur une adresse fragile diminuait drastiquement. Elle estimait ainsi qu’en 2013, de tels fonds pouvaient perdurer sur l’adresse en question pour quelques heures ; mais qu’en 2017, ce temps s’était réduit comme peau de chagrin et n’excédait plus quelques minutes au mieux, voire quelques secondes. Les clés privées fragiles, quelles qu’elles soient, seraient-elles la cible de pillards numériques qui se professionnaliseraient ?
Cette piste des nouveaux pirates des temps modernes, écumant les eaux du cryptoglobe pour récupérer les fonds monétaires mal sécurisés est en tout cas un secteur qui semble avoir de l’avenir. Si l’identité du désormais fameux « Blockchain Bandit » n’est pas connu, y voir la marque de certains Etats (comme la Corée du Nord, pour ne pas la citer), dont on sait qu’ils se livrent au détournement cryptomonétaire, n’aurait rien d’exagéré. Après tout, l’exemple Lazarus pourrait nous servir de piqûre de rappel.
https://giphy.com/gifs/3o72EU6W6bOv2mKw0g
Pour conclure, les chercheurs de l’ISE font quelques recommandations aux professionnels du milieu, notamment pour s’appuyer sur un aléatoire qui le soit véritablement lors de la génération des clés privées si sensibles. Pour notre part, nous profitons de cet article pour vous rappeler le risque inhérent aux brainwallets.