InterPlanetary File System

protocole pair à pair de distribution de contenu adressable par hypermédia

Le système de fichier interplanétaire (InterPlanetary File System (IPFS)), est un protocole pair à pair de distribution de contenu adressable par hypermédia, conçu à l'origine par Juan Benet[2]. L'implémentation principale d'IPFS est un logiciel libre[3] écrit en go.

IPFS
Description de l'image IPFS logo.png.

Informations
Créateur Juan Benet (en)Voir et modifier les données sur Wikidata
Développé par Protocol Labs
Dernière version 0.32.1 ()[1]Voir et modifier les données sur Wikidata
Dépôt github.com/ipfs/kuboVoir et modifier les données sur Wikidata
Écrit en Go
Système d'exploitation FreeBSD, Linux, macOS et Microsoft WindowsVoir et modifier les données sur Wikidata
Type Protocole réseau
Système de fichiers
Hypermedia distribution protocol (d)
Réseau de diffusion de contenuVoir et modifier les données sur Wikidata
Licence Licence MITVoir et modifier les données sur Wikidata
Site web ipfs.techVoir et modifier les données sur Wikidata

L'adjectif « interplanétaire » dans le nom évoque l'aspiration initiale du projet à pouvoir fonctionner de façon suffisamment décentralisée pour surmonter des difficultés liées à un morcellement du réseau même sur des distances astronomiques.

Description

modifier

IPFS est un système distribué de fichiers pair à pair qui ne dépend pas de serveurs centralisés. Son but est de connecter un ensemble d'équipements informatiques avec le même système de fichiers. D'une certaine manière IPFS est similaire au World Wide Web, à la différence qu'il peut être vu comme un essaim (Swarm) BitTorrent unique, qui échange des objets au sein d'un dépôt Git.

En d'autres termes, IPFS fournit un modèle de stockage par blocs adressable par contenu de haute capacité, utilisant des hyperliens pour l'accès. Ceci forme un graphe orienté acyclique de Merkle généralisé[4]. IPFS combine une table de hachage, un échange de blocs encouragé et un espace de noms auto-certifié. IPFS n'a pas de point unique de défaillance et les nœuds n'ont pas besoin de se faire mutuellement confiance[4].

Le système de fichiers peut être accédé de différentes manières, notamment via FUSE ou à travers HTTP. Il est possible d'ajouter un fichier local au système de fichier IPFS, le rendant de ce fait accessible au reste du monde. Les fichiers sont identifiés grâce à leur hash, permettant l'utilisation d'une mémoire cache, et distribués via Bitswap, une généralisation du protocole BitTorrent[5]. Il y combine également la table de hachage distribuée, (THD ou DHT) Kademlia[6], le système de contrôle de version Git et le système de fichier auto-certifiant (Self-certifying File System (en), SFS)[7]. Les utilisateurs lisant du contenu contribuent à servir ce contenu à d'autres utilisateurs sur le réseau.

IPFS utilise son propre système de noms de domaine appelé IPNS (Inter-Planetary Naming System), c'est un espace de nom global basé sur une infrastructure à clés publiques (ICP ou PKI) qui sert à construire une chaîne de confiance, qui est compatible avec les autres services de noms de domaine et peut lier des adresses de type DNS, .onion, .bit, etc. vers IPNS[4].

Concepts essentiels

modifier
 
Le CID de ce logo Wikipédia est QmRW3V9znzFW9M5FYbitSEvd5dQrPWGvPvgQD6LM22Tv8D. On peut donc accéder au fichier de ce logo en HTTP via une passerelle publique ou via une instance locale d'IPFS.

IPFS, en tant que système de fichier adressable par contenu, s'appuie sur un système d'identification de contenu. Chaque fichier est donc représenté par un identifiant typiquement calculé par une fonction de hachage, comportant si nécessaire un ou plusieurs préfixes spécifiant par exemple la fonction de hachage utilisée ou son encodage.

La chaîne de caractères obtenue est appelée CID, acronyme pour l'anglais Content IDentifier, signifiant « identifiant de contenu ».

Le système de nom interplanétaire (InterPlanetary Name System (IPNS)) est un système permettant d'adresser un fichier ou un répertoire muable. Ce système est basé sur la cryptographie asymétrique, un nom IPNS étant essentiellement l'empreinte d'une clef publique.

MultiFormats

modifier

Pinning

modifier

Réception

modifier

Kyle Drake, le créateur du service d'hébergement Neocities, a exprimé sa conviction que IPFS est le remplaçant de HTTP et de nombreux autres protocoles et solutions. Selon lui, « la manière dont HTTP distribue le contenu est fondamentalement imparfaite, et essayer d'améliorer les performances ou forcer les gens à utiliser des certificats SSL brisés est inutile. »[8]

Applications utilisant IPFS

modifier

Quelques applications utilisant IPFS[9] :

  • Arbore, logiciel de partage de fichier
  • Agregore, un navigateur web utilisant IPFS
  • brig système de fichier utilisant FUSE et IPFS, avec une commande en ligne proche de git.
  • cURL ajoute son support le 23 septembre 2023[10]
  • Diffuse, diffusion de flux audio via IPFS
  • Hardbin, un Pastebin chiffré
  • Interplanetary Wiki, un wiki utilisant le système distribué
  • IPFS Desktop, une application de bureau permettant d'utiliser IPFS
  • ipfs-chat logiciel de messagerie instantanée en terminal et chiffré
  • IPGit dépôt GIT qui duplique le code via IFPS.
  • Peergos, logiciel de partage de fichier

Notes et références

modifier
  1. « Release 0.32.1 », (consulté le )
  2. « IPFS README - Who designed it? » (consulté le )
  3. « ipfs/go-ipfs », sur GitHub (consulté le )
  4. a b et c « IPFS README » (consulté le )
  5. (en) « Architecture », sur Dépôt IPFS de Github
  6. (en) « IPFS - Specifications », sur compte GitHub de IPFS
  7. (en) Juan Benet, « IPFS - Content Addressed, Versioned, P2P File System (DRAFT 3) - 2. BACKGROUND », sur Compte github de IPFS
  8. Citation originale : « The way HTTP distributes content is fundamentally flawed, and no amount of performance tuneups or forcing broken CA SSL or whatever are going to fix that. » HTTP is obsolete. It's time for the distributed, permanent web, The Neocities Blog, 2015.
  9. (en) « Awesome IPFS », sur Github
  10. « curl: add support for the IPFS protocols », sur Curl sur Github

Liens externes

modifier

Voir aussi

modifier