Scuttlebutt: Un protocolo y red social distribuidos, seguros, locales primero, resilientes y cifrados

Imagen alusiva al logo de Scuttlebutt

Scuttlebutt, también conocido como Secure Scuttlebutt o simplemente SSB (sbb), es un protocolo distribuido, seguro, cifrado, así como la red social construida sobre el mismo, que valora la (inter)subjetividad y la construcción entre pares tanto en lo social como en lo tecnológico.

Arriba: Vistas de cómo luce Scuttlebutt (derecha) versus Twitter (izquierda).

Scuttlebutt tiene varias diferencias con las redes sociales populares (como explica este video). Entre las diferencias fundamentales con redes y tecnologías más conocidas destacamos:

  • Es local primero: No requiere conexión a Internet para almacenar y replicar mensajes, sino que los guarda primero en el dispositivo que los produce (celular, portátil, etc) y luego usa la conexión disponible (bluetooth, wifi, intranet, internet) para coordinarlo con pares a través del protocolo de rumor.

    Más info: Local first.

  • Entre pares: No existen máquinas ni usuarios privilegiados por la arquitectura de la red. Cada celular, tableta, computador portátil o de escritorio, servidor en la web, rasberry pi, etc, tiene las mismas posibilidades de producir, almacenar y propagar información en Scuttlebutt y cada usuario de estas máquinas es a la vez productor, guardian, censor y facilitador de los mensajes que circulan en su red de pares.

  • El contenido está firmado, es verificable y replicado entre pares: esto quiere decir que se pude auditar que efecivamente quien produjo el contenido lo hizo al agregarle su firma (evitando la producción de mensajes falsos y la suplantación) y evitando el borrado, lo cual, en general, produce conversaciones más reflexivas. Hay un soporte experimental para borrado suave que permite el borrado en todas las máquinas, una vez los pares que sincronizaban el contenido que se desea borrar se han conectado de nuevo.

  • Se producen concensos locales y se valora la (inter)subjetividad: A diferencia de otros procolos basados en blockchain (como Ethereum), donde una base de datos única se replica entre centenares de computadores que peléan entre sí y son premiados por producir el siguiente trozo de verdad absoluta en dicha base de datos, en Scuttlebutt se parte de mensajes producidos entre pares que se propagan por la red mediante el protocolo de rumor. Esto es computacionalmente eficiente, pues no gasta recursos más allá de los de producir y repartir ese mensaje y permite que grupos distintos tengan verdades diferentes, que pueden sincronizar y validar luego, si así lo desean, entre sí, de modo similar a como funcionan las relaciones sociales, la biología (y Holochain), donde el orden global parte de consensos locales.

  • Es un protocolo, no una aplicación: Si bien la red social y el protocolo reciben ambos el mismo nombre, la primera es sólo una forma específica de encarnar al segundo y otras aplicaciones como clones de Sound Cloud, evaluadores de libros, o sistemas de blog, han sido creados sobre el mismo protocolo, basándose en las ideas del mismo (algunas explicadas anterioremente), lo que hace que dichas aplicaciones distribuyan sus datos via el protocolo y lo extiendan y visualicen de acuerdo a la experiencia que la aplicación busca proveer. En ese sentido, es más cercano al trabajo de Protocol Labs, aunque con un enfoque más pragmático desde una implementacion del protocolo en NodeJS, que sirve a los nómadas y personas que lo están contruyendo en el presente y es extensible en en futuro.

En mayor detalle, Scuttlebut usa llaves públicas y privadas que identifican a un usuario del protocolo o red social y están asociados a la máquina donde se instala Scuttlebutt. Dichas llaves se usan para construir una secuencia de mensajes firmados por su autor y verificables por terceros, que indican cúal mensaje les precede (similar a una cadena de bloques o blockchain). Gracias a las llaves públicas y privadas y a un protocolo de rumor (o gossip), los mensajes se reparten entre los miembros de la red de manera que quedan replicados de modo auditable y seguro entre varios miembros y pueden ser cifrados punto a punto (sólo legibles por su destinatario)o transitar de modo visible de modo similar a los mensajes públicos y directos de las redes sociales, con la garantía de que los últimos no sólo son directos, sin privados. Debido al uso de dicho protocolo, Scuttlebutt está diseñado para no tener un servidor central, sino que cada máquina donde está instalado (ya sea un celular, una tableta, un portatil, un servidor en internet), es un par en igualdad de condiciones que todas las demás máquinas para producir, distribuir y almacenar los mensajes.

Enlaces extra:

Aplicaciones

