NIP-104 definisce messaggi diretti crittografati end-to-end utilizzando un protocollo double ratchet (basato sull’architettura di Signal), fornendo forward secrecy e post-compromise security per le conversazioni Nostr.

Perché È Importante

Le soluzioni DM esistenti su Nostr hanno limitazioni:

  • NIP-04: Cripta il contenuto ma espone i metadati
  • NIP-17 + NIP-59: Risolve la perdita di metadati tramite gift-wrapping ma manca di forward/backward secrecy

NIP-104 completa il quadro: se la chiave privata di un utente viene compromessa, gli attaccanti non possono leggere i messaggi passati (forward secrecy) né continuare a leggere i messaggi futuri indefinitamente (post-compromise security).

Come Funziona

Configurazione Iniziale (X3DH)

Due parti eseguono uno scambio triplo Diffie-Hellman esteso utilizzando chiavi di identità e prekeys per derivare una chiave radice condivisa iniziale.

Il Double Ratchet

  1. DH Ratchet: Ogni volta che le parti scambiano messaggi, vengono generate nuove chiavi Diffie-Hellman, producendo nuove chiavi radice e chiavi di catena
  2. Symmetric Ratchet: Catene separate di invio e ricezione derivano chiavi di messaggio individuali per ogni messaggio

Questa rotazione continua delle chiavi assicura che compromettere una chiave riveli un contenuto minimo di messaggi.

Event Kinds

  • Kind 442: Pubblica le prekeys dell’utente per l’inizializzazione X3DH
  • Kind 443: Configurazione iniziale della conversazione con primo messaggio crittografato
  • Kind 444: Messaggi crittografati successivi in conversazioni stabilite

Tutti i messaggi crittografati sono avvolti in eventi GiftWrap kind 1059 per la protezione dei metadati.

Tag Chiave

  • p - Chiave pubblica del destinatario
  • prekey - Prekey del destinatario per il calcolo DH
  • dh_sending - Chiave pubblica DH di invio corrente
  • current_index - Numero del messaggio nella catena
  • previous_length - Lunghezza della catena di messaggi precedente

Limitazioni

I messaggi funzionano per coppia dispositivo-client. La sincronizzazione tra più dispositivi richiede un’inizializzazione separata per ogni dispositivo, un compromesso per una maggiore sicurezza.


Fonti primarie:

Menzionato in:

Vedi anche: