Saltar al contenido

Nostr: Solucionando la censura de una vez por todas

Tiempo de lectura aprox: 6 minutos, 44 segundos

¿Qué es Nostr?

Es un protocolo de comunicación simple, ligero, abierto y resiliente con arquitectura pub-sub que busca resolver el problema de la censura creando una red social para todos.

El nombre viene de Notas y Otras Cosas Transmitidas por Relés (Relays) traducido al inglés.

🗣 Fiatjaf es el autor original de Nostr, un bitcoiner de Brasil, creador de LNTXBOT y de la especificación del estándar LNURL (codificación bech32 para interactuar con wallets Lightning).

En Nostr la comunicación se da entre clientes y servidores (llamados relays), donde cada usuario utiliza un cliente para conectarse a múltiples relays con los cuales intercambiar mensajes. El protocolo no establece que los relays se comuniquen entre sí y en la práctica estos no lo hacen.

arquitectura nostr client-servidor donde los clientes se conectan a múltiples relays y los relays no se conectan entre si

Una identidad en Nostr esta compuesta por una llave pública y una llave privada. No hay contraseñas ni nombres de usuario únicos. Es trivial crear una nueva identidad, y se hace utilizando firmas Schnorr.

Aunque Nostr fue pensado inicialmente con la idea de reemplazar Twitter, considero que tiene el potencial de ser mucho más que esto. Mi intención con este artículo es iluminar a cada lector de como Nostr es superior a lo que hemos visto anteriormente.

Filosofía

En Nostr los relays estan diseñados para que sean simples y ligeros (tontos) y que sean los clientes los encargados de ofrecer características avanzadas y complejas, esto con la finalidad de empoderar a los usuarios y restarle importancia a cada relay de manera individual. El efecto que se busca es el de reducir la fuerza de centralización que cada relay ejerce; Si por el contrario cada relay se destacara por ofrecer valor agregado mediante funcionalidades únicas, los usuarios tendrían la tendencia de conectarse al relay que esté a la vanguardia.

A diferencia de otras plataformas que buscan crear la red social perfecta, Nostr se acerca al problema de una manera distinta: proveyendo únicamente las piezas mínimamente necesarias y que a través de la evolución del protocolo y del ecosistema por consenso y utilización emerja la red social que el mundo necesita. Esto contrasta con el pensar de algunos que prefieren que Nostr resuelva todos los problemas imaginables de entrada.

La evolución de Nostr ocurre a través de documentos llamados NIPs (Nostr Implementation Possibilities) que poco a poco van extendiendo el protocolo, asegurando compatibilidad e interoperabilidad bajo consenso entre los desarrolladores. Aunque no siempre se cumple, uno de los requerimientos para que un NIP sea aprobado es que exista una implementación utilizando la funcionalidad propuesta.

Nostr encuentra su balance en algún punto entre lo centralizado y descentralizado. El protocolo no depende de blockchains, de esquemas de consenso distribuido, de inicios de sesión propietarios, de criptomonedas, de un servidor central o de esquemas P2P; como usuario te conectas con algún cliente a uno o mas relays e intercambias contenido con otros usuarios a través de estos relays. No se espera que todos los usuarios se conecten a un mismo relay todopoderoso o que exista una red global, sino que cada comunidad tenga su propio relay.

Nostr no intenta crear un nuevo sistema de identidad única y global, ya que se considera esto un intento futil que tiene como efecto la centralización. Las llaves públicas y privadas son en esencia la única información que identifica a un usuario y todo lo demás es adorno. En la actualidad hay un NIP que especifica como asociar una identidad con un usuario dentro un dominio y a futuro se espera que se puedan asociar identidades con otras redes sociales.

💡 De manera curiosa e interesante, “nostre” en catalán y “noster” en latín significan “nuestro”.

Censura

La resistencia a la censura en Nostr se obtiene enviando el contenido propio a más de un relay, ya que si uno deja de operar, te censura o rechaza, sigues teniendo el poder de comunicarte a través de otros. Es prerrogativa de cada quién a cuales y a cuantos relays uno se conecta pero se recomienda que sea al menos a un puñado. Aunque el protocolo Nostr no especifica que los relays deben comunicarse entre si, y efectivamente no hay comunicación entre estos, es muy sencillo crear espejos entre relays y mantenerlos a la par. Es trivial migrar de un relay a otro si el cliente que utilizas te permite guardar tu contenido (o descargarlo) y reenviarlo.