Las aplicaciones son herramientas de software que interactuan con el protocolo de Scuttlebutt. Las más populares muestran la red social, pero podrían haber otras que usen el procololo de modos diferentes.

  • Scuttlebutt Apps.
  • Patchwork: es el cliente habitual y más usado para la red social.
  • Patchbay: es un cliente experimental para desarrolladores, con características avanzadas como un juego de ajedrez distribuido y una interface con Dark Crystal.
  • Crédito Mutuo.

Patchwork

Como dijimos, es la aplicación más amigable y habitual para usar el protocolo Scuttlebutt y mostrar su red social.

Para instalarlo podemos entrar a su página de descargas y descargar el binario para el sistema operativo (Windows, Mac, Gnu/Linux) o usar el gestor de paquetes de nuestro sistema operativo.

En caso de que se presente algún inconveniente con las fuentes de descarga mencionadas anteriormente, recomendamos usar el instalador de paquetes (para linux) Snaps y seguir las instrucciones para la instalaión de Patchwork.

Así se ve recién se instala patchwork:

Captura de pantalla de Patchworks recién instalado

Ejercio:

  • Un primer mensajes sobre nosostros mismos (about).

  • Un segundo mensaje a la red.

  • Ver los mensajes fuera de la interaz gráfica (interfaz de línea de comandos):

    • Instalar el Scuttlebutt Server
    • Leer los flujos de mensajes desde el servidor.
  • Agregarnos mutuamente (pegar llaves públicas):

    • Agregamos un pub.
    • David: @03SpQOdYjF+zDGe08u55T5jTWkY/g3pRMGZ0ng5RxKc=.ed25519
    • Eduardo: @Orb+xfzIzsGsetj/Wsl6Qpf1ZPV8GjeqxGeRi8aVskU=.ed25519
    • Raoul: @9RNYMejI2M3prFOXJ6CfDYLzWJZ8KuWiNTh/xOfOP5Q=.ed25519
    • Offray: @QRttJgVouWhDWpnZHo2BoT5LkGA1irFA+fY+HkGSksc=.ed25519
    • Leo: @ffoSBAuCEAYPFFvcvMdPd89lzSONw6skT5aUIa59qS0=.ed25519
    • Olivia: @+M3X4SJMblCsnA95laTN7KHSWiYOo9di+vj3DXPAics=.ed25519
    • Natalia: @6vVd8RKbQBJ0do8DruyvdELDXt/T/mHG00OTuI+xHho=.ed25519
    • Carlos: @8jWbdPBRHfWNKhQQKcZwDnmPn14OPcddHU6cCk08Vus=.ed25519
    • Camilo: @Z8gF7Peg2Bbo6bySDxlt+hceoURcDqeknq7rOdWODmA=.ed25519
  • Jessica: @GnOPdSpOi45DO0shJ30J71oC5O2671DFARFoea0OF9c=.ed25519

  • Ver cómo cambia el flujo de información una vez aumentan los amigos.

    • Desde la interfaz gráfica.
    • Desde la consola de comandos.
  • Reciproka: Mercado+Billetara Crédito Mutuo.

    • Interfaz entre Pharo y Scutllebutt.

