Saltar al contenido

Primeros pasos con Nostr: clientes, entidad y NIP05

Tiempo de lectura aprox: 9 minutos, 45 segundos

1- ¿Qué es Nostr?

Nostr es un protocolo de comunicación simple y de código abierto, Open Source (FOSS), similar a protocolos existentes como: SMTP, FTP, Etc. Tiene como propósito o pretende ser resistente a la censura, objetivo que lidera Bitcoin.

Al ser un protocolo de comunicación, se pueden crear muchas cosas sobre él, desde aplicaciones de mensajería similares a WhatsApp, Telegram, Redes Sociales similares a Twitter, y muchas aplicaciones más, inclusive clientes de correo electrónico como Gmail y lo más importante, aplicaciones en las cuales se pueda integrar con Lightning Network.

Nostr encuentra su balance en algún punto entre lo centralizado y descentralizado. El protocolo no depende de Blockchain (lo cual demuestra que NO se requiere de blockchain para todo lo descentralizado), tampoco se requiere de esquemas de consenso distribuido (PoW), tampoco de inicios de sesión, ni el uso token, y menos de un servidor central o de esquemas P2P.

Fecha de creación y creador

Nostr fue creado por @fiatjaf, el cual es developer bitcoiner, originario de Brasil, también es el creador del Bot de Telegram LNTXBOT (dado de baja recientemente) y de la especificación del estándar LNURL de Lightning, el protocolo fue lanzado a producción (Mainnet) en el año *2020.

Popularidad del Protocolo

El protocolo comenzó a ser popular en diciembre de 2022, cuando @jack Ex CEO de @twitter lanzo una iniciativa para crear una red social descentralizada resistente a la censura.

En los comentarios al twitt se le sugirió a Jack darle una revisada al protocolo Nostr y apoyarlo. Unos días más tarde Jack anunció su apoyo con una donación de 14 Bitcoin al proyecto.

Tweet de Jack anunciando el apoyo a Fiatjaf

Activamente se han sumado al desarrollo del proyecto diversos developers, dentro de los cuales podemos destacar entre otros a:

  • a) William Casarin @jb55 quien está liderando el trabajo para un cliente de IOS llamado @damusapp
  • b) Ricardo Arturo Cabral Mejía quien en el mes de octubre junto a  Lunaticoin explicó en español sobre el protocolo, lo puedes ver en YouTube.
  • c) Y muchos otros más, creando diversos clientes.

En Nostr la comunicación se da entre clientes (Apps) y servidores o (relays), donde cada usuario utiliza un cliente (Apps) para conectarse a múltiples relays para intercambiar mensajes.

La idea es que los usuarios NO usen los mismo relays, aquí viene el tema de la prevención de la censura, pues si un relay te censura (banea), puedes moverte a otro.

Imagen publicada por Lunaticoin mostrando diagrama de Nostr

¿Se abren cuentas en Nostr?

Una identidad (cuenta) en Nostr está compuesta por una llave pública (PubKey) y una llave privada. Aquí no hay contraseñas ni nombres de usuarios únicos, tampoco hay e-mail, ni nada de eso.

Una de las cosas más interesantes de Nostr es que con tus llaves, tú te puedes llevar tu contenido a cualquier cliente, el contenido publicado te pertenece solo a ti, nadie de lo puede quitar o censurar.

Referencia de una PubKey de Nostr

El protocolo utiliza una especie de criptografía similar a la que ocurre cuando se utiliza una firma digital de tipo PGP, también utiliza firmas Schnorr, como en Bitcoin.

La evolución (mejora) de Nostr se da por medio de los NIPs (Nostr Implementation Possibilities) que poco a poco van extendiendo y mejorando el protocolo, asegurando compatibilidad e interoperabilidad, bajo consenso entre los desarrolladores.

Puedes ver todos los NIP’s de Nostr aquí. https://github.com/nostr-protocol/nips

Resistencia a la censura

La resistencia a la censura en Nostr se obtiene enviando el contenido propio a más de un relays, ya que, si uno deja de operar, te censura o rechaza, sigues teniendo el poder de comunicarte a través de otros.

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, por el momento un mensaje publicado en Nostr no puede ser eliminado, sí puede ser sustituido.

A diferencia de otras plataformas, Nostr NO promueve que te ates a una única huella digital (identidad). Puedes tener las identidades que quieras, pudieras tener una identidad nueva para cada uno de tus mensajes.