En Nostr cada usuario es dueño irrevocable del contenido que publica ya que el mismo es inmutable y firmado criptográficamente. Un relay no tiene la capacidad de modificar el contenido de los usuarios, por lo que cada quien recibe la información tal cual fue enviada. Cualquier cliente puede verificar si un mensaje ha sido manipulado de manera muy sencilla.

Otras plataformas no permiten al usuario migrar entre servidores por diseño o por omisión, o requieren de la cooperación de los dueños, o te expulsan sin remedio. Tu identidad en Nostr no esta controlada por terceros ya que no es más que un par de llaves criptográficas Schnorr sobre la curva elíptica Secp256k1 que puedes generar por tu propia cuenta o con un cliente. Los demás usuarios te reconocen por tu llave pública. El proceso es muy similar a como eliges las llaves de tu wallet de Bitcoin.

A diferencia de otras plataformas, Nostr no promueve que ates tu huella en el Internet a una única identidad. Puedes tener todas las identidades que quieras en Nostr, de hecho y aunque poco práctico, pudieras tener una identidad nueva para cada uno de tus mensajes.

La censura no se debe malinterpretar como una licencia para comunicarse sin consecuencias; cada persona sigue siendo responsable del efecto que tengan sus mensajes una vez hecho públicos. Se espera que sean los clientes que ofrezcan funcionalidades para moderar la experiencia que tiene cada usuario.

Spam

Es posible elegir identidades casi de manera instantánea (“crear cuentas”) y firmar nuevo contenido criptográficamente con Schnorr es igual de trivial. Todas las identidades en Nostr ya existen y es cuestión de elegir una al azar. Es crucial que para que Nostr sobreviva al asedio de los spammers y no termine siendo víctima de su propio éxito se establezcan frenos como resistencia a ataques Sybil.

Para mitigar el spam, los relays pueden implementar cuotas, limites de velocidad, requerimiento de pago para publicar contenido. Como cada mensaje en Nostr está identificado de manera única por su ID (que es un hash), es posible requerir que cada mensaje sea minado de forma tal que cumpla con cierta dificultad establecida (Proof of work). La dificultad requerida para cada mensaje puede adaptarse según factores globales como el tráfico y congestión o por el tamaño del contenido.

Los clientes optarán por conectarse a relays que ofrezcan controles de calidad y de manera individual se suscribirán a identidades conocidas por producir contenido genuino y de calidad. En un futuro, Nostr contará con una o mas redes de confianza (Webs of Trust), con las cuales se podrá discriminar contenido confiable de no confiable.

Es posible minar un par de llaves cuya parte pública cumpla con cierta dificultad (Proof of Work), pudiendo ser este un requisito a futuro. Hoy en día es posible gracias a la herramienta Nostril, que permite minar llaves públicas que empiecen con una cantidad de ceros.

Funcionamiento

Los clientes se comunican con los relays utilizando WebSockets e intercambian mensajes en formato JSON. Los clientes pueden crear suscripciones (REQ), cancelarlas (CLOSE) o enviar eventos (EVENT) a los relays.

Un evento esta compuesto por su ID (hash del evento), tipo de evento, llave pública del emisor, contenido, fecha, etiquetas (metadata) y la firma del emisor. El ID del evento se obtiene computando el SHA256 del evento en su forma canónica. La firma en un evento se computa utilizando la llave privada del emisor utilizando Schnorr.

Cada suscripción incluye uno o más filtros, los cuales indican al relay cual es el contenido de interés para el usuario. Es posible restringir el contenido a recibir por ID del evento (o prefijo), por llave pública (o prefijo), por uno o mas tipos de evento, por rango de fecha o por etiquetas. Cuando un relay recibe una suscripción este busca en su base de datos todos los eventos que cumplan con los filtros y los envía al cliente. Nuevos eventos que cumplan con las condiciones de uno de los filtros son de igual forma reenviados al cliente en tiempo real. Cuando un cliente esta satisfecho con los eventos recibidos puede cerrar una suscripción enviendo un mensaje CLOSE.

