====== Dat ====== Dat est un protocole de transfert de fichier, ayant des similitudes avec BitTorrent et git (dans la conception technique), et rsync ou Dropbox (dans l'usage). L'implémentation de référence est écrite en Javascript/Node.js, et est publiée sous licence MIT (ou BSD 3-clauses selon les composants). On remarque déjà que, bien que le projet soit relativement jeune et discret, les pages de leurs sites sont plutôt propres, et la documentation fournie témoigne d'une direction plutôt claire, ce qui pourrait effectivement rendre Dat accessible aux moins techniciens. Les sponsors et financeurs sont assez visibles, on peut supposer que cela ait encouragé les développeurs à peaufiner ces aspects afin que le logiciel soit accessible au plus grand nombre. Dat possède déjà plusieurs clients, dont l'un en ligne de commande. Les captures d'écran de la [[https://github.com/datproject/dat|page Github de l'outil]] illustrent bien l'usage. Le client permet notamment la copie, la synchronisation, ainsi que le versionnage((= conserver un historique des anciennes versions du fichier, comme le propose Git.)) d'un lot de fichiers. Un navigateur web nommé [[https://beakerbrowser.com/|Beaker]] intègre Dat, ce qui lui permet de tirer partie des données décentralisées pour, par exemple, alléger le trafic réseau sur le serveur web, voire héberger intégralement des sites de façon décentralisée. Reste à voir quelles contraintes techniques sont posées sur le dit site statique, car les bases de données couramment utilisées pour le web sont centralisées. Dat est perçu comme un vaste réseau de données décentralisé. Les scénarios d'usage donnés en exemples sur leur site suggèrent que le logiciel puisse être utilisé pour partager des jeux de données au sein de la communauté scientifique. Mais bien entendu la technologie reste neutre à l'égard des usages et il est possible d'utiliser Dat comme bon nous semble. ===== Fonctionnement ===== ==== Découverte des pairs ==== D'après [[https://docs.datproject.org/faq|le FAQ]], Dat utilise plusieurs mécanismes : UDP multicast pour la découverte des noeuds sur le LAN, ainsi que DHT pour les noeuds sur internet, ou bien une solution centralisée à base de versions modifiées de DNS. Dat ne souhaite pas être limitant à ce niveau et se propose d'être extensible si d'autres procédés de découverte de noeuds s'avèrent pertinents. ==== Accès à une ressource ==== Pour accéder à une ressource, il faut en connaître la clé, c'est à dire disposer du lien. Les liens se présentent sous la forme suivante : ''dat://clé_du_lien_sous_forme_de_hash''. Jusque là, ça ressemble beaucoup à BitTorrent, ses liens magnet ainsi que le recours à la DHT, mais il y a quelques différences. === Versionnage des fichiers === L'une de ces différences est assez intéressante : il s'agit de la gestion des versions des fichiers. Concrètement, cela signifie que pour une clé dat:// donnée, on va pouvoir récupérer la dernière version publiée des données, mais aussi les suivantes (ou les précédentes). Cas pratique : je mets à disposition un documentaire, que j'ai sous-titré. Je le partage. Et plus tard je me rend compte avoir fait des fautes dans les sous-titres, et bien je peux repartager une nouvelle version des sous-titres, sans pour autant devoir recréer une nouvelle clé. Cela remédie à un problème auquel nous nous sommes accoutumés avec les torrents, qui est que les données sont «figées» et la moindre modification de l'un des fichiers invalide le torrent correspondant, nécessitant alors la création d'un nouveau torrent pour partager ces données modifiées. Avec Dat donc, on peut garder en synchronisation des jeux de données qui évoluent dans le temps. Dat propose en fait 2 modes de gestion de versions : * l'un où l'on ne peut récupérer que la version la plus récente ; c'est le mode le plus économe en espace disque. C'est aussi ce modèle qui a été choisi par le logiciel [[https://git-annex.branchable.com/|git-annex]]. * l'autre, où c'est tout l'historique des versions qui est conservé. Cela peut être très couteux si les fichiers sont volumineux car chaque version d'un fichier est intégralement répliquée (contrairement à d'autres gestionnaires de versions comme Git qui parviennent à faire la même chose, mais en conservant uniquement les différences d'un fichier à l'autre). === Découverte via la DHT === Un autre point de divergence avec BitTorrent, c'est un degré de confidentialité légèrement amélioré lors de l'usage de la DHT. Sur BitTorrent, ce qui circule sur la DHT, ce sont les hashs complets des ressources. C'est problématique car dès qu'une recherche est opérée sur le réseau, son hash «fuite» à travers tous les noeuds du réseau qui ont été parcourus, et qui connaissent ainsi votre demande. La DHT rend possible pour un noeud d'effectuer une écoute passive du réseau, et connaître qui désire quoi. Quand bien même avec BitTorrent il est possible de ne pas publier votre hash dans la DHT, les clients BitTorrent que vous ne contrôlez pas peuvent avoir tendance à la laisser fuiter. Dat cherche à résoudre ce problème en ajoutant un niveau d'indirection supplémentaire avec les clés. Avec Dat, ce qui circule sur la DHT, ce n'est pas la clé dat (qui correspondrait au lien magnet), c'est une autre forme de hash qu'on appelle la «Discovery Key», et qui est calculé à partir de la clé Dat (avec l'algorithme [[wp>BLAKE_(hash_function)|blake2b]]). Ainsi, votre requête circule, mais seuls les noeuds disposant de la dite ressource sauront que vous la cherchez (un noeud disposant d'une clé Dat sait en dériver la clé de découverte). Le point qui m'échappe, c'est la résolution du cas suivant : que se passe-t-il si cette clé de découverte est réutilisée par un noeud malicieux qui voudrait accéder à une ressource (qu'il ne connaît pas, mais il s'en fiche puisqu'il a la clé de découverte) ? L'accès à la ressource ne lui est accordée que s'il dispose de la clé dat : peut-il alors prétendre disposer de la ressource pour attendre qu'un noeud lui fournisse la clé Dat ? ==== Beaker Browser ==== Site : https://beakerbrowser.com/ Basé sur Electron. Voir aussi : [[https://github.com/sammacbeth/dat-fox|dat-fox]] ==== HyperDB ==== Il s'agit d'une base de données distribuée, qui se présente comme un système de fichiers hiérarchisé et arborescent, sur lequel plusieurs noeuds peuvent écrire si la permission leur a été donnée. L'intégrité est garantie par un système de clés publiques/privées. Description : https://github.com/mafintosh/hyperdb/blob/master/ARCHITECTURE.md Le papier décrit comment les données sont conservées dans le temps (par indexation), et comment l'arborescence peut être parcourue afin de trouver rapidement la valeur de la donnée souhaitée. ===== Améliorations prévues ===== Actuellement, l'auteur d'un dat est le seul à pouvoir modifier le contenu correspondant. Un travail en cours prévoit d'ouvrir cette possibilité à de multiples éditeurs. Pour reprendre l'exemple du fichier de sous-titres d'une video donné plus haut, si j'ai confiance en Jean-Bernard, je lui accorde un droit en écriture, et s'il a plus de temps que moi pour améliorer les sous-titres, il pourra le faire et publier sous le même dat. Une implémentation de Dat en Rust a été initiée. Cela pourrait être une alternative pour les allergiques à l'écosystème Node.js. ===== Liens ===== * Site officiel de Dat : https://datproject.org * Site de Beaker : https://beakerbrowser.com/ * Documentation : https://docs.datproject.org/ * Github : https://github.com/datproject * https://linuxfr.org/users/arnodevo/journaux/navigateur-p2p : un journal qui parle des deux projets (Beaker et Dat) * https://anarc.at/blog/2018-09-10-sharing-and-archiving-data-sets-with-dat/ : un aperçu de dat par anarcat * https://p2pforever.org : un site de ressources sur le P2P par des développeurs de Dat. * https://datprotocol.github.io/how-dat-works/ : un article avec schémas assez riche décrivant le fonctionnement de DAT * P2P similaires : [[p2p>Tahoe-LAFS]], [[p2p>ZeroNet]], [[p2p>IPFS]] {{tag>type:client-p2p licence:libre réseau:dat système:windows système:mac système:linux}}