Table des matières

IPFS

Présentation

IPFS (InterPlanetary File System) est un P2P sous licence libre qui vise à proposer un web décentralisé, à l'instar de ZeroNet. Contrairement à I2P ou Freenet, IPFS n'est pas anonymisant, mais des solutions pourraient être apportées, notamment par un couplage avec Tor. Cette ambition orientée «web» n'interdit pas de s'en servir pour faire du partage de fichiers potentiellement volumineux.

Pour arriver à ses fins, IPFS réutilise des technologies à succès et s'en inspire ou les combine : Git, BitTorrent, Kademlia, Bitcoin, SFS1).

IPFS est développé par Protocol Labs, une start-up de San Francisco pour qui les protocoles qui ont permis de batir le réseau internet doivent être libres et ouverts. Il s'agit naturellement d'un logiciel libre, l'implémentation de référence est écrite en langage Go et est disponible pour la plupart des systèmes d'exploitation (Linux, Mac OS X, Windows). La boite développe aussi FileCoin, une solution de stockage avec rémunération, ainsi que libp2p, qui est la couche réseau utilisée par IPFS, IPLD, qui décrit le modèle de données pour un web décentralisé, et Multiformats.

IPFS cherche vraiment à remplacer (ou au moins trouver un modèle alternatif) au web centralisé essentiellement basé sur HTTP(S). Les adresses utilisées dans ce web décentralisé pointent non pas vers un emplacement (comme l'adresse IP d'un hôte) mais vers un contenu, identifié par un hash appellé cid (comme Content Identifier). Ce contenu peut être hébergé de façon décentralisée, comme avec BitTorrent, ce qui permet à l'auteur de ce contenu de ne pas avoir à l'héberger lui-même. La réplication des données confère au réseau une résilience et un rôle de protection contre la censure.

On peut naviguer sur IPFS avec un navigateur web ordinaire. Celui-ci se branche sur le démon IPFS en tâche de fond.

Fin 2018, le projet poursuit son développement de façon soutenue.

Fonctionnement

Authentification

Si IPFS souhaite remplacer le web, il doit aussi remplacer HTTPS. Ca tombe bien, le protocole https est embourbé dans un vieux problème qui est celui des certificats et que IPFS pourrait évacuer. La confiance que l'on peut avoir dans une connexion sécurisée par https dépend d'un certificat, qui lui-même dépend des Autorités de Certifications (CA) embarquées dans votre système d'exploitation et dans votre navigateur. Ce système est réputé imparfait pour son approche top-down : le privilège d'être une autorité de certification n'est accordé qu'à certaines entreprises ou organismes, qui ont le pouvoir de certifier que les clés utilisées durant le chiffrement appartiennent bien au site consulté. Ce service de certificats a longtemps été monnayé, et cause de désagréments pour les personnes hébergeant des sites préférant s'en dispenser. L'arrivée des certificats Let's encrypt a permis de rendre plus accessible ce système, mais le modèle reste imparfait car les certificats restent manipulables par les nombreuses autorités dont il est illusoire de penser qu'elles sont toutes dignes de confiance. Ces autorités de certification ont donc un rôle ambigü, qui peuvent en faire par exemple des alliés privilégiés de la surveillance d'État rendue publique par Edward Snowden.

Dans les initiatives de web décentralisé, d'autres modèles cryptographiques sont envisagés.

Adressage et intégrité des ressources