Es posible crear suscripciones sin poseer una identidad pero no es posible enviar eventos sin una. Esto se debe a que el mensaje para crear una suscripción (REQ) no requiere de una llave pública o privada.

Relays

Cualquiera con el conocimiento suficiente para correr un servidor Web técnicamente puede operar un relay. Es posible correr un relay en un ordenador local y hacerlo público a través de Tor o I2P. Los requisitos para un relay a la fecha son mínimos: todos los eventos enviados hasta la fecha de edición de este artículo ocupan menos de 200 MB de almacenados en PostgreSQL y SQLite. El tamaño averaje en bytes de un evento en formato JSON es de unos 550 bytes. Tomando en cuenta que existen approximadamente unos 105,000 eventos únicos segun https://nostr.io/stats, podemos estimar que recibirlos todos consumiría cerca de 60 megabytes.

El protocolo Nostr no especifica lenguajes de programación, plataformas, base de datos, etc., lo que permite a desarrolladores total libertad a la hora de diseñar e implementar un relay. Esto ha atraído desarrolladores y entusiastas de diversos ámbitos. Actualmente existen implementaciones en C#, Rust, Go, Java, Python, Kotlin, JavaScript, TypeScript y Clojure. Estas implementaciones de relays utilizan como base de datos SQLite o PostgreSQL.

Se destacan las siguientes implementaciones de relays:

Aplicaciones

Nostr fue diseñado con la idea de que algún día pueda reemplazar Twitter como plataforma, pero aparte de esto también puede ser utilizado para lo siguiente y mucho más:

  • Mensajería directa e instantánea
  • Salas de chat públicas
  • Canales de noticias
  • Foros
  • Páginas Web
  • Repositorio de código
  • Comunidades virtuales
  • Puentes de otras redes sociales hacia Nostr (Email, Twitter, Mastodon, etc.)
  • Juegos (Damas, Ajedrez)
  • Colaboración en tiempo real
  • Clon de Uber
  • Lectores RSS
  • Coinjoin
  • Automatización y domótica
  • Votaciones

Nostr no intenta ser la plataforma de comunicación para todos los propósitos: de igual forma como no usarías Twitter para intercambiar información clasificada con un activista, no usarías una red social pública como Nostr para tal fin.

Redes sociales como Minds.com son capaces de integrar con Nostr íntimamente, otorgando a cada usuario en su red una identidad en Nostr custodiada por ellos mismos.

Nostr esta enfocado a mensajería utilizando texto estructurado, por lo tanto no es óptimo para enviar archivos o mensajes multimedia.

Clientes

Los clientes se destacan por las funcionalidades particulares que ofrecen, siendo esta capa del protocolo donde existe la mayor competencia por la atención de los usuarios.

Hay clientes nativos para iOS, para la Web, y para Windows, Linux y Mac. Hay al menos dos implementaciones de clientes para Android en desarrollo. Como cada cliente determina la experiencia que vas a tener en Nostr es recomendable probar más de un cliente.

Actualmente, se destacan los siguientes clientes sin orden en particular:

Es posible incrustar un cliente Nostr en cualquier página Web, ya que la tecnología necesaria hoy día es común en todos los navegadores. Extensiones para navegadores como Alby permiten a los usuarios utilizar su Lightning node/wallet para crear su identidad en Nostr.

Nos2x es una extensión para navegador Web que le permite al usuario almacenar la llave privada de Nostr y utilizar cualquier cliente sin revelar la misma a dichos clientes. El cliente le pasa a la extensión los eventos pendientes por encriptar, desencriptar o firmar, esta realiza la operación y esta luego entrega el mensaje de vuelta al cliente.

Algunos clientes están implementando Lightning para dar propinas, ya sea directamente con un Nodo Lightning utilizando la funcionalidad Comando o a través de servicios como LNBits.

Contribuye

Si estas interesado en contribuir a Nostr, entra al grupo de desarrollo de Nostr en Telegram haciendo clic aquí.