NIP-44: Payload crittografati
NIP-44 definisce uno standard di crittografia versionato per i payload Nostr, sostituendo lo schema di crittografia NIP-04, difettoso, con primitive crittografiche moderne.
Come funziona
NIP-44 versione 2 usa un processo di crittografia in più fasi:
- Accordo della chiave: ECDH (secp256k1) tra le chiavi pubbliche del mittente e del destinatario produce un segreto condiviso
- Derivazione della chiave: HKDF-extract con SHA256 e salt
nip44-v2crea una chiave di conversazione - Chiavi per messaggio: HKDF-expand deriva chiave ChaCha, nonce e chiave HMAC da un nonce casuale
- Padding: Il contenuto riceve padding per nascondere la lunghezza del messaggio
- Crittografia: ChaCha20 crittografa il contenuto con padding
- Autenticazione: HMAC-SHA256 fornisce l’integrità del messaggio
L’output è un payload base64 versionato che va dentro un normale evento Nostr firmato. La specifica richiede ai client di validare la firma dell’evento esterno NIP-01 prima di decrittare il payload interno NIP-44.
Scelte crittografiche
- ChaCha20 invece di AES: più veloce, migliore resistenza agli attacchi multi-key
- HMAC-SHA256 invece di Poly1305: i MAC polinomiali sono più facili da falsificare
- SHA256: coerente con le primitive Nostr esistenti
- Formato versionato: permette futuri aggiornamenti degli algoritmi
Proprietà di sicurezza
- Authenticated Encryption: i messaggi non possono essere manomessi
- Length Hiding: il padding nasconde la dimensione del messaggio
- Chiavi di conversazione: la stessa chiave per conversazioni in corso riduce il calcolo
- Sottoposto ad audit: l’audit di sicurezza di Cure53 non ha trovato vulnerabilità sfruttabili
Note di implementazione
NIP-44 non è un sostituto diretto dei payload NIP-04. Definisce un formato di crittografia, non un kind di evento per messaggi diretti. Protocolli come NIP-17 e NIP-59 definiscono come i payload crittografati vengono usati nei flussi di messaggi reali.
L’input in chiaro è testo UTF-8 con una lunghezza da 1 a 65535 byte. Questo è un vincolo reale per chi implementa: se la tua applicazione deve crittografare blob binari arbitrari, ti serve una codifica aggiuntiva o un formato contenitore diverso.
Limiti
NIP-44 non fornisce:
- Forward Secrecy: chiavi compromesse espongono i messaggi passati
- Post-Compromise Security: recupero dopo la compromissione della chiave
- Deniability: i messaggi sono firmati in modo dimostrabile da chiavi specifiche
- Metadata Hiding: l’architettura dei relay limita la privacy
Per esigenze di alta sicurezza, NIP-104 (double ratchet) o protocolli basati su MLS come Marmot offrono garanzie più forti.
Storia
La revisione 3 di NIP-44 è stata unita a dicembre 2023 dopo un audit di sicurezza indipendente di Cure53. Costituisce la base crittografica per i DM privati di NIP-17 e per il gift wrapping di NIP-59.
Fonti primarie:
Citato in:
- Newsletter #4: NIP Deep Dive
- Newsletter #3: December 2023
- Newsletter #3: December 2024
- Newsletter #12: Marmot
Vedi anche: