Hoppa till innehållet
Tillbaka till Nymchat

Kunskapsbas Under huven

Protokoll och evenemang

Vad Nymchat faktiskt lägger på tråden, för alla som bygger mot den, granska den eller läsa händelser från en annan Nostr-klient.

Event typer

SlagAnvänds förAnteckningar
0Profilens metadataStandard Nostr-profil: namn, bild, banner, om, lud16.
5BorttagningsbegärandenNIP-09.
7ReaktionerNIP-25, med en ['k', originalKind] tagga så att en reaktion arkiveras mot rätt kanaltyp.
13TätaDet mellersta lagret i ett NIP-17-meddelande.
14Privat meddelande rykteUnderskrivet, och aldrig publicerat på egen hand. En tråd svar bär en ['nymthread', rootId] tagga inuti det krypterade ryktet, hänvisa till roots delade meddelandets id.
1059PresentpapperNIP-59. Vad som faktiskt når ett relä för privata meddelanden och gruppchattar.
1984RapporteringNIP-56.
9734 / 9735Zap-begäran och zap-kvittoNIP-57.
10030Anpassade emoji-paketlistorNIP-30.
20000Geohash-kanalmeddelandeEfemär, taggad ['g', geohash]Ett trådsvar lägger till en NIP-10 markerad ['e', rootId, '', 'root'] och tag.
23333Namngiven kanalmeddelandeEfemär, taggad ['d', channel]Ett trådsvar lägger till en NIP-10 markerad ['e', rootId, '', 'root'] och tag.
24420 / 24421Offentliga skrivindikatorer och läskvittonNymchat-specifik, för publika kanaler.
25051 / 25052Peer-to-peer-signalering och filöverföringsstatusNymchat-specifik.
30030Anpassade emoji-setNIP-30.
30078ApplikationsdataNIP-78. Omröstningar, synkronisering av krypterade inställningar och post-kvantnyckelmeddelanden (taggade nym-pq, som bär en ML-KEM-768 offentlig nyckel med ett NIP-40 utgångsdatum).
69420Privata läskvitton och leveransstatusNymchat-specifik, bärs som ett rykte inuti en presentpapper. En separat sort från 14 medvetet, så att andra NIP-17-klienter inte återger tomma direktmeddelanden för varje kvitto.

NIPs Nymchat implementerar

NIPVad det ger Nymchat
NIP-07Logga in med ett webbläsartillägg.
NIP-09Borttagningsbegäranden.
Nivå 10Markerade svartaggar – hur en kanaltråds svar pekar på rotmeddelandet.
NIP-13Bevis på arbete. Utgående meddelanden mineras till minst 16 bitar.
NIP-17Privata direktmeddelanden och grunden för gruppchattar.
NIP-25Reaktioner.
NIP-30Anpassad emoji.
NIP-40Förfallotidsstämplar — meddelanden som försvinner.
NIP-44Versionerad kryptering, används för förseglingar, omslag och synkronisering av inställningar.
NIP-46Fjärrsignering — bunker://.
NIP-56Rapportering.
NIP-57Blixtnedslag.
NIP-59Presentpapper.
NIP-78Godtyckliga applikationsdata.
NIP-98HTTP-auth, för de värdbaserade slutpunkterna.

Kryptografi

DärVad
Identitet och signaturersecp256k1 med Schnorr-signaturer (BIP-340), som Nostr specificerar.
Privata meddelanden och gruppchattarNIP-44 v2: ECDH på secp256k1, HKDF-SHA256, ChaCha20 med HMAC-SHA256 och utfyllnad så att chiffertextlängden inte ger meddelandelängden bort.
Privata meddelanden och gruppchattar, mellan Nymchat-användareSamma NIP-44 v2 nyttolast, oförändrad, förseglad en andra gång inuti ChaCha20-Poly1305 nycklad från en ML-KEM-768 (FIPS 203) inkapsling genom HKDF-SHA256. pq2. Prefix så att en läsare väljer vägen genom att inspektera nyttolasten. Båda skikten måste brytas för att återställa ett meddelande. se kvantbeständig kryptering.
Bluetooth mesh-sessionerNoise XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 för tillkännagivande signaturer, SHA-256 och HMAC undertill.
Identitet i vilaAES-GCM-256. Nyckeln kommer från PBKDF2-SHA256 vid 310 000 iterationer för ett lösenord eller PIN, eller från en WebAuthn PRF-utgång genom HKDF-SHA256 för en lösenordsnyckel eller biometrisk.
Samtal och filöverföringarWebRTC:s egen DTLS-SRTP, förhandlad över NIP-17-inpackad signalering.
SlumpmässighetPlattformen CSPRNG genomgående – nycklar, nonces och tidsstämpeln i presentinpackningen.

Metadataskydd

Två detaljer i presentförpackningsvägen är värda att nämna, eftersom de är det som skiljer NIP-59 från "krypterad, men uppenbarligen från dig till dem":

  • Varje wrap är signerad av a engångsnyckel genererat för det meddelandet enbart, så inga två omslag delar en avsändare.
  • Varje wrap är created_at är backdateras slumpmässigt med upp till två timmar använder CSPRNG, så sändnings- och mottagningstider kan inte radas upp.

Gruppchattar lägger till roterande tillfälligt mottagare nycklar ovanpå det — se Hur gruppkryptering fungerar.

Läser källan

Kryptoprimitiven är inne js/nym-crypto.js och js/modules/key-vault.js i webbappen och under android-ios-app/lib/core/crypto/ och lib/services/mesh/noise/ i Flutter-appen. De förvaret är AGPL-3.0 och komplett — det finns ingen sluten komponent att ta på sig förtroende.