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 rygteUsigneret og aldrig offentliggjort alene.
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].
23333Navngivet kanal beskedEphemeral, tagget ['d', channel].
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 og krypterede indstillinger synkroniseres.
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.
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.
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.