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.
Deze pagina is voor het gemak automatisch vertaald. Het Engelse origineel is de versie die van toepassing is.
Soorten evenementen
| Vriendelijk | Gebruikt voor | Opmerkingen |
|---|---|---|
0 | Metagegevens van profiel | Standaard Nostr-profiel: naam, foto, banner, over, lud16. |
5 | Verwijderingsverzoeken | NIP-09. |
7 | Reacties | NIP-25, met een ['k', originalKind] tag zodat er een reactie wordt ingediend tegen het juiste kanaaltype. |
13 | Zegel | De middelste laag van een NIP-17-bericht. |
14 | Gerucht in privébericht | Niet ondertekend en nooit op zichzelf gepubliceerd. |
1059 | Cadeauverpakking | NIP-59. Wat feitelijk een relais bereikt voor privéberichten en groepschats. |
1984 | Rapportage | NIP-56. |
9734 / 9735 | Zap-aanvraag en zap-ontvangst | NIP-57. |
10030 | Aangepaste emoji-pakketlijsten | NIP-30. |
20000 | Geohash-kanaalbericht | Kortstondig, getagd ['g', geohash]. |
23333 | Benoemd kanaalbericht | Kortstondig, getagd ['d', channel]. |
24420 / 24421 | Publieke type-indicatoren en leesbevestigingen | Nymchat-specifiek, voor publieke kanalen. |
25051 / 25052 | Peer-to-peer-signalering en status van bestandsoverdracht | Nymchat-specifiek. |
30030 | Aangepaste emoji-sets | NIP-30. |
30078 | Applicatiegegevens | NIP-78. Polls en gecodeerde instellingen worden gesynchroniseerd. |
69420 | Privé leesbevestigingen en bezorgstatus | Nymchat-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
| KNEEP | Wat het Nymchat oplevert |
|---|---|
| NIP-07 | Log in met een browserextensie. |
| NIP-09 | Verwijderingsverzoeken. |
| NIP-13 | Bewijs van werk. Uitgaande berichten worden gemined tot minimaal 16 bits. |
| NIP-17 | Privé-direct messages en de basis voor groepschats. |
| NIP-25 | Reacties. |
| NIP-30 | Aangepaste emoji. |
| NIP-40 | Vervaltijdstempels: verdwijnende berichten. |
| NIP-44 | Versie-versleuteling, gebruikt voor zegels, wraps en synchronisatie van instellingen. |
| NIP-46 | Ondertekenen op afstand — bunker://. |
| NIP-56 | Rapportage. |
| NIP-57 | Bliksem zappen. |
| NIP-59 | Cadeauverpakkingen. |
| NIP-78 | Willekeurige toepassingsgegevens. |
| NIP-98 | HTTP-authenticatie, voor de gehoste eindpunten. |
Cryptografie
| Waar | Wat |
|---|---|
| Identiteit en handtekeningen | secp256k1 met Schnorr-handtekeningen (BIP-340), zoals Nostr specificeert. |
| Privéberichten en groepschats | NIP-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-sessies | Ruis XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 voor aankondigingshandtekeningen, SHA-256 en HMAC eronder. |
| Identiteit in rust | AES-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 bestandsoverdrachten | WebRTC's eigen DTLS-SRTP, onderhandeld via NIP-17-gewikkelde signalering. |
| Willekeurigheid | Het 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_atis 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.
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.