La confidentialité des crypto-monnaies Mimblewimble / Grin est fondamentalement vulnérable. Après avoir dépensé seulement 60 $ par semaine sur AWS, j'ai lié de manière unique les expéditeurs et les destinataires pour 96% des transactions de Grin en temps réel.
La vulnérabilité est au cœur du protocole Mimblewimble, et je ne pense pas qu'elle puisse être corrigée. Par conséquent, en termes de protection de la vie privée, Mimblewimble ne peut plus être considéré comme une alternative viable à Zcash ou Monero.
Au cours des deux dernières années, Mimblewimble est devenu populaire en tant que protocole compact pour les crypto-monnaies privées («pièces de confidentialité»). Mimblewimble a été inventé en 2016 par un pirate informatique sous le pseudonyme de Tom Elvis Jedusor. Il a envoyé la
description du
protocole au chat IRC et a disparu. Depuis lors, les implémentations les plus célèbres de Mimblewimble sont la crypto-monnaie crypto-privée Grin créée par des développeurs anonymes, ainsi que les projets
Tari et
BEAM qui ont attiré des investissements de capital-risque. Même Litecoin envisage l'
intégration de Mimblewimble .

Plusieurs chercheurs ont déjà
émis l'
hypothèse des faiblesses potentielles du mécanisme de confidentialité dans Mimblewimble. La contribution de mon travail est que je démontre une méthode d'attaque spécifique, prouve sa viabilité sur de la vraie crypto-monnaie et mesure son efficacité. En exécutant l'expérience Grin, j'ai réussi à désanonymiser 96% des transactions que j'ai examinées. Il est donc désormais évident que
vous ne pouvez pas compter sur Mimblewimble si vous avez besoin d'une confidentialité élevée.Dans
mon github, vous trouverez une description détaillée de l'attaque, les sources pour y jouer, les données collectées et la FAQ technique. Plus loin dans cet article, vous trouverez une explication générale et intuitive de la connectivité, du fonctionnement de l'attaque et de ce que cela signifie pour les technologies de confidentialité.
Qu'est-ce que la connectivité?
Il est important de comprendre ce que signifie cette attaque et ce qu'elle ne signifie pas.
Cette attaque ne nous permet pas de déterminer le montant que les gens reçoivent. Mimblewimble cache avec succès la quantité de transferts utilisant la cryptographie basée sur des courbes elliptiques de vanille (
régime d'obligations de Pedersen ). Ce que cette attaque nous permet de faire, c'est de déterminer
qui a payé qui . En d'autres termes, cela nous permet de connecter les transactions entre elles et de déterminer la direction des transferts.
Pourquoi est-ce important?
Disons que Coinbase sait qu'une adresse spécifique appartient à un Vénézuélien nommé Daniel. Vous, un utilisateur américain, essayez de retirer des pièces avec Coinbase. Mais après avoir élargi le graphique des transactions, Coinbase détermine que vous avez reçu de l'argent de Daniel - même s'ils ne savent pas combien. En raison des
restrictions imposées au Venezuela par la US Foreign Assets Control Authority, Coinbase ferme votre compte. (Bien sûr, les échanges en savent beaucoup sur le graphique de transaction, car ils ont des données utilisateur KYC qui sont affichées en fiat).
Ou imaginez qu'un gouvernement autoritaire sache qu'une certaine adresse appartient à un dissident politique. Vous envoyez à ce dissident un petit beignet. Plus tard, lorsque vous envoyez votre transfert Mimblewimble à un central local, ce transfert transfère vos données de transaction au gouvernement. Puisque le gouvernement voit l'intégralité du graphique de la transaction, il sait maintenant que vous avez soutenu le dissident politique.
De telles attaques ne seraient pas possibles à Zcash. Parce que les transactions dans Zcash ne sont pas connectées, ou, en d'autres termes, chaque transaction Zcash a un large
ensemble d'anonymat . Un ensemble d'anonymat est un ensemble de transactions dont votre transaction ne peut pas être distinguée. Imaginez cela comme un mélange avec la foule: plus l'ensemble d'anonymat est grand, plus votre transaction est mélangée.

Dans Zcash, l'ensemble d'anonymat de chaque transaction comprend toutes les pièces protégées. Il s'agit de l'anonymat maximal possible d'un point de vue théorique.

Dans Monero, l'ensemble d'anonymat pour chaque transaction est l'ensemble de toutes les transactions d'appâts activées par l'utilisateur. Bien que le client Monero vous permette de définir le nombre de leurres dans un ensemble, la valeur par défaut actuelle est 11. (Monero a ses propres difficultés à
choisir des leurres en toute sécurité , mais je pense que pour la plupart cela fonctionne,
plus ou moins ).
Initialement, on supposait que l'ensemble d'anonymat Mimblewimble se compose de toutes les transactions dans le même bloc, c'est-à-dire qu'il ressemble à ceci:

Mais en fait, cela ressemble à ceci:

Cela réduit l'anonymat Mimblewimble défini à une seule adresse.
Je veux dire que ce n'est pas une critique de Grin en général! Je respecte vraiment la communauté Grin et les développeurs principaux, qui ont toujours répondu facilement à mes questions sur les forums.
Grin offre toujours une plus grande confidentialité que Bitcoin et autres pièces privées, car il crypte les montants en toute sécurité. Mais le modèle de confidentialité Mimblewimble est strictement plus faible que celui de Zcash ou Monero. Et cela le rend insuffisant pour de nombreux cas d'utilisation du monde réel où la confidentialité est nécessaire.
Présentation de l'attaque
Comment pouvez-vous exactement désanonymiser un graphique de transaction dans Mimblewimble?
J'ai noté que, malgré le cryptage des montants de transfert, Mimblewimble laisse un graphique de transaction traçable. Mais les développeurs du protocole le savaient, et Mimblewimble utilise donc deux moyens principaux pour lutter contre la connectivité:
par l'agrégation de l'ensemble du bloc et
«pissenlit» (Dandelion) .
L'idée de l'agrégation de bout en bout est que lorsque les transactions sont collectées dans un bloc, elles sont agrégées en une «super-transaction». Cette «super
transaction » ressemble à un géant
CoinJoin - toutes les entrées et sorties sont mélangées, et il n'y a pas de moyen facile de déterminer laquelle a payé à qui. Il y a juste un tas d'entrées et un tas de sorties, et des quantités spécifiques sont cachées.

Semble fiable? Il n'y a qu'un seul problème: ce CoinJoin est construit une transaction à la fois. Étant donné que les transactions sont constamment créées et envoyées à partir de différents endroits, si vous détenez un nœud renifleur qui collecte toutes les transactions avant que l'agrégation de bout en bout ne soit terminée, il est très facile de démêler CoinJoin. Tout nœud renifleur peut simplement surveiller le réseau et se souvenir des transactions d'origine avant de les regrouper. C'est assez facile si vous archivez simplement tous les messages que vous voyez sur un réseau P2P.

Ici, vous pourriez être surpris - et c'est tout?
En fait, il existe une autre couche de protection créée par l'équipe de Grin:
le protocole Dandelion («pissenlit») . Le pissenlit est une méthode de
mise en réseau
développée par des chercheurs de l'Université Carnegie Mellon, qui devrait masquer l'IP du créateur de la transaction.

Habituellement, dans les crypto-monnaies telles que le bitcoin, le créateur de la transaction envoie simplement la transaction à tous ses pairs, et elle passe rapidement à travers le réseau P2P. Mais dans le protocole Dandelion, la distribution de chaque transaction commence par le jeu secret d'un téléphone cassé. Le créateur transfère sa transaction à une seule fête qui, à son tour, la transmet à une autre fête, et ainsi de suite le long de la chaîne («tronc» de pissenlit). Après un nombre aléatoire de ces mouvements, la dernière fête envoie la transaction exactement comme dans le bitcoin («fleur» de pissenlit). Mais cette fête est tellement loin du créateur de la transaction qu'aucun observateur ne peut dire qui a commencé la chaîne.
Cela fonctionne très bien pour masquer l'IP de la personne qui commet la transaction. Mais Dandelion in Grin a une deuxième fonction: dans de rares cas, il vous permet de maintenir l'anonymat de la transaction même s'il y a un nœud renifleur dans le réseau. Étant donné que chaque transaction commence dans la phase «tige» du pissenlit, lorsque deux transactions se croisent dans la phase de propagation «tige», elles seront agrégées précocement. Si cela se produit, au moment où la transaction est envoyée et devient visible pour tout le monde, le nœud renifleur ne peut pas coller les transactions: elles sont déjà collées ensemble dans CoinJoin.
Ce mécanisme d'envoi de transactions est la principale défense de Grin contre la connectivité transactionnelle par des nœuds renifleurs. Mais il existe un moyen facile de la briser.
Par défaut, chaque nœud Grin est connecté à 8 autres nœuds homologues. Mais en augmentant le nombre de pairs, je peux connecter mon nœud renifleur à chaque nœud du réseau. Si mon site est en ligne depuis longtemps, en fin de compte, presque tous les nœuds du réseau se connecteront à moi, ce qui fait de moi un
super hub .
Lorsque je deviens un super-nœud, il y a une forte probabilité que je sois dans la chaîne du "pissenlit" de chaque transaction. Ainsi, la seule raison pour laquelle je ne pourrai pas attraper une transaction avant son agrégation est si les deux transactions se sont
croisées dans la phase racine du pissenlit avant que j'aie vu au moins l'une d'entre elles . Si j'en vois au moins un avant qu'ils ne soient agrégés, je peux les séparer par une simple soustraction des ensembles.

Dans mon attaque, j'ai réussi à connecter 96% de toutes les transactions, en ne me connectant qu'à 200 homologues sur les 3000 homologues du réseau Grin. Mais si j'étais prêt à dépenser un peu plus d'argent, je pourrais facilement me connecter à 3 000 nœuds pour tenir presque toutes les transactions. Et pour cela, il n'est pas nécessaire de conserver un seul superutilisateur - la même attaque fonctionnera si vous exécutez 3 000 nœuds distincts avec des adresses IP uniques, chacun étant connecté à un seul homologue. Tant que j'intercepterai toutes les données transactionnelles et les déposerai dans la base de données principale centrale, l'attaque fonctionnera exactement de la même manière.
Est-il donc possible de sauver Mimblewimble?
Pas clair. À mon avis, dans la version actuelle de Grin, il n'y a aucun moyen de protéger le graphique de transaction. Il ne suffit pas d'allonger le «pissenlit» - il sera facile de vaincre avec un grand nombre de nœuds, comme je le décris dans le
rapport technique .
Mais malgré la connectivité transactionnelle, Mimblewimble a toujours des propriétés qui distinguent le protocole des autres crypto-monnaies. L'agrégation de bout en bout y est possible, ce qui est un moyen efficace de réduire la taille de la blockchain et masque efficacement les montants des transactions. Si vous souhaitez une confidentialité élevée, vous pouvez toujours combiner Mimblewimble avec un autre protocole qui masque le graphique de transaction, par exemple, comme dans
Ethereum 9¾ (qui combine Mimblewimble avec un schéma de réinitialisation zéro de style Zerocash).
Mais il est évident que Mimblewimble lui-même n'est pas assez fort pour fournir une intimité élevée.
Le Bitcoin a maintenant 11 ans, mais les crypto-monnaies sont encore à un stade très précoce de développement. Il n'y a pas si longtemps, de graves vulnérabilités ont été découvertes dans
Zcash et
Monero . Et c'est normal: la plupart des technologies intéressantes sont encore en phase de recherche.
Mais c'est ainsi que la science se développe toujours: nous proposons constamment de nouvelles hypothèses et les réfutons jusqu'à ce qu'il ne reste que celles qui ont passé l'épreuve du temps.
Merci à Hasib Kireshi pour l'aide substantielle dans la compilation de ce rapport et l'illustration des ensembles d'anonymat. Remerciements supplémentaires à Oleg Ostroumov, Elena Nadolinsky, Mohamed Fouda, Lucas Ryan et Nader Al-Naji pour avoir révisé les ébauches de ce message. Et merci beaucoup à Jake Stutzman (protocole NEAR) pour les illustrations de pissenlit et l'agrégation de blocs. Merci Daria Smirnova pour la traduction de l'article.
Si vous avez aimé l'article, je vous recommande de vous abonner à mon Twitter , où ils vont en premier (en anglais).
Divulgation: Dragonfly Capital s'engage à ne pas échanger les actifs répertoriés dans ce rapport pendant 3 jours à compter de la date de publication.