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 rykteOsignerad och aldrig publicerad på egen hand.
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].
23333Namngiven kanalmeddelandeEfemär, taggad ['d', channel].
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 och krypterade inställningar synkroniseras.
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.
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.
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.