Ga naar de inhoud
Terug naar Nymchat

Kennisbank Onder de motorkap

Protocol en evenementen

Wat Nymchat feitelijk op de draad zet, voor iedereen die ertegen bouwt, het controleren of gebeurtenissen van een andere Nostr-client lezen.

Soorten evenementen

VriendelijkGebruikt voorOpmerkingen
0Metagegevens van profielStandaard Nostr-profiel: naam, foto, banner, over, lud16.
5VerwijderingsverzoekenNIP-09.
7ReactiesNIP-25, met een ['k', originalKind] tag zodat er een reactie wordt ingediend tegen het juiste kanaaltype.
13ZegelDe middelste laag van een NIP-17-bericht.
14Gerucht in privéberichtNiet ondertekend en nooit op zichzelf gepubliceerd.
1059CadeauverpakkingNIP-59. Wat feitelijk een relais bereikt voor privéberichten en groepschats.
1984RapportageNIP-56.
9734 / 9735Zap-aanvraag en zap-ontvangstNIP-57.
10030Aangepaste emoji-pakketlijstenNIP-30.
20000Geohash-kanaalberichtKortstondig, getagd ['g', geohash].
23333Benoemd kanaalberichtKortstondig, getagd ['d', channel].
24420 / 24421Publieke type-indicatoren en leesbevestigingenNymchat-specifiek, voor publieke kanalen.
25051 / 25052Peer-to-peer-signalering en status van bestandsoverdrachtNymchat-specifiek.
30030Aangepaste emoji-setsNIP-30.
30078ApplicatiegegevensNIP-78. Polls en gecodeerde instellingen worden gesynchroniseerd.
69420Privé leesbevestigingen en bezorgstatusNymchat-specifiek, gedragen als een gerucht in een cadeauverpakking. Een aparte soort van 14 opzettelijk, zodat andere NIP-17-clients geen blanco directe berichten voor elk ontvangstbewijs weergeven.

NIP's die Nymchat implementeert

KNEEPWat het Nymchat oplevert
NIP-07Log in met een browserextensie.
NIP-09Verwijderingsverzoeken.
NIP-13Bewijs van werk. Uitgaande berichten worden gemined tot minimaal 16 bits.
NIP-17Privé-direct messages en de basis voor groepschats.
NIP-25Reacties.
NIP-30Aangepaste emoji.
NIP-40Vervaltijdstempels: verdwijnende berichten.
NIP-44Versie-versleuteling, gebruikt voor zegels, wraps en synchronisatie van instellingen.
NIP-46Ondertekenen op afstand — bunker://.
NIP-56Rapportage.
NIP-57Bliksem zappen.
NIP-59Cadeauverpakkingen.
NIP-78Willekeurige toepassingsgegevens.
NIP-98HTTP-authenticatie, voor de gehoste eindpunten.

Cryptografie

WaarWat
Identiteit en handtekeningensecp256k1 met Schnorr-handtekeningen (BIP-340), zoals Nostr specificeert.
Privéberichten en groepschatsNIP-44 v2: ECDH op secp256k1, HKDF-SHA256, ChaCha20 met HMAC-SHA256 en opvulling zodat de lengte van de cijfertekst de berichtlengte niet verraadt.
Bluetooth mesh-sessiesRuis XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 voor aankondigingshandtekeningen, SHA-256 en HMAC eronder.
Identiteit in rustAES-GCM-256. De sleutel is afkomstig van PBKDF2-SHA256 met 310.000 iteraties voor een wachtwoord of pincode, of van een WebAuthn PRF-uitvoer via HKDF-SHA256 voor een wachtwoord of biometrie.
Gesprekken en bestandsoverdrachtenWebRTC's eigen DTLS-SRTP, onderhandeld via NIP-17-gewikkelde signalering.
WillekeurigheidHet platform CSPRNG overal: sleutels, nonces en de jitter van de tijdstempel bij cadeauverpakking.

Bescherming van metadata

Twee details in het cadeauverpakkingstraject zijn de moeite waard om te noemen, omdat ze NIP-59 onderscheiden van "versleuteld, maar duidelijk van jou naar hen":

  • Elke wikkel is ondertekend door een eenmalige sleutel alleen al voor dat bericht gegenereerd, dus geen twee wraps delen een afzender.
  • Elke wikkel created_at is willekeurig met maximaal twee teruggedraaid uur met behulp van de CSPRNG, dus verzend- en ontvangsttijden kunnen niet op één lijn worden gebracht.

Groepschats voegen wisselend kortstondig toe ontvanger toetsen daar bovenop – zie Hoe groepsversleuteling werkt.

Het lezen van de bron

De cryptoprimitieven zijn binnen js/nym-crypto.js En js/modules/key-vault.js in de webapp, en onder android-ios-app/lib/core/crypto/ En lib/services/mesh/noise/ in de Flutter-app. De opslagplaats is AGPL-3.0 en compleet – er is geen gesloten component die op vertrouwen kan vertrouwen.