Nostrich es la mascota NO oficial del protocolo Nostr

¿Qué son los Relays?

Un relays básicamente viene siendo como un servidor web, no funcionan como los nodos de Bitcoin (no confundir). Esta es la parte de Nostr que tiende a la centralización, se podrán montar relays con intenciones privadas y ellos (dueños) tendrán la potestad de poder decidir como lo van administrar, inclusive la potestad de banear a usuarios o mensajes, pero tu como usuarios dejas ese relay y te pegas a otro, así de simple.

Cualquiera con el conocimiento base para correr un Servidor Web, técnicamente podría 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 de hardware y espacio para un relay a la fecha son mínimos.

A la fecha (enero 2023) de este artículo hay 90 relays desplegados, los puede ver aquí. https://nostr.watch

Lenguaje de programación de Nostr

Nostr no especifica lenguajes de programación por ser un protocolo, puedes utilizar cualquier lenguaje o base de datos, Nostr permite a los desarrolladores total libertad a la hora de diseñar clientes e implementar un relays. Esto ha atraído desarrolladores y entusiastas de diversos ámbitos.

¿Qué son los clientes?

Básicamente son aplicaciones. A diferencia de las plataformas tradicionales, los clientes no poseen la mayor parte de la lógica de programación, pero en Nostr, los relays son “torpes” y casi toda la lógica la deben aplicar los clientes o aplicaciones.

En enero de 2022, muchos clientes no están tan avanzados a nivel de desarrollo y presentan muchos problemas al ser utilizados, recuerden que es un protocolo que recién se está desarrollando, a continuación, hago mención de los clientes más comunes a la fecha, hay clientes tipo: Telegram (Anigma), Red Social (Astral), etc. Para IOS, Android, Web.

Lista de algunos clientes existentes de Nostr

Uno de los clientes más avanzados para iOS a la fecha es: Damusapp es una aplicación para IOS, desarrollada William Casarin @jb55 es un estilo Red Social como Twitter, tanto así que el UX se ve bastante atractivo, aquí el ejemplo del perfil de Jack.

Perfil de Jack en el cliente de DamusApp

Hay mucho más de que hablar, pero la siguiente parte del artículo, la dedicaré como una pequeña guía para novatos, para que pueden comenzar a utilizar clientes de Nostr, crear sus llaves y comenzar a interactuar con el protocolo, manos a la obra.

2- Guía práctica para crear una identidad en Nostr

Luego de haber hablado de la teoría, vamos con la parte práctica.

Paso 1

Para interactuar con clientes Nostr, lo primero que necesitas hacer es crear tu identidad, recuerda, aquí no hay correos electrónicos ni contraseña, menos datos personales, tu identidad o usuario, estará relacionada con llaves públicas y privadas, suena complejo, pero no lo es tanto.

Puedes crear tu llave pública de 2 maneras, una compleja (usuarios avanzados) y una sencilla (usuarios novatos).

Forma compleja: Puedes crear tu llave pública, aplicándole prueba de trabajo o (PoW), esto para usuarios que manejan la parte técnica, para ello puedes utilizar el descargar los fuentes de un programa llamado RANA creado por @ngunch en el Git del proyecto, están todas la indicaciones para instalarlo, ejecutarlo y generar tus llaves, aquí vas a requerir usar Linux, Git, Rust etc.

Nota: Sí le aplicas una fuerte prueba de trabajo (PoW) con un factor mayor a 30, posiblemente tardes unos días en que la PubKey te sea generada, dependerá del rendimiento de tu máquina.

Imagen de la ejecución de Ishikawa en Ubuntu Linux

2- Puedes generar tu PubKey de una manera sencilla con Alby navegando a su Web Site www.getalby.com si aún no tienes “cuenta” la creas y sigues el proceso, es intuitivo, primero deberás crear tu cuenta relacionada con Lightning Network, similar a lo que ves en la siguiente imagen.

Pantalla de Getalby una vez crear la Lightning Address

Luego de haber creado al Lightning Address, pasas a la parte relacionada con Nostr.

Indicaciones en Getalby para generar la PubKey

Al final lo asocias para poder obtener tu llave pública/privada.

Imagen de Getalby a la hora de generar la PubKey

