A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.md 13KB

4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. title: Introduction à secure-scuttlebutt (SSB)
  2. url: https://git.scuttlebot.io/%253qtmFApy1Es5BVA7JIhrlfahcWqBp%2F7I391i%2BxQ1HP8%3D.sha256
  3. hash_url: 0bd3550090004d7dafd05daee05cc94f
  4. # Introduction à secure-scuttlebutt (SSB)
  5. Vous trouverez mes autres repos git-ssb dans [ssb:millette][].
  6. Le document actuel se trouve à [ssb, une intro][].
  7. ## Préambule
  8. Sautez à la section **C'est quoi SSB?** pour passer le préambule.
  9. ### Décentralisé
  10. J'ai toujours été attiré par les aspects décentralisés du web
  11. et de l'internet en général. J'hébergeais déjà un serveur web
  12. chez moi à partir des années 1990, sur ma petite ligne ADSL
  13. à 1Mbps et mon Pentium 90MHz et ses 24MiB de RAM. J'ai même été
  14. *slashdotté* comme on le disait à l'époque.
  15. ### Silos
  16. Avec le temps, le web s'est refermé sur lui-même, on a vu des silo
  17. de plus en plus gros marquer leurs territoires sur le web. On n'a
  18. qu'à penser à Google ou Facebook. J'ai toujours un compte Google,
  19. mais ça fait des années que j'ai détruit mon compte Facebook.
  20. ### Expériences
  21. Il y a quelques mois, j'ai un peu expérimenté avec [ZeroNet][]
  22. et plus récemment avec le [datproject][]. Il y a quelques jours,
  23. je redécouvrais [secure-scuttlebutt][] suite au tapage
  24. entourant la sortie de [mastodon][].
  25. ### Mastodon et fédération
  26. Mastodon et ses cousins GNU Social et StatusNet reposent
  27. tous sur le protocole OStatus, qui lui-même est composé
  28. de protocoles et standards plus anciens comme PubSubHubbub,
  29. Salmon, Webfinger et ActivityStreams. Je suis assez bien placé
  30. pour en parlé puisque j'étais un des développeur de StatusNet
  31. il y a une dizaine d'années.
  32. OStatus permet la fédération, au même titre que le email qu'on
  33. utilise couramment (on peut envoyer un mail du service de Google
  34. et il sera reçu par un utilisateur de Yahoo) ou encore les *pods*
  35. de Diaspora ou Jabber/XMPP pour *chatter*. Dans le cas de fédération,
  36. la relation P2P repose entre les serveurs et non les utilisateurs
  37. eux-mêmes, bien que ces derniers soient tout à fait libres
  38. d'héberger leurs propres serveurs.
  39. ### P2P
  40. [ZeroNet][], [datproject][] et [secure-scuttlebutt][] quand à eux
  41. proposent de véritables réseaux P2P, au même titre que BitTorrent
  42. et Bitcoin par exemple. **Dans les réseaux P2P, il n'y a plus de
  43. distinction entre les clients et les serveurs**. Les utilisateurs
  44. prennent donc part entière aux échanges.
  45. ## C'est quoi SSB?
  46. SSB, scuttlebutt, secure-scuttlebutt, scuttlebot... c'est un peu mêlant.
  47. Sans trop aller dans les détails, disons pour commencer que les termes
  48. SSB, scuttlebutt et secure-scuttlebutt sont à peu près interchangeables.
  49. ### Scuttlebutt
  50. En gros, il s'agit d'une base de données *append-only* qui facilite la
  51. réplication et la consistence éventuelle. *Append-only* signifie
  52. que l'information n'est jamais modifiée ou effacée, mais seulement
  53. ajoutée.
  54. Cette base de donnée va contenir les données que vous y mettez
  55. ainsi que les données que vous allez répliquer à partir d'autres
  56. instances scuttlebutt.
  57. Quels genres de données? Des messages, des identifiants, des *blobs*,
  58. bref, un peu de tout.
  59. ### Scuttlebot
  60. Pour simplifier la réplication, le service scuttlebot est disponible.
  61. C'est le logiciel P2P responsable de partager vos données et de
  62. récupérer les données qui vous intéressent.
  63. En suivant des utilisateurs, scuttlebot s'occupera de recevoir
  64. les données de ces utilisateurs, et vice-versa.
  65. Le réseau P2P utilise *gossip*. Concrètement, les ordinateurs doivent
  66. être connectés entre-eux à un certain moment (mais pas tout le temps)
  67. pour échanger des données. Disons qu'on a les utilisateurs
  68. Pierre, Jean et Jacques.
  69. * Pierre suit Jean et Jacques
  70. * Jean suit Jacques
  71. * Jean se connecte à Jacques et obtient ses données
  72. * Pierre se connecte à Jean et obtient les données de Jean et Jacques,
  73. transitivement
  74. Dans ce scénario, Pierre ne s'est pas connecté directement à Jacques,
  75. mais il a quand même pu obtenir les données de Jacques, via Jean.
  76. C'est ce qu'on veut dire par *gossip*, ou commérages, potins, rumeurs.
  77. Mieux que des rumeurs, SSB est sécure et garanti que les données de
  78. Jacques obtenues via Jean seront intègres.
  79. ### Patchwork
  80. Si la réplication est basée sur un réseau social (ceux que vous
  81. suivez et qui vous suivent), une application évidente de SSB est
  82. un réseau social en bonne et due forme. Le logiciel patchwork est
  83. la réalisation de cette application.
  84. Jusqu'ici, scuttlebutt et scuttlebot sont des logiciels «système».
  85. Ils offrent une interface à la ligne de commande générique de
  86. bas niveau.
  87. Patchwork est une application desktop, un GUI qui donne forme au
  88. réseau social et permet de suivre et lire les messages, photos, *likes*
  89. des autres utilisateurs qui vous intéressent.
  90. C'est la façon recommandée de faire ses premiers pas dans le
  91. *scuttleverse*, bien qu'il existe d'autres clients plus légers
  92. comme on le verra plus loin dans ce document.
  93. Notez cependant qu'il s'agit d'un éxécutable de 50-70 MiB basé sur
  94. electron, qui lui-même est basé sur chromium et sur node, ces deux
  95. derniers reposant sur V8 pour l'engin JavaScript. Cette application
  96. inclut aussi scuttlebutt et scuttlebot. Autrement dit, ça prend
  97. pas mal de ressources en RAM et en CPU. Chez moi, ça fait monter
  98. la température de façon critique.
  99. ## Installation
  100. Nous allons installer quelques logiciels. Vous aurez besoin d'une
  101. version récente (6.x) de NodeJS.
  102. Si vous n'avez pas déjà node 6.x ou mieux, installez n pour gérer
  103. les versions de node:
  104. ```
  105. curl -L https://git.io/n-install | bash
  106. ```
  107. Vous devez relancer le terminal pour utiliser n. Voir les détails:
  108. <https://github.com/mklement0/n-install>
  109. ### patchwork
  110. Téléchargez patchwork à partir de <https://github.com/ssbc/patchwork/releases>
  111. Au démarrage, une fenêtre devrait s'ouvrir sur votre *desktop* offrant
  112. le GUI.
  113. ![Capture d'écran Patchwork](patchwork-screenshot.jpg)
  114. S'il y a d'autres utilisateurs de scuttlebot sur votre réseau local (LAN),
  115. peut-être en classe, au travail ou dans un café, votre instance
  116. commencera automatiquement à recevoir les données du réseau et vous
  117. pourrez chercher du contenu et des utilisateurs et les suivre,
  118. même s'il ne sont pas sur votre LAN. C'est l'effet *gossip*.
  119. Autrement, si vous êtes seul sur votre LAN, vous devrez vous connecter
  120. à un **Pub** public.
  121. Vous obtiendrez une invitation sur un des [pubs publics sur le wiki][].
  122. Dans patchwork, cliquez sur «+ Join Pub» et copiez-y le code d'invitation
  123. que vous avez obtenu.
  124. Ainsi, vous suivrez ce **Pub** et vice-vera. Si vous n'avez pas encore
  125. synchronisé avec le réseau social, ça prendra quelques minutes pour
  126. vous mettre à jour.
  127. À partir d'ici, vous prenez par au scuttleverse. Vous pouvez me suivre:
  128. * @dcWOOqyFtY1sEXv+rM0MzdINiYyIFFwom1NfmP4aMFo=.ed25519
  129. * <http://viewer.scuttlebot.io/%25xLwTdQULCtpiRtRGKH3vETWDtaMPNrAc0ns4QjHrv3o%3D.sha256>
  130. Personnellement, je n'utilise pas beaucoup le client Patchwork
  131. puisqu'il prend trop de ressources pour mon ordinateur. Les prochaines
  132. sections proposeront deux autres clients plus légers. Je mentionne
  133. quand même Patchwork puisque c'est une porte d'entrée facile.
  134. Le réseau supporte les messages publics et privés.
  135. #### Messages publics
  136. Tout ce que vous publierez sera disponible pour l'éternité sur le réseau,
  137. ainsi que les utilisateurs que vous mentionnerez, alors pensez-y bien
  138. avant d'écrire tout ce qui vous passe par la tête :-)
  139. #### Messages privés
  140. Vous pouvez aussi échanger des messages privés. Ces derniers ne pourront
  141. être lus que par leurs destinataires et la liste des destinataires
  142. demeure aussi privée (encryptée).
  143. Le réseau verra cependant que vous avez envoyé un message privé, sans
  144. connaitre son contenu ou destinataires, et pourra faire suivre ce
  145. message comme les autres en P2P avec *gossip*.
  146. ### scuttlebot
  147. Les prochains clients proposés reposent sur le logiciel scuttlebot,
  148. ou sbot à la ligne de commande. Node est installé? Parfait,
  149. on peut procéder à l'installer et démarrer le serveur:
  150. ```
  151. npm install --global scuttlebot
  152. sbot server
  153. ```
  154. Si vous avez installé Patchwork à l'étape précédente, votre nouvelle
  155. instance de scuttlebot devrait se connecter et synchroniser en
  156. priorisant les utilisateurs suivis.
  157. Un *log* devrait rapidement remplir le terminal où vous avez lancé
  158. **sbot server**. Mais pas de GUI, c'est normal.
  159. Vous avez tout de même une interface complète pour accéder et participer
  160. au scuttleverse, à la ligne de commande. Pour obtenir la liste de
  161. toutes les commandes:
  162. ```
  163. sbot --help
  164. ```
  165. Par exemple, pour confirmer que vous utilisez la bonne identité:
  166. ```
  167. sbot whoami # afficher votre clé publique (identifiant)
  168. ```
  169. Vous pouvez lire des messages, en envoyer, suivre des utilisateurs
  170. et ainsi de suite, mais ça prend des commandes plutôt fastidieuses
  171. à taper.
  172. sbot offre aussi une interface RPC sur le port 8008 par défaut, qui
  173. sera utilisée par les prochains clients.
  174. #### Plugins scuttlebot
  175. * ssb-notifier
  176. * ssb-links
  177. * ssb-query
  178. * ssb-ws
  179. * ssb-fulltext
  180. * patchfoo
  181. * dnssb
  182. ### patchbay
  183. ### patchfoo
  184. Client simple qui s'utilise via votre fureteur préféré (incluant dillo).
  185. ## Plus qu'un réseau social
  186. Si patchwork, patchbay et patchfoo offrent des représentations du
  187. scuttleverse de type réseau social, d'autres types d'applications
  188. sont possible, qui reposent sur la même architecture P2P.
  189. ### ssb-git
  190. git est un gestionnaire de code, décentralisé par nature. Pour accéder
  191. à un dépot, il faut en connaitre l'adresse, souvent par les protocoles
  192. http/https ou ssh. On peut cloner ce dépot plus ou moins manuellement à
  193. une autre adresse. Ainsi, on peut continuer de coder sur un vol de 5h
  194. sans wifi. Avant git, cvs et svn étaient la norme, mais avec ces derniers
  195. on ne pouvait faire de commit sans connection. C'était complètement
  196. centralisé.
  197. Par leur nature, les dépots ont chacun une forme de centralisation,
  198. c'est à dire un auteur, *maintainer* ou un groupe qui est responsable
  199. de ce qui sera commis dans la version dite officielle de dépot.
  200. Si un dépot est sur notre laptop et qu'un autre utilisateur veut
  201. en faire un clone, il doit y avoir accès d'une certaine façon. Peut-être
  202. par ssh ou un autre protocole. Mais le plus souvent, on fera nous
  203. même un clone de notre dépot qu'on tiendra à jour sur un service public
  204. (ou non) et accessibles en ligne. GitHub, GitLab et BitBucket sont des
  205. options fréquentes.
  206. Avec ssb-git, on fera un clone de notre dépot et on le publiera dans le
  207. scuttleverse.
  208. Pour installer ssb-git:
  209. ```
  210. npm install --global git-ssb
  211. ```
  212. #### Usage
  213. > Tiré de <https://github.com/clehner/git-ssb/blob/master/README.md#usage>
  214. Vous pouvez utiliser un *remote* `ssb://` comme n'importe quel autre
  215. *remote* git. Un dépot sur ssb est identifé par un message ID.
  216. Pour créer un nouveau dépot git sur ssb, utilisez la commande
  217. `git ssb create`. Vous ne pouvez *pusher* que sur les dépots ssb git
  218. que vous avez créé et non sur les dépots des autres.
  219. #### Exemples
  220. Publier un dépot existant sur ssb:
  221. ```
  222. cd repo
  223. git ssb create ssb my-cool-repo
  224. git push --tags --set-upstream ssb master
  225. ```
  226. Pour cloner un dépot à partir de ssb:
  227. ```
  228. git clone ssb://<msgId> repo
  229. ```
  230. *Fork un dépot ssb git que vous avez cloné:
  231. ```
  232. cd repo
  233. git ssb fork mine
  234. # edit and commit, then push changes:
  235. git push mine
  236. ```
  237. Démarrer un serveur web pour browser (à la github):
  238. ```
  239. git ssb web
  240. ```
  241. # Alternatives
  242. * Matrix (riot)
  243. * dat project (hypercore/hyperdrive)
  244. * ZeroNet
  245. * CouchDB (mécanisme de réplication éventuellement consistent)
  246. * Et bien plus!
  247. ## Todo
  248. * Liens ssb vs liens http
  249. [gh:secure-scuttlebutt]: <https://github.com/ssbc/secure-scuttlebutt>
  250. [secure-scuttlebutt]: <http://scuttlebot.io/>
  251. [gh:patchwork]: <https://github.com/ssbc/patchwork>
  252. [ssb handbook]: <https://www.scuttlebutt.nz/>
  253. [Pub servers]: <https://github.com/ssbc/scuttlebot/wiki/Pub-Servers>
  254. [git-ssb]: <https://git.scuttlebot.io/%25n92DiQh7ietE%2BR%2BX%2FI403LQoyf2DtR3WQfCkDKlheQU%3D.sha256>
  255. [ce document]: <http://viewer.scuttlebot.io/%25oqqA9e73Xohkaj5lOXS4lYj7ciqwo3O7iaZx7541sQg%3D.sha256>
  256. [gh:patchbay]: <https://github.com/ssbc/patchbay>
  257. [patchfoo]: <https://git.scuttlebot.io/%25YAg1hicat%2B2GELjE2QJzDwlAWcx0ML%2B1sXEdsWwvdt8%3D.sha256>
  258. [git ssb]: <http://git-ssb.celehner.com/>
  259. [dnssb]: <https://git.scuttlebot.io/%25aVOBlkoiDbK99ROZPIaiiDk%2B4q2P4%2BG7MGul4UxkBBM%3D.sha256>
  260. [Scuttlebot]: <https://ssbc.github.io/scuttlebot/>
  261. [gh:ssb-notifier]: <https://github.com/ssbc/ssb-notifier>
  262. [gh:scuttlebot]: <https://github.com/ssbc/scuttlebot>
  263. [ssb:millette]: <https://git.scuttlebot.io/%40dcWOOqyFtY1sEXv%2BrM0MzdINiYyIFFwom1NfmP4aMFo%3D.ed25519>
  264. [ssb, une intro]: <https://git.scuttlebot.io/%253qtmFApy1Es5BVA7JIhrlfahcWqBp%2F7I391i%2BxQ1HP8%3D.sha256>
  265. [ZeroNet]: <https://zeronet.io/>
  266. [gh:ZeroNet]: <https://github.com/HelloZeroNet/ZeroNet>
  267. [datproject]: <https://datproject.org/>
  268. [gh:datproject]: <https://github.com/datproject/dat-desktop>
  269. [mastodon]: <https://mastodon.social/>
  270. [gh:mastodon]: <https://github.com/tootsuite/mastodon>
  271. [pubs publics sur le wiki]: <https://github.com/ssbc/scuttlebot/wiki/Pub-Servers>