Che cos’è NOSTR? Notes and Other Stuff Transmitted by Relays
Tradotto dall’originale di Bitcoin Magazine – pubblicato il 13 nov 2023
Nostr, Notes and Other Stuff Transmitted by Relays (Note e altre cose trasmesse dai relay) è un protocollo che consente comunicazioni resistenti alla censura attraverso una serie di server relay non correlati, utilizzati per ospitare e servire i messaggi agli utenti. Le identità degli utenti sono semplicemente coppie di chiavi crittografiche, che consentono loro di possedere interamente la propria identità.
Tutti i messaggi sono firmati con le loro chiavi di identità, impedendo la manomissione degli stessi in qualsiasi forma. I relay fungono da intermediari nel processo di trasmissione, assicurando una comunicazione continua e affidabile tra mittenti e destinatari.
Capire le basi di Nostr
Nostr è costruito attorno al concetto di eventi, il formato di base dei messaggi con cui i client comunicano inviando o scaricando eventi ai server relay. Ogni evento ha una struttura di base che comprende:
la chiave d’identità pubblica che l’ha creato
la firma della chiave d’identità che l’ha creato
il contenuto effettivo del messaggio
altri eventi a cui potrebbe essere collegato, come i messaggi a cui un utente sta rispondendo, le citazioni, ecc.
Questo garantisce l’integrità dei dati per tutti i messaggi, impedendone qualsiasi alterazione dopo la sua creazione. La modifica di un singolo bit di un messaggio invaliderebbe la firma.
Garantisce inoltre che gli utenti siano completamente padroni della loro identità. Nessuno può portarvi via la vostra identità, poiché si tratta semplicemente di una chiave privata di cui solo voi siete in possesso, a differenza di Twitter dove il vostro (@handle) è semplicemente un’identità che Twitter vi presta e che controlla interamente.
Inoltre, poiché tutti gli eventi di Nostr sono firmati dalla chiave d’identità dell’utente, è impossibile per chiunque pubblicare fraudolentemente messaggi come un altro utente senza compromettere la chiave privata di quest’ultimo.
Il ruolo dei relays nella trasmissione
I relay sono il meccanismo con cui i diversi utenti di Nostr interagiscono tra loro. Due relays non comunicano mai tra loro, ma interagiscono direttamente con i client degli utenti. Ogni utente, quando crea un evento, può inviarlo a tutti i relay che desidera, idealmente a più relay per ottenere una ridondanza. Gli altri utenti possono quindi interrogare i relays per trovare eventi specifici, eventi creati da un utente specifico o altri criteri.
Ogni relay è libero di stabilire le proprie politiche che regolano quali eventi accettare e a quali condizioni. Alcuni relay sono completamente gratuiti per postare e scaricare eventi, altri fanno pagare una tantum, ci sono persino proposte di Nostr per relay che richiedono una proof-of-work in stile hashcash prima che un client possa postare un evento sul server.
Ogni relay è anche libero di limitare gli utenti che possono o non possono pubblicare eventi sul server. Nel complesso, Nostr è in grado di funzionare in modo resistente alla censura, perché i clienti possono chiedere eventi a qualsiasi relay online. Se un relay server si rifiuta di accettare eventi da un utente specifico, può notificare ai follower altri relay server che accetteranno i loro eventi, e gli altri utenti possono semplicemente iniziare a interrogare questi relay per vedere i messaggi dell’utente censurato.
Questa capacità dei client di interrogare simultaneamente un numero qualsiasi di relay server indipendenti per ottenere eventi è ciò che garantisce la resistenza complessiva di Nostr alla censura.
Damus: implementazione di un client e di un relay Nostr
Damus è il client mobile più diffuso per Nostr, disponibile su iOS, nonché uno dei più grandi server relay attualmente in funzione. Damus è stato sviluppato da William Casarin, uno sviluppatore che in precedenza lavorava alla rete Lightning.
Ha iniziato a sviluppare Damus come progetto a tempo perso dopo aver conosciuto il protocollo Nostr ed è il co-autore di NIP-57 nelle specifiche del protocollo stesso. Il NIP-57 definisce gli “Zaps“, ovvero i pagamenti Lightning integrati in Nostr come una forma di pulsante “like” nella maggior parte dei protocolli dei social media.
Damus ha fatto progredire Nostr implementando nuovi NIP (Nostr Implementation Possibilities, n.d.t.), o funzionalità per il protocollo Nostr, sin dalla creazione del client.
Il futuro di Nostr
Attualmente l’uso dominante del protocollo Nostr è per le applicazioni di social media che sono effettivamente cloni di Twitter con una base decentralizzata e resistente alla censura. In linea di principio, si può fare molto di più con il protocollo. È possibile costruire altre varianti di social media come Instagram o Facebook. Anche le versioni decentralizzate di applicazioni come GitHub o Google Docs sono possibili. I potenziali tipi di applicazioni che è possibile costruire su Nostr sono limitati solo dall’immaginazione di chi li costruisce.
ALTRE INFORMAZIONI
Quanto sotto riportato, non fa parte dell’articolo originale ma sono alcune considerazioni personali e una raccolta di risorse utili per chi volesse approfondire.
La mia identità pubblica (pubkey)
npub16zej035g4te9pfak9alj4yk3hnsyyjhfp2nxfzglnwgqwxh8frpqpqtpd9
Considerazioni
Nostr rappresenta il più semplice protocollo aperto in grado di creare una rete “sociale” globale resistente alla censura una volta per tutte. Non si affida a nessun server centrale fidato, quindi è resiliente; si basa su chiavi crittografiche e firme, quindi è a prova di manomissione.
Breve riassunto
Tutti hanno un client. Può essere un client nativo, un client web, ecc. Per pubblicare qualcosa, si scrive un post, lo si firma con la propria chiave (il processo di firma è automatizzato nel client usato, nessuna operazione è richiesta all’utente) e lo si invia a più relay (server ospitati da qualcun altro o da se stessi). Per ottenere aggiornamenti da altre persone, si chiede a più relay se sanno qualcosa di queste altre persone. Chiunque può gestire un relay. Un relay è molto semplice e stupido. Non fa altro che accettare i messaggi di alcune persone e inoltrarli ad altre. I relay non devono essere affidabili. Le firme sono verificate sul lato client.
Come funziona Nostr?
Ci sono due componenti: i client e i relay. Ogni utente gestisce un client. Chiunque può gestire un relay.
Ogni utente è identificato da una chiave pubblica. Ogni messaggio è firmato. Ogni client convalida queste firme.
I client recuperano i dati dai relay di loro scelta e pubblicano i dati ad altri relay di loro scelta. Un relay non parla con un altro relay, ma solo direttamente con gli utenti.
Per esempio, per “seguire” qualcuno, un utente deve solo istruire il proprio client a interrogare i relay che conosce per trovare i post di quella chiave pubblica.
All’avvio, un client interroga i dati di tutti i relay che conosce per tutti gli utenti che segue (ad esempio, tutti gli aggiornamenti dell’ultimo giorno), quindi li mostra all’utente in ordine cronologico.
Un “post” può contenere qualsiasi tipo di dati strutturati, ma quelli più utilizzati verranno inseriti nello standard in modo che tutti i client e i relay possano gestirli senza problemi.
Domande ricorrenti
Quante identità posso avere?
Infinite, si tratta solo di generare per ognuna di loro la coppia di chiavi crittografiche e mantenere al sicuro la chiave privata.
Come creo la mia coppia di chiavi crittografiche pubblica/privata?
Ogni account Nostr si basa su una coppia di chiavi pubbliche e private. Un modo semplice di pensare è che la chiave pubblica è il nome utente e la chiave privata è la password, con un’importante avvertenza. A differenza della password, la chiave privata non può essere ripristinata in caso di smarrimento.
La chiave pubblica è generalmente presentata come una stringa con il prefisso npub1 e la chiave privata con il prefisso nsec1. Assicuratevi di conservare la chiave privata in un luogo sicuro, come un gestore di password.
Consiglio di generare una coppia di chiavi localmente sulla riga di comando del terminale o della console del proprio computer, invece di affidarsi al client nostr. È possibile farlo eseguendo:
$ openssl rand -hex 32
Il comando precedente genera una chiave privata. La chiave pubblica può essere ricavata matematicamente inserendo la chiave privata appena generata nell’applicazione client nostr.
Utente verificato con NIP-05. Di cosa si tratta?
Se si vuole essere utenti verificati NIP-05 (come il segno di spunta blu su Twitter) sul proprio sito web, creare un file .well-known/nostr.json con il proprio nome utente e la pubkey in formato esadecimale, e poi aggiungerlo al proprio profilo nel client Nostr.
Ad esempio, ho creato https://bitcoinstan.io/.well-known/nostr.json con questo contenuto:
{
“names”: {
“italiansatoshi”: “d0b327c688aaf250a7b62f7f2a92d1bce0424ae90aa664891f9b90071ae748c2”
}
}
e poi nel mio profilo Nostr nel mio client preferito ho aggiunto italiansatoshi@bitcoinstan.io (in modo da cercare l’userid italiansatoshi in nostr.json sul nome di dominio bitcoinstan.io). È inoltre possibile acquistare un id NIP-05 su https://nostrplebs.com/ se non è possibile farselo da solo.
Per trasformare la chiave pubblica (npub1…) in formato esadecimale (d0b327…) consiglio di utilizzare questo tool.
Risorse web
la raccolta più completa di materiale (so far…)
il repository ufficiale GitHub di Nostr
confronto delle funzionalità dei client Nostr
le prime 50 pubkey per numero di follower
configurare un relay personale (in inglese)