Tu llave pública se verá así: (npub1qqqqqzsh6acykwafnskm0nl34uq6wyrf4y8qd2d0l8gewq2u82psut3kae) si no se ve igual, no te preocupes, puede ser que te la muestre en formato hexadecimal, lo importante es tenerla.

Nota: al parecer lo que GetAlby te da, no es la PubKey, sino la PrivateKey, pero tranquilo, no pasa nada.

Paso 2

Ya teniendo tu PubKey o PrivateKey, puedes avanzar y proceder a crear tu identidad o cuenta.

Para ello, yo recomiendo usar uno de los clientes más avanzados y con menor riesgo de comprometer tus llaves, a la fecha, el que menos problemas genera a la hora de crear y completar tu perfil es Astral.

Nota: no pondré todas las pantallas, pero el proceso es intuitivo, a groso modo debes hacer lo siguiente:

  • 1- Debes ir al Web Site www.astral.ninja (puede tomar varios segundos cargar la página, tranquilo y paciencia).
  • 2- Debes ingresar tu Pub o Private Key la cual obtuviste y generaste en el paso anterior, la pantalla es intuitiva y le das continuar.
Imagen de Astral al configurar el perfil por primera vez
  • 3- Luego deberás completar los datos de tu perfil.
Imagen de Astral para completar los datos del perfil

Paso 3

Procede a validar tu ID en el directorio de Nostr, donde se facilita encontrar a tus contactos de Twitter para luego añadirlos a tus seguidores.

Imagen de la web nostr.directory

Antes de publicar el twitt, pon entre las comillas tu PubKey y le das enviar, se publicará el twitt en tu timeline y se guardará en el directorio de Nostr.

Texto automático que genera nostr.directory para publicar en Twitter
  • 3- Consulta el directorio poniendo tu username de Twitter y te debe salir algo como esto.
Imagen de la búsqueda en nostr.direcory luego de haber publicado en Twitter

Si encuentras tu usuario, significa que ya estás en esté directorio, notarás que el check no está verde, sino de otro color, significa que aún no estás validado, para validarlo, sigue el próximo paso.

Da clic en la opción 2. Verify your pubkey on nostr

Te saldrá algo como esto. Debes poner tu username de Twitter sin la arroba (@).

Ejemplo para generar el texto para obtener verificación (check verde) en Nostr

Le das en Copy Verification, el resultado será un texto como esté.

@5e7ae588d7d11eac4c25906e6da807e68c6498f49a38e4692be5a089616ceb18 Verifying My Public Key: “ishikawa”

Ese texto lo deberás enviar a Nostr tal cual sin modificar nada. Lo puedes postear aquí. https://branle.netlify.app/ (primero ingresa tu llave pública).

Ejemplo de la publicación del texto en branle.netlify.app

Una vez posteado con éxito, luego de unos minutos, si vuelves a consultar el directorio, ya podrás ver tu check en color verde.

Ejemplo de la cuenta verificada en nostr.directory

Hasta aquí has hecho la verificación, pero a nivel del directorio de Twitter, hay otra verificación a nivel de dominio (NIP05) la cual explicaré a continuación.

3- Validación en base a dominio (NIP05) en Nostr

En esté paso te explicaré como validar Nostr asociado a tu dominio propio, el cual tiene como base el NIP05.

¿Cuál es el beneficio de esta verificación? esta verificación te permite asociar tu identidad a un dominio, y cuando ingresas en diferentes clientes, podrás hacer “login” usando tu validación de dominio, que viendo siendo similar a una dirección de email, en el ejemplo mío es: ishikawa@comercioazul.com

Se verá algo como la imagen (en mi caso es un dominio personalizado)

Perfil de ishikawa ya verificado en Nostr bajo NIP-05

Importante: para hacer esté paso (validar en base a dominio), previamente debes haber creado tu identidad en Nostr (paso 2 de esta guía).

Dado que es un dominio personalizado (propio), se entiende que tú tienes acceso y administración o puedes apoyarte con el administrador (tu amigo, empleado).

  • 1- El primer paso, es crear un archivo llamado: _config.yml

Dentro del archivo debes agregar el siguiente texto.

include: [“.well-known”]
  • 2- El segundo paso, será crear un directorio el cual deberás llamar: .well-known
  • 3- Dentro del directorio deberás crear un archivo con extensión JSON, el cual deberás llamar: nostr.json

Dentro del archivo, deberás agregar el siguiente texto.

