Utiliser Zcash pour envoyer une clé privée à l’autre bout du monde ?

BTC via ZEC

En juillet dernier, nous expliquions comment envoyer un message privé en utilisant le mémo Zcash.
Et si, grâce à ce mémo, nous pouvions envoyer de façon sécurisée les clés privées de nos cryptos à tout endroit du globe ?

Clause de non-responsabilité : cet article évoque des cas d’usages possible afin de montrer les possibilités offertes par le champs « mémo ». Il ne s’agit en aucun cas d’une recommandation et aucune garantie ou support ne pourra être délivré par notre équipe si vous décidez de l’implémenter.

La fonctionnalité «mémo» de Zcash

Avant d’aller plus loin dans les cas d’usages, rappelons ce qu’est la fonctionnalité mémo de Zcash et comment elle fonctionne.
La blockchain Zcash offre 2 catégories de transaction:

  1. des transactions dites «transparentes»: celles-ci sont identiques aux opérations que vous pouvez réaliser avec Bitcoin. Tout ce que vous faites par ce moyen est consultable de manière transparrente par les noeuds du réseau.
  2. des transactions dites «shielded» qui ne divulguent aucun paramètres de la transaction: expéditeur, destinataire et montant.

Dans ce dernier cas, seul l’expéditeur ou le destinataire (avec sa clé privée) peut connaitre le montant de la transaction. L’identifiant de transaction sera effectivement enregistré dans la chaine, mais sans que personne d’autre sur le réseau ne puisse en connaître les détails. Compte tenu de la technologie employée, le destinataire lui-même ne peut connaître l’expéditeur de la transaction dont il bénéficie.

C’est pourquoi Zcash a introduit un mémo dans les transactions «shielded». Sa longueur peut aller jusqu’à 512 caractères, ce qui permet à l’expéditeur de communiquer un message privé à son destinataire.
Il peut s’agir d’un identifiant de facture, un message personnel comme le propose ZecPages.com, ou toute information utile.

Communiquer une clé privée Bitcoin en utilisant Zcash

Il y a quelques jours, je tombe sur ce tweet de zcashvr:

Tweet @zcashvr

Je m’interroge alors sur cette idée saugrenue et je tente de répondre à deux questions :

  1. Quel est l’intérêt d’une telle opération ?
  2. Peut-on la réaliser en toute sécurité ?

Premièrement, nous savons que si nous envoyons une transaction Bitcoin, celle-ci sera irrémédiablement enregistrée dans la blockchain. Alors que si j’envoie la clé privée du porte-monnaie, contenant le montant désiré, via une transaction «shielded» Zcash, en l’absence de transaction dans la chaine, personne ne saura que les Bitcoin ont changé de main.
Cela peut bien sûr s’appliquer à toute crypto non confidentielle «by design» telles que Ethereum, Bitcoin cash, Litecoin, XRP et même dans une certaine mesure Dash.

Astucieux! Mais peut-on le faire de manière sécurisé ? Et si, un jour, il était possible de «craquer» le contenu d’un mémo, la clé privée transmise serait-elle alors compromise ?

Quelle est la sécurité de cette communication ?

Je ne vais pas revenir ici sur la technologie zk-SNARK et sa performance, le site officiel de Zcash le fait beaucoup mieux que quiconque. C’est avant tout cette technologie qui offre le plus haut niveau de sécurité actuellement disponible dans les blockchains.
Par conséquent, nous pouvons considérer qu’il est sécurisé d’insérer vos informations dans le mémo d’une transaction Zcash «shielded». Il faut tout de même garder en tête que les mémos sont inscrit dans la blockchain définitivement et qu’il est difficile de prévoir les capacités de déchiffrement des futurs ordinateurs.

Néanmoins, je joue volontairement le rôle de l’utilisateur paranoïaque. Ainsi, je me demande s’il est possible de faire encore mieux. Mon avis personnel est que oui, notament en reprenant l’idée des mixeurs de crypto-monnaies.

Si je divise la «seed phrase» (ma clé privée représentée sous forme de mots clés) en plusieurs sous-chaines, et que je transmet chacune d’elles dans des transactions Z à Z via des adresses différentes, je devrais pouvoir obfusquer raisonnablement l’information transmise. Voici un schéma théorique qui représenterai la méthode utilisée.

Schéma obfuscation passphrase Bitcoin via zk-SNARK

Afin d’améliorer l’obfuscation, je pourrai opérer des transactions assez éloignées les unes des autres (plusieurs jours, voir semaines). Ceci rendrait toute tentative de raprochement des transactions encore plus difficile.

Qu’en pensez-vous ? Avez-vous des suggestions pour améliorer encore cette idée ? N’hésitez pas à partager vos commentaires sur ce post 🙂