Treci la conținut
Înapoi la Nymchat

Baza de cunoștințe Sub capotă

Protocol și evenimente

Ceea ce Nymchat pune de fapt pe fir, pentru oricine construiește împotriva lui, auditarea acestuia sau citirea evenimentelor de la alt client Nostr.

Tipuri de evenimente

FelFolosit pentruNote
0Metadatele profiluluiProfil standard Nostr: nume, poză, banner, despre, lud16.
5Cereri de ștergereNIP-09.
7ReacțiiNIP-25, cu a ['k', originalKind] etichetă, astfel încât să fie înregistrată o reacție împotriva tipului de canal potrivit.
13SigiliuStratul de mijloc al unui mesaj NIP-17.
14Zvon de mesaj privatNesemnat și niciodată publicat pe cont propriu.
1059Pachet cadouNIP-59. Ceea ce ajunge de fapt la un releu pentru mesaje private și chaturi de grup.
1984RaportareNIP-56.
9734 / 9735Solicitare zap și chitanță zapNIP-57.
10030Liste de pachete de emoji personalizateNIP-30.
20000Mesajul canalului GeohashEfemer, etichetat ['g', geohash].
23333Mesajul canalului numitEfemer, etichetat ['d', channel].
24420 / 24421Indicatori publici de tastare și chitanțe de citireSpecific Nymchat, pentru canale publice.
25051 / 25052Semnalizarea peer-to-peer și starea transferului fișierelorSpecific Nymchat.
30030Seturi de emoji personalizateNIP-30.
30078Date aplicațieiNIP-78. Sondajele și setările criptate se sincronizează.
69420Confirmări de citire private și starea livrăriiSpecific Nymchat, purtat ca un zvon într-un ambalaj cadou. Un fel separat de 14 în mod deliberat, astfel încât alți clienți NIP-17 nu redă mesaje directe goale pentru fiecare chitanță.

NIP-uri Nymchat implementează

NIPCe îi dă lui Nymchat
NIP-07Conectați-vă cu o extensie de browser.
NIP-09Cereri de ștergere.
NIP-13Dovada muncii. Mesajele trimise sunt extrase la cel puțin 16 biți.
NIP-17Mesaje directe private și baza pentru chat-urile de grup.
NIP-25Reacții.
NIP-30Emoji personalizat.
NIP-40Marcaje temporale de expirare — mesaje care dispar.
NIP-44Criptare cu versiuni, folosită pentru sigilii, împachetări și sincronizarea setărilor.
NIP-46Semnarea de la distanță — bunker://.
NIP-56Raportare.
NIP-57Zăpește fulger.
NIP-59Ambalaje pentru cadou.
NIP-78Date de aplicare arbitrare.
NIP-98Autentificare HTTP, pentru punctele finale găzduite.

Criptografie

UndeCe
Identitate și semnăturisecp256k1 cu semnături Schnorr (BIP-340), după cum precizează Nostr.
Mesaje private și chaturi de grupNIP-44 v2: ECDH pe secp256k1, HKDF-SHA256, ChaCha20 cu HMAC-SHA256 și umplutură astfel încât lungimea textului cifrat să nu dea lungimea mesajului.
Sesiuni de rețea BluetoothZgomot XX - X25519, ChaCha20-Poly1305 (IETF), Ed25519 pentru semnături de anunț, SHA-256 și HMAC dedesubt.
Identitate în repausAES-GCM-256. Cheia provine de la PBKDF2-SHA256 la 310.000 de iterații pentru o parolă sau PIN, sau de la o ieșire WebAuthn PRF prin HKDF-SHA256 pentru o parolă sau biometrică.
Apeluri și transferuri de fișierePropul DTLS-SRTP al WebRTC, negociat prin semnalizare NIP-17-wrapped.
AleatoriePlatforma CSPRNG de-a lungul întregii — chei, non-uri și fluctuația de marcaj temporală a ambalajului cadou.

Protecția metadatelor

Două detalii din calea ambalajului cadou merită să fie menționate, deoarece ele separă NIP-59 de la „criptat, dar evident de la tine la ei”:

  • Fiecare wrap este semnat de a cheie unică generat numai pentru acel mesaj, deci nu există două wrap-uri care să împartă un expeditor.
  • Fiecare wrap's created_at este retrodatate aleatoriu cu până la două ore folosind CSPRNG, deci orele de trimitere și primire nu pot fi aliniate.

Chaturile de grup adaugă efemere rotative destinatar cheile pe deasupra — vezi Cum funcționează criptarea grupului.

Citirea sursei

Cripto-primitivele sunt în js/nym-crypto.js şi js/modules/key-vault.js în aplicația web și mai jos android-ios-app/lib/core/crypto/ şi lib/services/mesh/noise/ în aplicația Flutter. The repertoriu este AGPL-3.0 și complet — nu există nicio componentă închisă care să aibă încredere.