Desarrollo:

  • Un primer mensajes sobre nosostros mismos (about): Basta con llenar la caja de diálogo de autodescripción mostrada en la pantalla anterior. Con esto el mensaje quedaría así:

    Captura de pantalla de la primera publicación del perfil en Scuttlebutt
  • Un segundo mensaje a la red: Para esto escribimos en la caja que aparece en la parte superior. Al igual que antes, Patchwork nos brindará una vista previa de cómo quedará dicho mensaje, indicando que no puede ser borrado y luego de que confirmemos, nos mostrará como luce dicho mensaje en nuestra línea de tiempo o muro (que el Scuttlebutt se conoce como feed).

    Captura de pantalla de una primera publicación en Scuttlebutt mientras se redactaba.

    Resultado de una publicación realizada en Scuttlebutt
  • Ver los mensajes fuera de la interaz gráfica (interfaz de línea de comandos)

    • Instalar Scuttlebutt Server

      Scuttlebutt server es un programa que nos permite interactuar con la red y el protocolo de Scuttlebutt desde la consola de comandos. Esta hecho sobre NodeJS.

      Instrucciones de instalación de ssb-server.

      Para Manjaro/Arch

      yay -S nodejs

      Para Debian/Ubuntu:

      sudo apt-get install autotools-dev automake
      sudo apt install npm
      npm install ssb-server

      Si se usa la opción -g en el último comando se debe usar también sudo.

      Si se tiene abierto Patchwork NO es necesario lanzar el servidor, pero si no esta abierto, debemos lanzarlo, ejecutando desde la carpeta donde se instaló ssb-server, el comando:

      ./node_modules/.bin/ssb-server start

      Los flujos de mensajes están asociados al usuario que los produce. Para poder verlo hacemos:

      ./node_modules/.bin/ssb-server whoami

      La salida será algo como:

      {
         "id": "@03SpQOdYjF+zDGe08u55T5jTWkY/g3pRMGZ0ng5RxKc=.ed25519"
        }

      Para crear ese feed y mostrarlo en la consola de comandos escribimos:

      ./node_modules/.bin/ssb-server createUserStream --id "@03SpQOdYjF+zDGe08u55T5jTWkY/g3pRMGZ0ng5RxKc=.ed25519"

      La salida es algo como:

      {
          "key": "%SoWlcfGmYCJJPHrzNUWiNXmMuHJQ8W9FsArJivX1s4SQ=.sha256",  
          "value": {
            "previous": null,
            "sequence": 1,
            "author": "@03SpQOdYjF+zDGe08u55T5jTWkY/g3pRMGZ0ng5RxKc=.ed25519",
            "timestamp": 1578336729637,
            "hash": "sha256",
            "content": {
            "type": "about",
            "about": "@03SpQOdYjF+zDGe08u55T5jTWkY/g3pRMGZ0ng5RxKc=.ed25519",
            "image": "&S5lpEPVSxVSN08dTqY6sNKaRGlHka+ZeVnlocU+RBME=.sha256",
            "name": "hiperterminal",
            "description": "Bibliotecario, profesor y bloguero. Investigador en la UOC."
          },
          "signature": "4Xi38tJp29wj9Ch3pe3aqTgZS/+z/CpcsZC3hCd4tyWX+vSg6Lotbcd9Wsy7ceHfDq11GQ6eXcIS2PpCW7GSBQ==.sig.ed25519"
        },
        "timestamp": 1578336729639
      }
      
      {
        "key": "%nfbvD4nhEKGbo78/8xMhnBJbhsaKTS1tAnvbLOVxP4s=.sha256",
        "value": {
          "previous": "%oWlcfGmYCJJPHrzNUWiNXmMuHJQ8W9FsArJivX1s4SQ=.sha256",
          "sequence": 2,
          "author": "@03SpQOdYjF+zDGe08u55T5jTWkY/g3pRMGZ0ng5RxKc=.ed25519",
          "timestamp": 1578341974967,
          "hash": "sha256",
          "content": {
            "type": "post",
            "text": "Mi primer post del 2020: Los libros que me leí en el 2019 http://a.nomono.co/j0",
            "mentions": []
          },
          "signature": "AX02UAdwtWVwkfgcwbzpL0ywguk5rs/ppZdIMnY0PSsw+84faokBPn4doVNl3FeYoV0Au5mBaxlC/RAaGftVAA==.sig.ed25519"
        },
        "timestamp": 1578341974992
      }

    ```

    Que es una representación de la cadena de bloques que mecionamos en la Data Roda 38:

    Si notamos el campo previous del primer mensaje apunta a null (no hay nada antes del primer mensaje) y su llave es %SoWlcfGmYCJJPHrzNUWiNXmMuHJQ8W9FsArJivX1s4SQ=.sha256 y el segundo mensaje tiene como campo previous dicha llave. Así se construye la cadena de bloques de Scuttlebutt.

En caso de que las distintas instalaciones de Patchwork y ssb-server entren en conflicto, es bueno indicar en qué carpeta estamos almacenando nuestros datos, para lo cual exportamos la respecta variable de entorno:

export ssb_appname="ssb"

Agregarnos personas

Para agregarnos desde Patchwork lo que hacemos es que pegamos en la caja superior donde dice “palabra, @key, #canal”

Perfil de Edu
Confirmación antes de empezar a seguir a Edu

Al parecer enviarnos las @llaves no basta para seguirnos directamente. Exploraremos usando un pub para ello.

Usar pubs:

Un pub es un usuario de Scuttlebutt que sigue de manera automática de vuelta a quienes le siguen, con lo cual facilita que la gente se encuentre entre sí.

Usaremos el pub en: https://ssb-pub.picodevelopment.nl/, tomando un enlace de invitación y pegándolo en nuestro botón +Join Server. Los pubs son “amigos” robot, que siguen automáticamente de vuelta a quien les sigue.

Una vez nos hemos agregado, podemos ejecutar de nuevo el comando del feed:

./node_modules/.bin/ssb-server createUserStream --id "@abc123"

Mostrará sólo los mensajes de cada uno. Pero si ejecutamos du -hs ~/.ssb/ dará un espacio “grande”, pues no sólo estamos guardando allí nuestros mensajes, sino el de todos aquellos a quienes seguimos.

Para la siguiente sesión trabajaremos una billetera y mercado de crédito mutuo, llamada Reciproka.

Configurar una red de pruebas (testnet)

  • https://github.com/ssbc/ssb-server/

||