D'abord, les ressources que vous consultez sont identifiées, on l'a dit, par des cid, qui permettent de vérifier que le résultat qui vous est servi est bien celui correspondant au hash (principe de l'intégrité). Le contenu ne sera donc pas modifié malintentionellement durant son voyage dans le réseau.

IPFS utilise la DHT (merkle tree).

L'utilisation de cid a plusieurs inconvénients.

D'abord, les adresses (URIs) utilisées sur ces réseaux sont alambiquées et très difficiles à retenir, puisqu'il s'agit de hashs.

Un exemple : /ipfs/QmZpc3HvfjEXvLWGQPWbHk3AjD5j8NEN4gmFN8Jmrd5g83/cs/ada.png …

… auquel vous pouvez accéder :

D'autre part, la ressource sur laquelle pointe cette adresse ne peut pas être modifiée ni mise à jour. Si j'ai envie de rajouter une moustache à Ada, je devrai vous communiquer un nouveau lien. Ce n'est pas très pratique si mes envies de dessiner sont fréquentes. Cet inconvénient a deux solutions proposées : DNSLink, et IPNS (voir plus bas).

Stockage des ressources

IPFS utilise une blockchain pour stoquer les liens IPFS. Les données en elles-mêmes ne sont donc pas stockées dans la blockchain.

Comme dans un essaim BitTorrent, les données sont échangées entre les pairs, donc si vous partagez quelque chose, et que d'autres personnes le récupèrent, elles deviendront seeders à leur tour, ce qui permet aux ressources de rester accessibles même après que vous vous soyiez déconnecté du réseau. Plus exactement, cela maximise les chances qu'elle soit en ligne.

Plusieurs mécanismes sont proposés pour offrir un type de redondance.

D'abord, il est possible d'organiser plusieurs noeuds ipfs en cluster. Une instance maître (par exemple, votre ordinateur portable) dispose des fichiers et effectue une mise en partage initiale. Les données seront alors répliquées selon vos souhaits parmi les autres serveurs de votre cluster (comme par exemple un ou plusieurs serveurs distants accessibles 24h/24).

Une autre façon d'influer sur la permenance d'une donnée est d'utiliser le «pinning» sur une donnée qui se situe dans votre cache de données. Votre noeud dispose en effet d'un stockage limité pour stocker les données que vous sollicitez. Si ce cache est rempli, il supprimera les données anciennes. Le pin sert donc à indiquer qu'une ressource ne doit pas être supprimée du cache. Le pinning peut être sollicité auprès de noeuds autres que les votres, mais il faut pour cela passer par un mécanisme extérieur à IPFS, ce type de service est toutefois envisagé dans la doc, et des personnes se mettent en place avec leurs propres conditions, souvent en lien avec un système de monétarisation, comme ce site ou bien cette personne sur twitter. L'hébergement redevient un service payant, bien que pas nécessairement : libre à la communauté de choisir ce qu'elle héberge, et de favoriser tel ou tel contenu.

IPFS ne se charge que de calculer les hashs des fichiers mis en partage. Comme avec BitTorrent, si le contenu de l'un de ces fichiers change, le hash sera altéré. Le problème est alors que les noeuds qui ne connaissent que l'ancien hash ne seront pas alertés de cette modification.

Nous étions habitués avec Bittorrent à ce que, une fois la ressource partagée, celle-ci n'évolue plus, et que tout changement soit republié en tant que nouveau torrent. IPFS dispose de mécanismes donnant une réponse à ce problème, typiquement via un niveau d'indirection.

Les deux mécanismes actuellement proposés sont :

Si vous disposez d'un nom de domaine, vous pouvez vous en servir pour pointer vers une ressource IPFS.

IPFS utilise pour cela les registres TXT.

Ci-dessous un exemple de réponse DNS pour le site ipfs.io, lui-même hébergé sur IPFS, disposant d'un sous-domaine “docs” dont le registre dnslink pointe vers une ressource IPFS particulière :

$ dig +noall +answer TXT _dnslink.docs.ipfs.io
_dnslink.docs.ipfs.io.	1800	IN	TXT	"dnslink=/ipfs/QmV29UU6pxUD1jkcY6oBfYNw9zi15LvrrHyESg35PVtKFd"

IPNS

IPNS (Inter Planetary Naming System) est un système de signature par chiffrement asymétrique permettant d'établir qu'une ressource ne peut être mise à jour que par l'entité qui possède la clé privée.

Un lien IPNS se présente comme un nouveau hash (une clé publique) qui cette fois-ci se réfère à la dernière version d'une ressource, qui peut ainsi évoluer.

La personne disposant de la clé privée correspondant à la clé IPNS pourra mettre à jour le registre IPNS en signant les données.

Conclusion

Ces deux mécanismes permettent à la fois d'envisager IPFS en tant que web décentralisé, mais aussi de pallier à un problème fréquent avec Bittorrent qui est le caractère figé des ressources.

IPFS prétend également jouer le rôle de CDN (Content Delivery Network). Dans le principe cela signifie qu'une ressource sera récupérée depuis les noeuds proches du votre, plutôt que ceux qui sont éloignés. Il faudrait toutefois vérifier en quoi techniquement cette appellation est pertinente (ou plus pertinente qu'elle ne s'appliquerait déjà au sein du réseau BitTorrent, par exemple).

Passerelle HTTP

Pour consulter une ressource sur IPFS, vous pouvez bien sûr installer IPFS et envoyer une requête pour la récupérer, mais vous pouvez aussi utiliser votre navigateur web et vous rendre sur le site d'une passerelle pour y solliciter la ressource que vous désirez.

Il vous suffit d'indiquer le hash de la ressource à laquelle vous désirez accéder pour qu'elle vous soit servie par HTTP, directement dans votre navigateur.

Cloudflare propose une telle passerelle (et on ne vous en recommande pas l'usage car cet acteur s'accapare un lourd pouvoir d'observation du traffic internet), mais d'autres existent.

Ce type de passerelle est une commodité, et a l'avantage de rendre disponible une ressource pour des personnes non familières à IPFS, qui n'ont pas besoin d'installer ou de comprendre le logiciel.

Usages

L'installation de IPFS est assez simple, l'usage repose principalement sur la ligne de commande et s'inspire de la syntaxe de git.

Si l'anglais vous convient, vous pouvez regarder cette video de démonstration d'IPFS sur Youtube.

Exemple : pour partager toutes les données situées dans le répertoire courant :

ipfs add -r .

Voir aussi: la doc officielle

Amorcer votre noeud IPFS

Vous devriez avant toute chose commencer par amorcer ipfs.

ipfs init

Suivez le tutorial intégré à ipfs.

Vous devrez pouvoir lancer le démon ipfs pour passer en mode connecté, puis vous pouvez interroger la liste des noeuds accessibles.

ipfs daemon
ipfs swarm peers

Accéder à l'interface web

Il suffit de se rendre avec votre navigateur sur http://localhost:5001/webui.

Projets utilisant IPFS

Les possibilités d'IPFS sont encore en cours d'exploration, d'autres outils en font des usages plus ciblés.

Une liste de ces projets est illustrée dans la section «Awesome» du site d'IPFS.

On y trouve des choses comme :

Autre initiative, Textile est une collection d'outils permettant l'usage d'IPFS dans votre application (si j'ai bien compris).

Liens

type:réseau-p2p type:client-p2p licence:libre réseau:ipfs système:windows système:mac système:linux

1)
Self-Certified File System : un système de fichiers réseau similaire à NFS, mais dont les chemins d'accès aux fichiers contiennent la clé publique de la machine, permettant de s'assurer de leur authenticité