Passa al contenuto
Torniamo a Nymchat

Base di conoscenza Sotto il cofano

Protocollo ed eventi

Ciò che Nymchat mette effettivamente in onda, per chiunque si oppone a ciò, controllandolo o leggendo eventi da un altro client Nostr.

Tipi di eventi

TipoUsato perNote
0Metadati del profiloProfilo Nostr standard: nome, immagine, banner, informazioni, lud16.
5Richieste di cancellazioneNIP-09.
7ReazioniNIP-25, con a ['k', originalKind] tag in modo che venga inviata una reazione contro il tipo di canale corretto.
13FocaLo strato intermedio di un messaggio NIP-17.
14Voce di messaggio privatoNon firmato e mai pubblicato da solo.
1059Confezione regaloNIP-59. Ciò che effettivamente raggiunge un relè per messaggi privati ​​e chat di gruppo.
1984SegnalazioneNIP-56.
9734 / 9735Richiesta zap e ricevuta zapNIP-57.
10030Elenchi di pacchetti emoji personalizzatiNIP-30.
20000Messaggio del canale GeohashEffimero, taggato ['g', geohash].
23333Messaggio del canale denominatoEffimero, taggato ['d', channel].
24420 / 24421Indicatori di digitazione pubblici e conferme di letturaSpecifico per Nymchat, per canali pubblici.
25051 / 25052Segnalazione peer-to-peer e stato del trasferimento fileSpecifico per Nymchat.
30030Set di emoji personalizzatiNIP-30.
30078Dati dell'applicazioneNIP-78. Sondaggi e sincronizzazione delle impostazioni crittografate.
69420Conferme di lettura private e stato di consegnaSpecifico per Nymchat, trasportato come voce all'interno di una confezione regalo. Un tipo separato da 14 deliberatamente, in modo che altri client NIP-17 non restituiscano messaggi diretti vuoti per ogni ricevuta.

NIP implementati da Nymchat

NIPCosa dà Nymchat
NIP-07Accedi con un'estensione del browser.
NIP-09Richieste di cancellazione.
NIP-13Prova di lavoro. I messaggi in uscita vengono estratti ad almeno 16 bit.
NIP-17Messaggi diretti privati ​​e base per chat di gruppo.
NIP-25Reazioni.
NIP-30Emoji personalizzate.
NIP-40Timestamp di scadenza: messaggi che scompaiono.
NIP-44Crittografia con versioni, utilizzata per sigilli, involucri e sincronizzazione delle impostazioni.
NIP-46Firma remota — bunker://.
NIP-56Segnalazione.
NIP-57I fulmini colpiscono.
NIP-59Confezioni regalo.
NIP-78Dati applicativi arbitrari.
NIP-98Autenticazione HTTP, per gli endpoint ospitati.

Crittografia

DoveChe cosa
Identità e firmesecp256k1 con firme Schnorr (BIP-340), come specifica Nostr.
Messaggi privati ​​e chat di gruppoNIP-44 v2: ECDH su secp256k1, HKDF-SHA256, ChaCha20 con HMAC-SHA256 e riempimento in modo che la lunghezza del testo cifrato non fornisca la lunghezza del messaggio.
Sessioni mesh BluetoothNoise XX: X25519, ChaCha20-Poly1305 (IETF), Ed25519 per le firme degli annunci, SHA-256 e HMAC sotto.
Identità in riposoAES-GCM-256. La chiave proviene da PBKDF2-SHA256 a 310.000 iterazioni per una password o un PIN oppure da un output PRF WebAuthn tramite HKDF-SHA256 per una passkey o un codice biometrico.
Chiamate e trasferimenti di fileDTLS-SRTP di WebRTC, negoziato tramite segnalazione con wrapper NIP-17.
CasualitàLa piattaforma CSPRNG ovunque: chiavi, nonce e jitter del timestamp della confezione regalo.

Protezione dei metadati

Vale la pena menzionare due dettagli nel percorso della confezione regalo, perché sono ciò che separa NIP-59 da "criptato, ma ovviamente da te a loro":

  • Ogni involucro è firmato da a chiave una tantum generato solo per quel messaggio, quindi non esistono due wrap che condividono lo stesso mittente.
  • Ogni avvolgimento è created_at È retrodatati casualmente fino a due ore utilizzando CSPRNG, quindi i tempi di invio e ricezione non possono essere allineati.

Le chat di gruppo aggiungono effimeri rotanti destinatario tasti oltre a quello - vedi Come funziona la crittografia di gruppo.

Leggendo la fonte

Le primitive crittografiche sono presenti js/nym-crypto.js E js/modules/key-vault.js nell'app Web e sotto android-ios-app/lib/core/crypto/ E lib/services/mesh/noise/ nell'app Flutter. IL deposito è AGPL-3.0 e completo: non esiste alcun componente chiuso di cui fidarsi.