ĞMixer repose sur trois technologies qui lui sont antérieures : le mixage monétaire, le routage en oignons et la toile de confiance. Cette page a pour objet de permettre à tout le monde de comprendre leur fonctionnement.
Les mixeurs monétaires sont apparus en grand nombre avec le Bitcoin, sous l'appellation bitcoin mixer. Les transactions effectuées en bitcoin n'étant pas complètement anonymes, ces services permettent aux utilisateurs de rendre anonyme une somme d'argent.
Imaginons deux protagonistes, Alice et Bob. Alice veut envoyer secrètement 10 U à Bob (disons que U est une unité monétaire).
Le protocole informatique de la monnaie impose que l'émetteur et le récepteur d'une transaction soient connus. Si la transaction est faite directement, on peut retracer la transaction :
Pour empêcher de faire le lien entre ces deux comptes, on peut donc passer par un intermédiaire. Cet intermédiaire est le mixeur. Si Alice veut envoyer secrètement de l'argent à Bob, elle enverra son argent au mixeur et lui dira de l'envoyer à Bob.
De cette manière, un observateur extérieur a plus de mal à faire le lien entre nos deux amis. Cependant, en observant les entrées et sorties d'argent du mixeur, on peut facilement reconstruire les transactions. Il faut donc que le mixeur passe plusieurs transactions à la fois :
De cette manière, un espion voulant savoir qui a envoyé 10 U à Bob ne peut distinguer Alice, Dave et Elza, qui ont la même probabilité d'être à la source de cette transaction.
Le schéma précédent rend anonyme la transaction, mais seulement à un observateur extérieur. Le mixeur, lui, sait tout. Ses clients sont donc à sa merci, car il peut vendre leurs données à leur insu.
Pour résoudre ce problème, qui est celui des mixeurs de bitcoin actuels, nous avons besoin de décentraliser, nous allons voir comment.
La technologie du routage en oignons (onion routing dans la langue d'Engels) a été développée pour le projet Tor : elle permet actuellement de communiquer sur Internet de manière anonyme et tout à fait décentralisée. Elle permet en outre d'échapper à la censure.
Avant de s'attaquer à cette notion, on va expliquer les bases de la cryptographie.
La cryptographie symétrique, c'est quand on rend secret un message (on dit qu'on le chiffre) avec une clé (comme un mot de passe), et qu'il ne peut être déchiffré qu'avec ce même mot de passe. Le mot de passe est donc un secret partagé entre les participants. L'inconvénient, c'est qu'ils doivent se passer le mot de passe avant de communiquer, par un moyen sécurisé, ce qui parfois est impossible.
On a donc recours à la cryptographie asymétrique. Ici, chaque participant a une clé privée, en gros son mot de passe personnel, et une clé publique, qui peut être publiée sans danger. Il est possible de chiffrer un message avec la clé publique d'une personne, ainsi le message ne sera lisible qu'une fois déchiffré par la clé privée de cette personne. Il n'y a donc pas besoin de secret partagé, et quand même, c'est plus pratique.
L'utilisation du routage en oignons nécessite l'existence d'un réseau de serveurs (appelés nœuds).
Mettons que je veuille envoyer un message à un serveur distant, sans que lui ni mon gouvernement ne me reconnaisse.
Je vais tout d'abord trouver 3 nœuds au hasard dans le réseau, puis les numéroter 1, 2 et 3.
Ensuite, je vais ajouter à mon message l'adresse du serveur que je veux contacter, et chiffrer mon message avec la clé publique du nœud 3. J'ajoute l'adresse du nœud 3 à côté et je chiffre le tout avec la clé publique du nœud 2. Et je recommence pour le nœud 1. J'obtiens un oignon constitué de 3 couches, avec en son cœur le message original.
J'envoie l'oignon au nœud 1, qui déchiffre la première couche, et ne pouvant pas aller plus loin, il envoie ce qui reste au nœud 2 dont je lui ai donné l'adresse. Le nœud 2 fait de même, idem pour le 3. Ce dernier envoie le message au destinataire, et la réponse de celui-ci suit le même protocole.
Avec un tel système, chaque nœud ne connaît que les deux autres autour de lui. Aucun ne peut reconstituer la chaîne complète, je suis donc anonyme, et mon message est protégé (je peux aussi le chiffrer pour mon destinataire, afin que le dernier nœud ne puisse le lire).
La toile de confiance (TdC en abrégé, web of trust ou WoT en anglais) est un outil permettant de prouver qu'une clé publique appartient effectivement à une identité donnée. On peut donc être quasiment certain qu'on envoie un message à la bonne personne, chiffré avec la bonne clé.
Il y a un truc que je ne vous ai pas dit à propos de la cryptographie asymétrique, c'est qu'en plus de chiffrer, elle permet de signer. C'est-à-dire qu'en appliquant ma propre clé privée sur un document, on peut être sûr grâce à ma clé publique que j'ai effectivement signé ce document.
Nous utiliserons aussi une propriété de la toile de confiance de Duniter, qui est que chaque identité est liée à une unique personne vivante, et qu'une personne vivante ne peut avoir plusieurs identités.
Une TdC fonctionne sur un principe simple : pour certifier l'authenticité d'une identité, je signe sa clé publique, et publie ma signature. Cela revient à dire publiquement "Oyez, je sais que cette clé publique est celle de cette personne.". Une fois qu'une identité a reçu plusieurs certifications, on peut être à peu près sûr de son authenticité, même sans la connaître.
La TdC de Duniter a une règle supplémentaire, qui est qu'on ne doit certifier que les personnes vivantes, possédant une seule identité et ayant compris les implications du fait d'avoir une identité dans cette TdC.
Nous sommes partis du mixeur de bitcoin qui présentait le fâcheux inconvénient d'être centralisé, et allons y ajouter les technologies du routage en oignons et de la toile de confiance.
Au lieu de passer par un seul mixeur, nous pouvons utiliser le schéma du réseau Tor, c'est-à-dire faire passer la transaction par 3 nœuds différents, et mettre l'adresse du destinataire au cœur de l'oignon.
Toutefois, cela crée un nouveau problème : un nœud peut voler l'argent qui lui est confié. Il faut donc un nouvel ingrédient...
Avant de confier de l'argent au réseau, j'envoie l'oignon contenant l'adresse aux nœuds que j'ai choisis, et ceux-ci me répondent chacun par une promesse signée, disant que si ils reçoivent ma transaction, ils s'engagent à la renvoyer dans un intervalle de temps donné, à l'adresse donnée. Si leurs promesses me conviennent, alors j'envoie l'argent.
Si jamais un nœud n'honore pas sa promesse, je peux la publier, et tout le monde pourra vérifier l'authenticité de sa signature. Si celle-ci est authentique, et que la promesse n'a réellement pas été honorée (tout le monde peut le vérifier dans l'historique public des transactions), alors les utilisateurs du réseau, ainsi que les nœuds eux-mêmes pourront se dire qu'ils refuseront toute transaction impliquant ce nœud fautif.
La clé publique du nœud étant liée à la réelle identité de son propriétaire, le vol est fortement découragé.