Spring til indholdet
Tilbage til Nymchat

Vidensgrundlag Under hætten

Protokol og begivenheder

Hvad Nymchat faktisk sætter på ledningen, for enhver, der bygger imod det, revision af det eller læsning af begivenheder fra en anden Nostr-klient.

Begivenhedsarter

SlagsBruges tilNoter
0ProfilmetadataStandard Nostr-profil: navn, billede, banner, om, lud16.
5Anmodninger om sletningNIP-09.
7ReaktionerNIP-25, med en ['k', originalKind] tag, så en reaktion arkiveres mod den rigtige kanaltype.
13ForsegleDet midterste lag af en NIP-17-meddelelse.
14Privat besked rygteUnderskrevet, og aldrig offentliggjort på egen hånd. En tråd svar bærer en ['nymthread', rootId] tag inde i den krypterede rygte, der refererer til rodenes delte meddelelses-id.
1059GavepapirNIP-59. Hvad der rent faktisk når et relæ for private beskeder og gruppechat.
1984IndberetningNIP-56.
9734 / 9735Zap-anmodning og zap-kvitteringNIP-57.
10030Tilpassede emoji-pakkelisterNIP-30.
20000Geohash kanal beskedEphemeral, tagget ['g', geohash]En tråd svar tilføjer en NIP-10 markeret ['e', rootId, '', 'root'] af Tag.
23333Navngivet kanal beskedEphemeral, tagget ['d', channel]En tråd svar tilføjer en NIP-10 markeret ['e', rootId, '', 'root'] af Tag.
24420 / 24421Offentlige tasteindikatorer og læsekvitteringerNymchat-specifik, til offentlige kanaler.
25051 / 25052Peer-to-peer-signalering og filoverførselsstatusNymchat-specifik.
30030Brugerdefinerede emoji-sætNIP-30.
30078AnsøgningsdataNIP-78. Afstemninger, synkronisering af krypterede indstillinger og post-kvantenøglemeddelelser (tagget nym-pq, der bærer en ML-KEM-768 offentlig nøgle med et NIP-40-udløb).
69420Private læsekvitteringer og leveringsstatusNymchat-specifik, båret som et rygte i en gaveindpakning. En særskilt slags fra 14 bevidst, så andre NIP-17-klienter ikke gengiver tomme direkte beskeder for hver kvittering.

NIP'er Nymchat implementerer

NIPHvad det giver Nymchat
NIP-07Log ind med en browserudvidelse.
NIP-09Anmodninger om sletning.
Nip10Markerede svartags – hvordan en kanaltråds svar peger på dets rodbesked.
NIP-13Bevis for arbejde. Udgående beskeder mineres til mindst 16 bit.
NIP-17Private direkte beskeder og grundlaget for gruppechat.
NIP-25Reaktioner.
NIP-30Brugerdefineret emoji.
NIP-40Udløbstidsstempler — forsvindende beskeder.
NIP-44Versioneret kryptering, brugt til forseglinger, indpakninger og synkronisering af indstillinger.
NIP-46Fjernsignering - bunker://.
NIP-56Indberetning.
NIP-57Lyn zapper.
NIP-59Gavepapir.
NIP-78Vilkårlige applikationsdata.
NIP-98HTTP-godkendelse for de hostede slutpunkter.

Kryptografi

HvorHvad
Identitet og underskriftersecp256k1 med Schnorr-signaturer (BIP-340), som Nostr specificerer.
Private beskeder og gruppechatNIP-44 v2: ECDH på secp256k1, HKDF-SHA256, ChaCha20 med HMAC-SHA256 og polstring, så chiffertekstlængden ikke giver beskedlængden væk.
Private beskeder og gruppechat mellem Nymchat-brugereDen samme NIP-44 v2 nyttelast, uændret, forseglet en anden gang inde i ChaCha20-Poly1305 nøglet fra en ML-KEM-768 (FIPS 203) indkapsling gennem HKDF-SHA256. pq2. præfiks, så en læser vælger stien ved at inspicere brugsbelastningen. Begge lag skal brydes for at hente en besked. kvantebestandig kryptering.
Bluetooth mesh-sessionerNoise XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 til annoncering af signaturer, SHA-256 og HMAC nedenunder.
Identitet i hvileAES-GCM-256. Nøglen kommer fra PBKDF2-SHA256 ved 310.000 iterationer for en adgangskode eller PIN-kode, eller fra en WebAuthn PRF-output gennem HKDF-SHA256 for en adgangsnøgle eller biometrisk.
Opkald og filoverførslerWebRTC's egen DTLS-SRTP, forhandlet over NIP-17-indpakket signalering.
TilfældighedPlatformen CSPRNG hele vejen igennem - nøgler, nonces og gaveindpakningens tidsstempler.

Metadatabeskyttelse

To detaljer i gaveindpakningsstien er værd at nævne, fordi de er det, der adskiller NIP-59 fra "krypteret, men åbenbart fra dig til dem":

  • Hver indpakning er underskrevet af en engangsnøgle genereret til den besked alene, så ikke to omslag deler en afsender.
  • Hver indpakning er created_at er tilfældigt tilbagedateret med op til to timer ved at bruge CSPRNG, så sende- og modtagelsestidspunkter kan ikke stilles på linje.

Gruppechats tilføjer roterende flygtig modtager taster oven i købet - se Sådan fungerer gruppekryptering.

Læser kilden

Kryptoprimitiverne er inde js/nym-crypto.js og js/modules/key-vault.js i webappen og under android-ios-app/lib/core/crypto/ og lib/services/mesh/noise/ i Flutter-appen. De depot er AGPL-3.0 og komplet — der er ingen lukket komponent at tage på sig.