blog.notmyidea.org/retours-sur-un-atelier-zeronet.html

164 lines
No EOL
11 KiB
HTML

<!DOCTYPE html>
<html lang="fr">
<head>
<title>
Retours sur un atelier&nbsp;ZeroNet - Alexis Métaireau </title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="https://blog.notmyidea.org/theme/css/main.css?v2"
type="text/css" />
<link href="https://blog.notmyidea.org/feeds/all.atom.xml"
type="application/atom+xml"
rel="alternate"
title="Alexis Métaireau ATOM Feed" />
</head>
<body>
<div id="content">
<section id="links">
<ul>
<li>
<a class="main" href="/">Alexis Métaireau</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/journal/index.html">Journal</a>
</li>
<li>
<a class="selected"
href="https://blog.notmyidea.org/code/">Code, etc.</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/weeknotes/">Notes hebdo</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/lectures/">Lectures</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/projets.html">Projets</a>
</li>
</ul>
</section>
<header>
<h1 class="post-title">Retours sur un atelier&nbsp;ZeroNet</h1>
<p>
<em>Comment contourner la censure grâce à un Web pair-à-pair ?</em>
</p>
<time datetime="2016-03-17T00:00:00+01:00">17 mars 2016</time>
</header>
<article>
<p>Mardi dernier se tenait <a href="http://biblio.insa-rennes.fr/crypto">une <em>cryptoparty</em></a> dans les locaux de l&#8217;<span class="caps">INSA</span> de&nbsp;Rennes.</p>
<p>L&#8217;évènement s&#8217;étant rempli au delà de toutes les espérances, on m&#8217;a proposé de
venir y tenir un atelier, que j&#8217;ai proposé sur <a href="https://zeronet.io">ZeroNet</a>, un
petit projet fort sympathique qui pourrait devenir une nouvelle manière de
distribuer le Web, permettant notamment d&#8217;éviter la&nbsp;censure.</p>
<p>Avant toute autre chose, merci énormément à l&#8217;équipe de la bibliothèque de
l&#8217;<span class="caps">INSA</span> pour l&#8217;organisation de cet évènement qui à une réelle portée&nbsp;politique.</p>
<h2 id="un-peu-dhistoire">Un peu&nbsp;d&#8217;histoire</h2>
<p>Il me semble que Tim Bernes Lee (l&#8217;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&nbsp;accéder.</p>
<p>Avec ce fonctionnement, impossible alors d&#8217;accéder à des sites si leur auteur
n&#8217;est pas en ligne. Qu&#8217;à cela ne tienne, on s&#8217;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 <em>data centers</em> etc afin
de supporter les milliers d&#8217;utilisateurs des&nbsp;sites.</p>
<h2 id="un-web-decentralise">Un Web&nbsp;décentralisé</h2>
<p>ZeroNet permet (entre autres) de répondre à ce problème en proposant une manière alternative de <strong>distribuer le Web</strong>, en pair à pair. Lors d&#8217;une visite d&#8217;un&nbsp;site:</p>
<ol>
<li>Vous contactez un <em>tracker</em> BitTorrent pour connaitre la liste des autres
visiteurs du site (les <em>pairs</em>).</li>
<li>Vous demandez aux <em>pairs</em> de vous donner les fichiers du&nbsp;site.</li>
<li>Vous validez que les fichiers servis sont bien les bons (en vérifiant la
signature&nbsp;attachée).</li>
</ol>
<p>N&#8217;importe quel visiteur devient alors un <em>pair</em>, qui sert le site aux autres&nbsp;visiteurs.</p>
<p>Parmi les nombreux avantages de cette approche, je note particulièrement&nbsp;que:</p>
<ul>
<li>Il est très difficile de censurer un site — Il est sur l&#8217;ensemble des machines
des&nbsp;visiteurs.</li>
<li>Les attaques par <em>fingerprinting</em> sont impossibles: le navigateur Web se
connecte à un serveur <em>proxy</em>&nbsp;local.</li>
<li>Vous détenez directement vos données et (par design) ne les donnez pas à des
silos (Facebook, Google,&nbsp;etc.)</li>
</ul>
<p>Si vous êtes interessés par une démonstration rapide, j&#8217;ai enregistré une vidéo
de 10 minutes où je parle en anglais avec une voix très&nbsp;grave.</p>
<video controls="" src="http://alexis.notmyidea.org/zeronet.webm" width=800></video>
<h2 id="atelier">Atelier</h2>
<p>Pour l&#8217;atelier, j&#8217;ai choisi de faire une présentation rapide du projet (<a href="https://blog.notmyidea.org/docs/zeronet-presentation-fr.pdf">j&#8217;ai
traduit les slides</a> anglais
pour l&#8217;occasion — <a href="https://docs.google.com/presentation/d/158C_-V1ueNaaKHMBMBgGOVhunb9xrXzB3hC_g1N53c0/edit?usp=sharing">accès aux sources</a>)
avant d&#8217;installer ZeroNet sur les machines et de l&#8217;utiliser pour publier un&nbsp;site.</p>
<h3 id="partager-sur-le-reseau-local">Partager sur le réseau&nbsp;local</h3>
<p>Nous avons eu des soucis à cause du réseau (un peu congestionné) sur lequel
les ports utilisés pour la discussion entre <em>pairs</em> é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&#8217;avais pas prévu le&nbsp;coup.</p>
<p>Voici donc comment faire pour contourner le&nbsp;souci:</p>
<ol>
<li>Installer et lancer un <em>tracker</em> BitTorrent (De manière surprenante,
<a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=685575">rien n&#8217;est packagé pour debian pour l&#8217;instant</a>)
J&#8217;ai choisi d&#8217;installer <a href="http://erdgeist.org/arts/software/opentracker/#build-instructions">OpenTracker</a></li>
<li>Ensuite lancer ZeroNet avec des options&nbsp;spécifiques.</li>
</ol>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>python<span class="w"> </span>zeronet.py<span class="w"> </span>--trackers<span class="w"> </span>udp://localhost:6969<span class="w"> </span>--ip_external<span class="w"> </span><span class="m">192</span>.168.43.207
$<span class="w"> </span>python<span class="w"> </span>zeronet.py<span class="w"> </span>--trackers<span class="w"> </span>udp://192.168.43.207:6969<span class="w"> </span>--ip_external<span class="w"> </span><span class="m">192</span>.168.43.172
</code></pre></div>
<p>Il est nécessaire de spécifier l&#8217;adresse <span class="caps">IP</span> externe que chaque nœud expose pour
éviter qu&#8217;elle n&#8217;essaye d&#8217;aller la trouver par elle même: nous voulons l&#8217;adresse
du réseau local, et non pas l&#8217;adresse&nbsp;internet.</p>
<p>La prochaine fois je tenterais de venir avec un HotSpot Wifi et un tracker
BitTorrent dans la&nbsp;poche!</p>
<h2 id="questions-reponses">Questions /&nbsp;Réponses</h2>
<p>Il y avait quelques questions intéressantes auxquelles je n&#8217;ai pas toujours su
répondre sur le moment. Après quelques recherches, je rajoute des détails&nbsp;ici.</p>
<h3 id="torrent-tor-breche-de-secu">Torrent + Tor = brèche de sécu&nbsp;?</h3>
<p>Il me semblait avoir entendu parler de problèmes de <em>dé-anonymisation</em>
<a href="https://hal.inria.fr/file/index/docid/471556/filename/TorBT.pdf">lors de l&#8217;utilisation de BitTorrent par dessus Tor</a>.</p>
<blockquote>
<p>Dans certains cas, certains clients torrents (uTorrent, BitSpirit, etc)
écrivent directement votre adresse <span class="caps">IP</span> dans l&#8217;information qui est envoyée
au tracker et/ou aux autres pairs.
&nbsp;https://blog.torproject.org/blog/bittorrent-over-tor-isnt-good-idea</p>
</blockquote>
<p><a href="https://github.com/HelloZeroNet/ZeroNet/issues/274">Ce n&#8217;est pas le cas de ZeroNet</a>, ce qui évacue le&nbsp;souci.</p>
<h3 id="zeromail-cest-lent-non">ZeroMail, c&#8217;est lent non&nbsp;?</h3>
<p>Une des applications de démo, <em>ZeroMail</em>, propose un mécanisme qui permet de
s&#8217;envoyer des messages chiffrés sur un réseau pair à pair. L&#8217;approche choisie
est de chiffrer les messages avec la clé du destinataire et de le mettre dans
un <em>pot commun</em>. Tout le monde essaye de déchiffrer tous les messages, mais ne
peut déchiffrer que les&nbsp;siens.</p>
<p>Cela permet de ne <strong>pas</strong> fuiter de méta-données, <a href="https://blog.notmyidea.org/les-problemes-de-pgp.html">à l&#8217;inverse de <span class="caps">PGP</span></a>.</p>
<p>Je n&#8217;ai en fait pas de réponse claire à donner à cette question: l&#8217;auteur de
ZeroNet me disait que <span class="caps">10MB</span> (la limite de taille d&#8217;un site, par défaut)
correspondait à beaucoup de place pour stocker des messages, et qu&#8217;il était
possible de supprimer les anciens messages une fois qu&#8217;ils sont lus par&nbsp;exemple.</p>
<p>Une autre solution à laquelle je pensait était de créer un <em>ZeroSite</em> pour
chaque récipient, mais on connait à ce moment là le nombre de messages qu&#8217;un
utilisateur peut&nbsp;recevoir.</p>
<p>Je vois plusieurs problèmes avec le design actuel de ZeroMail (il me semble
assez facile d&#8217;y faire un déni de service par exemple). A&nbsp;creuser.</p>
<h3 id="comment-heberger-des-tres-gros-sites">Comment héberger des très gros sites&nbsp;?</h3>
<p>Par exemple, comment faire pour héberger Wikipedia&nbsp;?</p>
<p>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&nbsp;demande)</p>
<h3 id="est-ce-quon-a-vraiment-besoin-dun-tracker">Est-ce qu&#8217;on à vraiment besoin d&#8217;un tracker&nbsp;?</h3>
<p>Le support d&#8217;une <span class="caps">DHT</span> <a href="https://github.com/HelloZeroNet/ZeroNet/issues/57">est souhaité</a>,
mais pour l&#8217;instant pas encore implémenté. L&#8217;utilisation de la <span class="caps">DHT</span> BitTorrent
n&#8217;est pas une option puisque <a href="https://github.com/HelloZeroNet/ZeroNet/issues/57">Tor ne supporte pas <span class="caps">UDP</span></a>.</p>
</article>
<footer>
<a id="feed" href="/feeds/all.atom.xml">
<img alt="RSS Logo" src="/theme/rss.svg" />
</a>
</footer>
</div>
</body>
</html>