{
“names”: {
“ishikawa”: “0000000a1xxxxxxxxxxx06a9aff9d19xxxxxxxxxxxx7015c3a83”
}
}

Deberás sustituir ishikawa por tu nombre de usuario, de preferencia que sea el mimo con el que validaste en el directorio de Nostr, el de Twitter.

En lugar del número con las XXX que se muestra, deberás poner tu PubKey, es importante hacer notar que, debes poner el valor hexadecimal de tu Key y no el que comienza con: npub1, para obtener la PubKey en valor hexadecimal lo puedes ver en el cliente de www.astral.ninja

Al final debería ver algo así la estructura de directorios.

Estructura de carpetas al crear el archivo base para subir al dominio propio
  • 4- Habiendo creado el directorio, el archivo y habiendo agregado los datos dentro del archivo, estás listo para subirlo a tu hosting, el cual está relacionado a tu dominio.

Puedes utilizar un cliente FTP como FileZilla o inclusive lo proveedores de hosting, te permiten subir archivos por medio del CPanel de tu cuenta.

  • 5- Una vez subidos, deberías poder consultar la ruta desde la internet, sería similar a esté resultado.

Escribir en el navegador: www.tudominio/.well-known/nostr.json

Ejemplo de como debe versé el archivo al ser consultado desde la web

Hasta aquí has hecho la primera parte, yo me tope con un problema, debes habilitar en tu hosting, el permiso para que se pueda consultar archivos de tipo JSON por medio de https, es sencillo de hacerlo, una de las maneras es agregar al archivo (.htaccess) el siguiente código. El archivo en mención debe estar en la raíz del dominio, si no existe se debe crear.

<FilesMatch “\.(json)$”>
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin “*”
#Header always set Content-Security-Policy “upgrade-insecure-requests;”
</IfModule>
</FilesMatch>

Adicional: También asegúrate que tu hosting (dominio) este habilitado para recibir peticiones de tipo CURL

Se te desplegará algo como esto (ver imagen)

Pantalla de configuración para completar el perfil para agregar el dominio (NIP05)

Donde dice NIP-O5 identifier, deberás poner tu dirección tipo email, en mi ejemplo: ishikawa@xxxxxazul.com

en tu caso reemplaza por tu usuario el que pusiste en el archivo nostr.json y el dominio donde subiste el archivo, el dominio.

En el momento de ponerlo y guardarlo, Nostr tratará de validar y si todo está correcto, luego de guardar y refrescar tu perfil en Astral.ninja ya deberás ver ya validado tu NIP05, de tipo email, se vería algo como esto.

Perfil ya configurado bajo dominio de Ishikawa

También he sabido que puedes hacerlo desde tu cuenta de GitHub, haciendo el despliegue de páginas y subiendo los archivos, utilizando el dominio de Git, como ejemplo te quedaría algo así: ishikawa@ishikawa.github.io tarea: investiga como desplegar páginas web con GitHub, y el proceso sería casi igual al descrito para un dominio propio.

Luego hay otra opción (la más utilizada por facilidad) para validar tu NIP05 en base a dominio y es utilizando terceros, como puede ser GetAlby o también https://twitter.com/NostrPlebs en este último debes pagar como mínimo 10,000 Sat.

Mi opinión: El problema que veo con estos servicios de terceros, es que debes confiar en ellos y si el dominio desaparece, te quedarás sin nada, o si requieres asociar otra PubKey adicional a tu dominio, posiblemente deberás pagar nuevamente, el proceso que he mostrado es para dominios propios, a mi criterio es el mejor, tienes pleno control, obvio no todos tienen un dominio propio.

Conclusión

El protocolo Nostr tiene mucho potencial, más clientes se irán creando y las funcionalidades serán más diversas, especialmente a los Bitcoiners nos emociona porque se adapta a la filosofía de Bitcoin, y será posible construir opciones que permitan mejorar la privacidad y la resistencia a la censura, maravilloso ¿verdad?

He procurado poner los link de las referencias de las cuales me he apoyado para escribir esté artículo. Te recomiendo escuchar el podcast de Lunaticoin el L164.

Gracias por tu atención, si hay errores o cosas que agregar déjamelas saber en mi Twitter Telegram

Sí te gustó el artículo, puedes dejarme una propina vía LN aquí: strike.me/ishikawa

Sobre el autor de este artículo.