Traduction d'un billet de blog paru sur:
http://joeyh.name/blog/entry/p2p_dreams/Dans l'un des bons passages du très inégal «
Lo and Behold: Reveries of the Connected World», Werner Herzog demande à ses interviewés quel est l'internet dont ils rêvent, s'ils en ont rêvé.
La meilleure réponse qu'il obtient peut se résumer ainsi: L'internet d'avant rêvait un rêve de World Wide Web. Il rêvait de noeuds qui étaient serveurs, et d'autres clients. Et ce rêve est devenu réalité, car c'est l'essence-même d'Internet.
Il y a 3 ans, il semblait qu'il pouvait y avoir un autre rêve en train de se développer suite aux révélations de Snowden, de dissoudre cette distinction entre clients et serveurs, de se connecter en pair-à-pair par des adresses qui sont aussi des clés de chiffrement publiques, de façon à ce que l'authentification, le chiffrement, et l'autorisation soient implémentés par défaut.
Telehash est une tentative ambitieuse visant cette fin, d'autres sont snow, cjdns, i2p, etc. Jusque là, aucune ne semble s'être développée en un réseau de vaste ampleur, bien qu'ils puissent encore y parvenir. Il y a de nombreux défis techniques dûs au rêve/cauchemar actuel d'internet, où les pairs situés au bord ont de nombreuses barrières pour se connecter aux autres pairs.
Mais, un projet a conçu quelque chose de similaire à ce nouveau rêve, presque comme un effet de bord à son but principal: les services onion de Tor.
J'aurais aimé utiliser une telle chose dans git-annex, pour le partage pair-à-pair et la synchronisation des dépots de git-annex. Le 13 novembre, j'ai commencé à construire ça, en utilisant Tor, et je le délivre dans ce billet de blog.
La gestion de Tor par git-annex remplace le vieux hack qui consistait à faire passer le protocole Git dans un tunnel XMPP. Ce hack n'était pas fiable (il avait besoin de TCP par dessus la couche XMPP) mais pire, le serveur XMPP pouvait voir toutes les données transférées. Et, il y a moins de gros serveurs XMPP dernièrement, donc moins d'utilisateurs pouvaient l'utiliser. Si vous utilisiez XMPP avec git-annex, vous devrez opter soit pour Tor, soit pour un serveur accessible par SSH.
Maintenant
git-annex peut servir un dépot en tant que service onion de Tor, qui peut être accédé comme un dépot git distant, en utilisant une URL comme tor-annex::tungqmfb62z3qirc.onion:42913. Toutes les commandes courantes de git, ainsi que les commandes git-annex, peuvent être utilisées avec un tel serveur distant.
Tor a de nombreux objectifs pour protéger l'anonymat et la confidentialité. Mais les points importants pour ce projet sont juste qu'il dispose d'un chiffrement bout-à-bout, avec des adresses qui sont des clés publiques, et qui permet les connexions P2P. Construire un système d'échange de fichiers anonymes par dessus Tor n'est pas mon objectif -- si vous souhaitez cela, vous ne voudriez probablement pas échanger les historiques git qui enregistrent chaque modification de fichier, ni exposer votre identité réelle par défaut.
Construire cela n'a pas été sans difficultés. Les services onion de Tor étaient initialement prévus pour faire tourner des sites web cachés, pas pour connecter des pairs à d'autres pairs, ou ce genre de trucs..
Tor ne répond pas au besoin utilisateur de paramétrer de nombreux services Onion. Root doit éditer le fichier torrc, ou bien le port de contrôle Tor peut être utilisé pour demander à en paramétrer un. Mais, le port de contrôle n'est pas activé par défaut, donc vous devez là aussi passer en root pour l'activer. Aussi, il est difficile de trouver un endroit où mettre le fichier de socket unix du service caché qui soit modifiable par un utilisateur autre que root. Donc j'ai dû programmer en tenant compte de ça, avec un git annex enable-tor qui devient root et ajuste tout cela à votre place.
Un détail intéressant concernant l'implémentation du protocole P2P dans git-annex est qu'il utilise deux monades Free pour construire les actions. Il y a une monade Net qui peut être utilisée pour envoyer et recevoir des messages de protocole, et une monade Local qui autorise uniquement les modifications nécessaires des fichiers sur le disque. Les interpréteurs d'actions de la monade Free peuvent choisir exactement quelles actions autoriser pour des raisons de sécurité.
Par exemple, avant qu'un pair ne soit authentifié, le protocole P2P tourne dans un interpréteur qui refuse d'initier une action Local quelle qu'elle soit. D'autres interpréteurs pour la monade Net peuvent être utilisés pour gérer d'autres transports réseau que Tor.
Quand deux pairs sont connectés via Tor, chacun sait qu'il communique avec le propriétaire d'une adresse onion particulière, mais les autres pairs ne savent rien de qui communique avec ce dernier, par conception. Cela rend l'authentification plus difficile qu'elle ne le serait dans un système P2P conçu avec une architecture comme Telehash. Donc git-annex fait sa propre authentification par dessus Tor.
Avec l'authentification, les utilisateurs devraient échanger des adresses absurdement longues (plus de 150 caractères) pour se connecter à leurs dépots. Un truc très pratique avec XMPP était que l'utilisateur disposait de connexions aux comptes de leurs amis, et qu'il était donc facile de partager avec eux. Échanger de longues adresses est trop compliqué.
C'est là que
Magic Wormhole sauve ma journée. C'est une façon très élégante de mettre en relation 2 pairs, et les utilisateurs doivent seulement échanger une courte phrase codée, comme "2-mango-delight", qui ne peut être utilisée qu'une seule fois. Magic Wormhole fait quelques concessions sur la sécurité pour cette simplicité. Il est vulnérable aux attaques DoS, et sa résistance aux attaques MITM peut être améliorée. Mais je suis content qu'il soit arrivé à pic.
Alors, cela exige juste d'installer Tor et Magic Wormhole, de lancer 2 commandes git-annex, et d'échanger une phrase courte avec un ami, peut-être via le téléphone ou un email chiffré, pour que vos dépots git-annex soient connectés et synchronisés via Tor. Consultez la documentation pour les détails. Aussi, l'application web git-annex permet de mettre en place la même chose par de simples clicks.
Le blog du projet Tor a pendant décembre présenté toute une série de projets qui utilisaient Tor. Considérez que ceci en est un ajout tardif, en bonus.
![;) ;)](./images/smilies/p2pfr_clin.gif)
J'espère que les services onion de Tor continueront de se développer pour les rendre plus faciles d'usage dans des systèmes P2P. On peut encore rêver d'un internet meilleur.
Site de git-annex :
https://git-annex.branchable.com/