|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- title: Introduction à secure-scuttlebutt (SSB)
- url: https://git.scuttlebot.io/%253qtmFApy1Es5BVA7JIhrlfahcWqBp%2F7I391i%2BxQ1HP8%3D.sha256
- hash_url: 0bd3550090004d7dafd05daee05cc94f
-
- # Introduction à secure-scuttlebutt (SSB)
-
- Vous trouverez mes autres repos git-ssb dans [ssb:millette][].
-
- Le document actuel se trouve à [ssb, une intro][].
-
- ## Préambule
- Sautez à la section **C'est quoi SSB?** pour passer le préambule.
-
- ### Décentralisé
- J'ai toujours été attiré par les aspects décentralisés du web
- et de l'internet en général. J'hébergeais déjà un serveur web
- chez moi à partir des années 1990, sur ma petite ligne ADSL
- à 1Mbps et mon Pentium 90MHz et ses 24MiB de RAM. J'ai même été
- *slashdotté* comme on le disait à l'époque.
-
- ### Silos
- Avec le temps, le web s'est refermé sur lui-même, on a vu des silo
- de plus en plus gros marquer leurs territoires sur le web. On n'a
- qu'à penser à Google ou Facebook. J'ai toujours un compte Google,
- mais ça fait des années que j'ai détruit mon compte Facebook.
-
- ### Expériences
- Il y a quelques mois, j'ai un peu expérimenté avec [ZeroNet][]
- et plus récemment avec le [datproject][]. Il y a quelques jours,
- je redécouvrais [secure-scuttlebutt][] suite au tapage
- entourant la sortie de [mastodon][].
-
- ### Mastodon et fédération
- Mastodon et ses cousins GNU Social et StatusNet reposent
- tous sur le protocole OStatus, qui lui-même est composé
- de protocoles et standards plus anciens comme PubSubHubbub,
- Salmon, Webfinger et ActivityStreams. Je suis assez bien placé
- pour en parlé puisque j'étais un des développeur de StatusNet
- il y a une dizaine d'années.
-
- OStatus permet la fédération, au même titre que le email qu'on
- utilise couramment (on peut envoyer un mail du service de Google
- et il sera reçu par un utilisateur de Yahoo) ou encore les *pods*
- de Diaspora ou Jabber/XMPP pour *chatter*. Dans le cas de fédération,
- la relation P2P repose entre les serveurs et non les utilisateurs
- eux-mêmes, bien que ces derniers soient tout à fait libres
- d'héberger leurs propres serveurs.
-
- ### P2P
- [ZeroNet][], [datproject][] et [secure-scuttlebutt][] quand à eux
- proposent de véritables réseaux P2P, au même titre que BitTorrent
- et Bitcoin par exemple. **Dans les réseaux P2P, il n'y a plus de
- distinction entre les clients et les serveurs**. Les utilisateurs
- prennent donc part entière aux échanges.
-
- ## C'est quoi SSB?
- SSB, scuttlebutt, secure-scuttlebutt, scuttlebot... c'est un peu mêlant.
- Sans trop aller dans les détails, disons pour commencer que les termes
- SSB, scuttlebutt et secure-scuttlebutt sont à peu près interchangeables.
-
- ### Scuttlebutt
- En gros, il s'agit d'une base de données *append-only* qui facilite la
- réplication et la consistence éventuelle. *Append-only* signifie
- que l'information n'est jamais modifiée ou effacée, mais seulement
- ajoutée.
-
- Cette base de donnée va contenir les données que vous y mettez
- ainsi que les données que vous allez répliquer à partir d'autres
- instances scuttlebutt.
-
- Quels genres de données? Des messages, des identifiants, des *blobs*,
- bref, un peu de tout.
-
- ### Scuttlebot
- Pour simplifier la réplication, le service scuttlebot est disponible.
- C'est le logiciel P2P responsable de partager vos données et de
- récupérer les données qui vous intéressent.
-
- En suivant des utilisateurs, scuttlebot s'occupera de recevoir
- les données de ces utilisateurs, et vice-versa.
-
- Le réseau P2P utilise *gossip*. Concrètement, les ordinateurs doivent
- être connectés entre-eux à un certain moment (mais pas tout le temps)
- pour échanger des données. Disons qu'on a les utilisateurs
- Pierre, Jean et Jacques.
-
- * Pierre suit Jean et Jacques
- * Jean suit Jacques
- * Jean se connecte à Jacques et obtient ses données
- * Pierre se connecte à Jean et obtient les données de Jean et Jacques,
- transitivement
-
- Dans ce scénario, Pierre ne s'est pas connecté directement à Jacques,
- mais il a quand même pu obtenir les données de Jacques, via Jean.
- C'est ce qu'on veut dire par *gossip*, ou commérages, potins, rumeurs.
-
- Mieux que des rumeurs, SSB est sécure et garanti que les données de
- Jacques obtenues via Jean seront intègres.
-
- ### Patchwork
- Si la réplication est basée sur un réseau social (ceux que vous
- suivez et qui vous suivent), une application évidente de SSB est
- un réseau social en bonne et due forme. Le logiciel patchwork est
- la réalisation de cette application.
-
- Jusqu'ici, scuttlebutt et scuttlebot sont des logiciels «système».
- Ils offrent une interface à la ligne de commande générique de
- bas niveau.
-
- Patchwork est une application desktop, un GUI qui donne forme au
- réseau social et permet de suivre et lire les messages, photos, *likes*
- des autres utilisateurs qui vous intéressent.
-
- C'est la façon recommandée de faire ses premiers pas dans le
- *scuttleverse*, bien qu'il existe d'autres clients plus légers
- comme on le verra plus loin dans ce document.
-
- Notez cependant qu'il s'agit d'un éxécutable de 50-70 MiB basé sur
- electron, qui lui-même est basé sur chromium et sur node, ces deux
- derniers reposant sur V8 pour l'engin JavaScript. Cette application
- inclut aussi scuttlebutt et scuttlebot. Autrement dit, ça prend
- pas mal de ressources en RAM et en CPU. Chez moi, ça fait monter
- la température de façon critique.
-
- ## Installation
- Nous allons installer quelques logiciels. Vous aurez besoin d'une
- version récente (6.x) de NodeJS.
-
- Si vous n'avez pas déjà node 6.x ou mieux, installez n pour gérer
- les versions de node:
- ```
- curl -L https://git.io/n-install | bash
- ```
-
- Vous devez relancer le terminal pour utiliser n. Voir les détails:
- <https://github.com/mklement0/n-install>
-
- ### patchwork
- Téléchargez patchwork à partir de <https://github.com/ssbc/patchwork/releases>
-
- Au démarrage, une fenêtre devrait s'ouvrir sur votre *desktop* offrant
- le GUI.
-
- ![Capture d'écran Patchwork](patchwork-screenshot.jpg)
-
- S'il y a d'autres utilisateurs de scuttlebot sur votre réseau local (LAN),
- peut-être en classe, au travail ou dans un café, votre instance
- commencera automatiquement à recevoir les données du réseau et vous
- pourrez chercher du contenu et des utilisateurs et les suivre,
- même s'il ne sont pas sur votre LAN. C'est l'effet *gossip*.
-
- Autrement, si vous êtes seul sur votre LAN, vous devrez vous connecter
- à un **Pub** public.
-
- Vous obtiendrez une invitation sur un des [pubs publics sur le wiki][].
-
- Dans patchwork, cliquez sur «+ Join Pub» et copiez-y le code d'invitation
- que vous avez obtenu.
-
- Ainsi, vous suivrez ce **Pub** et vice-vera. Si vous n'avez pas encore
- synchronisé avec le réseau social, ça prendra quelques minutes pour
- vous mettre à jour.
-
- À partir d'ici, vous prenez par au scuttleverse. Vous pouvez me suivre:
-
- * @dcWOOqyFtY1sEXv+rM0MzdINiYyIFFwom1NfmP4aMFo=.ed25519
- * <http://viewer.scuttlebot.io/%25xLwTdQULCtpiRtRGKH3vETWDtaMPNrAc0ns4QjHrv3o%3D.sha256>
-
- Personnellement, je n'utilise pas beaucoup le client Patchwork
- puisqu'il prend trop de ressources pour mon ordinateur. Les prochaines
- sections proposeront deux autres clients plus légers. Je mentionne
- quand même Patchwork puisque c'est une porte d'entrée facile.
-
- Le réseau supporte les messages publics et privés.
-
- #### Messages publics
- Tout ce que vous publierez sera disponible pour l'éternité sur le réseau,
- ainsi que les utilisateurs que vous mentionnerez, alors pensez-y bien
- avant d'écrire tout ce qui vous passe par la tête :-)
-
- #### Messages privés
- Vous pouvez aussi échanger des messages privés. Ces derniers ne pourront
- être lus que par leurs destinataires et la liste des destinataires
- demeure aussi privée (encryptée).
-
- Le réseau verra cependant que vous avez envoyé un message privé, sans
- connaitre son contenu ou destinataires, et pourra faire suivre ce
- message comme les autres en P2P avec *gossip*.
-
- ### scuttlebot
- Les prochains clients proposés reposent sur le logiciel scuttlebot,
- ou sbot à la ligne de commande. Node est installé? Parfait,
- on peut procéder à l'installer et démarrer le serveur:
- ```
- npm install --global scuttlebot
- sbot server
- ```
-
- Si vous avez installé Patchwork à l'étape précédente, votre nouvelle
- instance de scuttlebot devrait se connecter et synchroniser en
- priorisant les utilisateurs suivis.
-
- Un *log* devrait rapidement remplir le terminal où vous avez lancé
- **sbot server**. Mais pas de GUI, c'est normal.
-
- Vous avez tout de même une interface complète pour accéder et participer
- au scuttleverse, à la ligne de commande. Pour obtenir la liste de
- toutes les commandes:
- ```
- sbot --help
- ```
-
- Par exemple, pour confirmer que vous utilisez la bonne identité:
- ```
- sbot whoami # afficher votre clé publique (identifiant)
- ```
-
- Vous pouvez lire des messages, en envoyer, suivre des utilisateurs
- et ainsi de suite, mais ça prend des commandes plutôt fastidieuses
- à taper.
-
- sbot offre aussi une interface RPC sur le port 8008 par défaut, qui
- sera utilisée par les prochains clients.
-
- #### Plugins scuttlebot
- * ssb-notifier
- * ssb-links
- * ssb-query
- * ssb-ws
- * ssb-fulltext
- * patchfoo
- * dnssb
-
- ### patchbay
-
- ### patchfoo
- Client simple qui s'utilise via votre fureteur préféré (incluant dillo).
-
- ## Plus qu'un réseau social
- Si patchwork, patchbay et patchfoo offrent des représentations du
- scuttleverse de type réseau social, d'autres types d'applications
- sont possible, qui reposent sur la même architecture P2P.
-
- ### ssb-git
- git est un gestionnaire de code, décentralisé par nature. Pour accéder
- à un dépot, il faut en connaitre l'adresse, souvent par les protocoles
- http/https ou ssh. On peut cloner ce dépot plus ou moins manuellement à
- une autre adresse. Ainsi, on peut continuer de coder sur un vol de 5h
- sans wifi. Avant git, cvs et svn étaient la norme, mais avec ces derniers
- on ne pouvait faire de commit sans connection. C'était complètement
- centralisé.
-
- Par leur nature, les dépots ont chacun une forme de centralisation,
- c'est à dire un auteur, *maintainer* ou un groupe qui est responsable
- de ce qui sera commis dans la version dite officielle de dépot.
-
- Si un dépot est sur notre laptop et qu'un autre utilisateur veut
- en faire un clone, il doit y avoir accès d'une certaine façon. Peut-être
- par ssh ou un autre protocole. Mais le plus souvent, on fera nous
- même un clone de notre dépot qu'on tiendra à jour sur un service public
- (ou non) et accessibles en ligne. GitHub, GitLab et BitBucket sont des
- options fréquentes.
-
- Avec ssb-git, on fera un clone de notre dépot et on le publiera dans le
- scuttleverse.
-
- Pour installer ssb-git:
-
- ```
- npm install --global git-ssb
- ```
- #### Usage
- > Tiré de <https://github.com/clehner/git-ssb/blob/master/README.md#usage>
-
- Vous pouvez utiliser un *remote* `ssb://` comme n'importe quel autre
- *remote* git. Un dépot sur ssb est identifé par un message ID.
- Pour créer un nouveau dépot git sur ssb, utilisez la commande
- `git ssb create`. Vous ne pouvez *pusher* que sur les dépots ssb git
- que vous avez créé et non sur les dépots des autres.
-
- #### Exemples
- Publier un dépot existant sur ssb:
- ```
- cd repo
- git ssb create ssb my-cool-repo
- git push --tags --set-upstream ssb master
- ```
-
- Pour cloner un dépot à partir de ssb:
- ```
- git clone ssb://<msgId> repo
- ```
-
- *Fork un dépot ssb git que vous avez cloné:
- ```
- cd repo
- git ssb fork mine
- # edit and commit, then push changes:
- git push mine
- ```
-
- Démarrer un serveur web pour browser (à la github):
- ```
- git ssb web
- ```
-
- # Alternatives
- * Matrix (riot)
- * dat project (hypercore/hyperdrive)
- * ZeroNet
- * CouchDB (mécanisme de réplication éventuellement consistent)
- * Et bien plus!
-
- ## Todo
- * Liens ssb vs liens http
-
- [gh:secure-scuttlebutt]: <https://github.com/ssbc/secure-scuttlebutt>
- [secure-scuttlebutt]: <http://scuttlebot.io/>
- [gh:patchwork]: <https://github.com/ssbc/patchwork>
- [ssb handbook]: <https://www.scuttlebutt.nz/>
- [Pub servers]: <https://github.com/ssbc/scuttlebot/wiki/Pub-Servers>
- [git-ssb]: <https://git.scuttlebot.io/%25n92DiQh7ietE%2BR%2BX%2FI403LQoyf2DtR3WQfCkDKlheQU%3D.sha256>
- [ce document]: <http://viewer.scuttlebot.io/%25oqqA9e73Xohkaj5lOXS4lYj7ciqwo3O7iaZx7541sQg%3D.sha256>
- [gh:patchbay]: <https://github.com/ssbc/patchbay>
- [patchfoo]: <https://git.scuttlebot.io/%25YAg1hicat%2B2GELjE2QJzDwlAWcx0ML%2B1sXEdsWwvdt8%3D.sha256>
- [git ssb]: <http://git-ssb.celehner.com/>
- [dnssb]: <https://git.scuttlebot.io/%25aVOBlkoiDbK99ROZPIaiiDk%2B4q2P4%2BG7MGul4UxkBBM%3D.sha256>
- [Scuttlebot]: <https://ssbc.github.io/scuttlebot/>
- [gh:ssb-notifier]: <https://github.com/ssbc/ssb-notifier>
- [gh:scuttlebot]: <https://github.com/ssbc/scuttlebot>
- [ssb:millette]: <https://git.scuttlebot.io/%40dcWOOqyFtY1sEXv%2BrM0MzdINiYyIFFwom1NfmP4aMFo%3D.ed25519>
- [ssb, une intro]: <https://git.scuttlebot.io/%253qtmFApy1Es5BVA7JIhrlfahcWqBp%2F7I391i%2BxQ1HP8%3D.sha256>
- [ZeroNet]: <https://zeronet.io/>
- [gh:ZeroNet]: <https://github.com/HelloZeroNet/ZeroNet>
- [datproject]: <https://datproject.org/>
- [gh:datproject]: <https://github.com/datproject/dat-desktop>
- [mastodon]: <https://mastodon.social/>
- [gh:mastodon]: <https://github.com/tootsuite/mastodon>
- [pubs publics sur le wiki]: <https://github.com/ssbc/scuttlebot/wiki/Pub-Servers>
|