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.
Questa pagina è tradotta automaticamente per comodità. Si applica l'originale inglese.
Tipi di eventi
| Tipo | Usato per | Note |
|---|---|---|
0 | Metadati del profilo | Profilo Nostr standard: nome, immagine, banner, informazioni, lud16. |
5 | Richieste di cancellazione | NIP-09. |
7 | Reazioni | NIP-25, con a ['k', originalKind] tag in modo che venga inviata una reazione contro il tipo di canale corretto. |
13 | Foca | Lo strato intermedio di un messaggio NIP-17. |
14 | Voce di messaggio privato | Non firmato e mai pubblicato da solo. |
1059 | Confezione regalo | NIP-59. Ciò che effettivamente raggiunge un relè per messaggi privati e chat di gruppo. |
1984 | Segnalazione | NIP-56. |
9734 / 9735 | Richiesta zap e ricevuta zap | NIP-57. |
10030 | Elenchi di pacchetti emoji personalizzati | NIP-30. |
20000 | Messaggio del canale Geohash | Effimero, taggato ['g', geohash]. |
23333 | Messaggio del canale denominato | Effimero, taggato ['d', channel]. |
24420 / 24421 | Indicatori di digitazione pubblici e conferme di lettura | Specifico per Nymchat, per canali pubblici. |
25051 / 25052 | Segnalazione peer-to-peer e stato del trasferimento file | Specifico per Nymchat. |
30030 | Set di emoji personalizzati | NIP-30. |
30078 | Dati dell'applicazione | NIP-78. Sondaggi e sincronizzazione delle impostazioni crittografate. |
69420 | Conferme di lettura private e stato di consegna | Specifico 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
| NIP | Cosa dà Nymchat |
|---|---|
| NIP-07 | Accedi con un'estensione del browser. |
| NIP-09 | Richieste di cancellazione. |
| NIP-13 | Prova di lavoro. I messaggi in uscita vengono estratti ad almeno 16 bit. |
| NIP-17 | Messaggi diretti privati e base per chat di gruppo. |
| NIP-25 | Reazioni. |
| NIP-30 | Emoji personalizzate. |
| NIP-40 | Timestamp di scadenza: messaggi che scompaiono. |
| NIP-44 | Crittografia con versioni, utilizzata per sigilli, involucri e sincronizzazione delle impostazioni. |
| NIP-46 | Firma remota — bunker://. |
| NIP-56 | Segnalazione. |
| NIP-57 | I fulmini colpiscono. |
| NIP-59 | Confezioni regalo. |
| NIP-78 | Dati applicativi arbitrari. |
| NIP-98 | Autenticazione HTTP, per gli endpoint ospitati. |
Crittografia
| Dove | Che cosa |
|---|---|
| Identità e firme | secp256k1 con firme Schnorr (BIP-340), come specifica Nostr. |
| Messaggi privati e chat di gruppo | NIP-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 Bluetooth | Noise XX: X25519, ChaCha20-Poly1305 (IETF), Ed25519 per le firme degli annunci, SHA-256 e HMAC sotto. |
| Identità in riposo | AES-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 file | DTLS-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.
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.