Retours sur un atelier ZeroNet

Comment contourner la censure grâce à un Web pair-à-pair ?

Mardi dernier se tenait une cryptoparty dans les locaux de l'INSA de Rennes.

L'évènement s'étant rempli au delà de toutes les espérances, on m'a proposé de venir y tenir un atelier, que j'ai proposé sur ZeroNet, un petit projet fort sympathique qui pourrait devenir une nouvelle manière de distribuer le Web, permettant notamment d'éviter la censure.

Avant toute autre chose, merci énormément à l'équipe de la bibliothèque de l'INSA pour l'organisation de cet évènement qui à une réelle portée politique.

Un peu d'histoire

Il me semble que Tim Bernes Lee (l'inventeur du Web) avait prévu le Web comme un protocole décentralisé. Chacun hébergerait ses données et les servirait aux autres, qui pourraient alors y accéder.

Avec ce fonctionnement, impossible alors d'accéder à des sites si leur auteur n'est pas en ligne. Qu'à cela ne tienne, on s'est mis à avoir des machines qui restent connectées au réseau 24 heures par jour. Et puis une machine ne suffisant plus, on a eu des fermes de machines dans des data centers etc afin de supporter les milliers d'utilisateurs des sites.

Un Web décentralisé

ZeroNet permet (entre autres) de répondre à ce problème en proposant une manière alternative de distribuer le Web, en pair à pair. Lors d'une visite d'un site:

  1. Vous contactez un tracker BitTorrent pour connaitre la liste des autres visiteurs du site (les pairs).
  2. Vous demandez aux pairs de vous donner les fichiers du site.
  3. Vous validez que les fichiers servis sont bien les bons (en vérifiant la signature attachée).

N'importe quel visiteur devient alors un pair, qui sert le site aux autres visiteurs.

Parmi les nombreux avantages de cette approche, je note particulièrement que:

  • Il est très difficile de censurer un site — Il est sur l'ensemble des machines des visiteurs.
  • Les attaques par fingerprinting sont impossibles: le navigateur Web se connecte à un serveur proxy local.
  • Vous détenez directement vos données et (par design) ne les donnez pas à des silos (Facebook, Google, etc.)

Si vous êtes interessés par une démonstration rapide, j'ai enregistré une vidéo de 10 minutes où je parle en anglais avec une voix très grave.

Atelier

Pour l'atelier, j'ai choisi de faire une présentation rapide du projet (j'ai traduit les slides anglais pour l'occasion — accès aux sources) avant d'installer ZeroNet sur les machines et de l'utiliser pour publier un site.

Partager sur le réseau local

Nous avons eu des soucis à cause du réseau (un peu congestionné) sur lequel les ports utilisés pour la discussion entre pairs étaient fermés. Il est bien sur possible de faire tourner le tout de manière indépendante du reste du réseau, mais je n'avais pas prévu le coup.

Voici donc comment faire pour contourner le souci:

  1. Installer et lancer un tracker BitTorrent (De manière surprenante, rien n'est packagé pour debian pour l'instant) J'ai choisi d'installer OpenTracker
  2. Ensuite lancer ZeroNet avec des options spécifiques.
$ python zeronet.py --trackers udp://localhost:6969 --ip_external 192.168.43.207
$ python zeronet.py --trackers udp://192.168.43.207:6969 --ip_external 192.168.43.172

Il est nécessaire de spécifier l'adresse IP externe que chaque nœud expose pour éviter qu'elle n'essaye d'aller la trouver par elle même: nous voulons l'adresse du réseau local, et non pas l'adresse internet.

La prochaine fois je tenterais de venir avec un HotSpot Wifi et un tracker BitTorrent dans la poche!

Questions / Réponses

Il y avait quelques questions intéressantes auxquelles je n'ai pas toujours su répondre sur le moment. Après quelques recherches, je rajoute des détails ici.

Torrent + Tor = brèche de sécu ?

Il me semblait avoir entendu parler de problèmes de dé-anonymisation lors de l'utilisation de BitTorrent par dessus Tor.

Dans certains cas, certains clients torrents (uTorrent, BitSpirit, etc) écrivent directement votre adresse IP dans l'information qui est envoyée au tracker et/ou aux autres pairs. — https://blog.torproject.org/blog/bittorrent-over-tor-isnt-good-idea

Ce n'est pas le cas de ZeroNet, ce qui évacue le souci.

ZeroMail, c'est lent non ?

Une des applications de démo, ZeroMail, propose un mécanisme qui permet de s'envoyer des messages chiffrés sur un réseau pair à pair. L'approche choisie est de chiffrer les messages avec la clé du destinataire et de le mettre dans un pot commun. Tout le monde essaye de déchiffrer tous les messages, mais ne peut déchiffrer que les siens.

Cela permet de ne pas fuiter de méta-données, à l'inverse de PGP.

Je n'ai en fait pas de réponse claire à donner à cette question: l'auteur de ZeroNet me disait que 10MB (la limite de taille d'un site, par défaut) correspondait à beaucoup de place pour stocker des messages, et qu'il était possible de supprimer les anciens messages une fois qu'ils sont lus par exemple.

Une autre solution à laquelle je pensait était de créer un ZeroSite pour chaque récipient, mais on connait à ce moment là le nombre de messages qu'un utilisateur peut recevoir.

Je vois plusieurs problèmes avec le design actuel de ZeroMail (il me semble assez facile d'y faire un déni de service par exemple). A creuser.

Comment héberger des très gros sites ?

Par exemple, comment faire pour héberger Wikipedia ?

Il semble que la meilleure manière de faire serait de séparer Wikipedia en un tas de petites ressources (par catégorie par ex.). Les gros médias pourraient être considérés optionnels (et donc téléchargés uniquement à la demande)

Est-ce qu'on à vraiment besoin d'un tracker ?

Le support d'une DHT est souhaité, mais pour l'instant pas encore implémenté. L'utilisation de la DHT BitTorrent n'est pas une option puisque Tor ne supporte pas UDP.