Kennisbasis Onder die enjinkap
Protokol en gebeure
Wat Nymchat eintlik op die draad sit, vir enigiemand wat daarteen bou, oudit dit, of lees gebeurtenisse van 'n ander Nostr-kliënt.
Hierdie bladsy is gerieflikheidshalwe masjienvertaal. Die Engelse oorspronklike is die weergawe wat van toepassing is.
Soorte gebeurtenisse
| Soort | Gebruik vir | Notas |
|---|---|---|
0 | Profiel metadata | Standaard Nostr-profiel: naam, prent, banier, oor, lud16. |
5 | Skrapversoeke | NIP-09. |
7 | Reaksies | NIP-25, met 'n ['k', originalKind] merk sodat 'n reaksie teen die regte kanaaltipe geliasseer word. |
13 | Seël | Die middelste laag van 'n NIP-17-boodskap. |
14 | Privaatboodskap gerug | Ongeteken, en nooit op sy eie gepubliseer nie. |
1059 | Geskenkpapier | NIP-59. Wat eintlik 'n aflos bereik vir privaat boodskappe en groepkletse. |
1984 | Verslagdoening | NIP-56. |
9734 / 9735 | Zap-versoek en zap-kwitansie | NIP-57. |
10030 | Pasgemaakte emoji-paklyste | NIP-30. |
20000 | Geohash-kanaalboodskap | Efemeer, gemerk ['g', geohash]. |
23333 | Benoemde kanaalboodskap | Efemeer, gemerk ['d', channel]. |
24420 / 24421 | Openbare tikaanwysers en leesbewyse | Nymchat-spesifiek, vir publieke kanale. |
25051 / 25052 | Eweknie-sein- en lêeroordragstatus | Nymchat-spesifiek. |
30030 | Pasgemaakte emoji-stelle | NIP-30. |
30078 | Toepassingsdata | NIP-78. Meningspeilings en geënkripteerde instellings sinchroniseer. |
69420 | Privaat leesbewyse en afleweringstatus | Nymchat-spesifiek, gedra as 'n gerug binne 'n geskenkpapier. N aparte soort van 14 doelbewus, sodat ander NIP-17-kliënte nie leë direkte boodskappe vir elke kwitansie lewer nie. |
NIP's Nymchat implementeer
| NIP | Wat dit gee Nymchat |
|---|---|
| NIP-07 | Meld aan met 'n blaaieruitbreiding. |
| NIP-09 | Skrapversoeke. |
| NIP-13 | Bewys van werk. Uitgaande boodskappe word tot ten minste 16 bisse ontgin. |
| NIP-17 | Privaat direkte boodskappe, en die basis vir groepkletse. |
| NIP-25 | Reaksies. |
| NIP-30 | Gepasmaakte emosiekone. |
| NIP-40 | Vervaltydstempels — boodskappe wat verdwyn. |
| NIP-44 | Weergawe enkripsie, gebruik vir seëls, omhulsels en instellings sinchroniseer. |
| NIP-46 | Afgeleë ondertekening - bunker://. |
| NIP-56 | Verslagdoening. |
| NIP-57 | Weerlig slaan. |
| NIP-59 | Geskenkpakkies. |
| NIP-78 | Arbitrêre toepassingsdata. |
| NIP-98 | HTTP-magtiging, vir die gehoste eindpunte. |
Kriptografie
| Waar | Wat |
|---|---|
| Identiteit en handtekeninge | secp256k1 met Schnorr-handtekeninge (BIP-340), soos Nostr spesifiseer. |
| Privaat boodskappe en groepkletse | NIP-44 v2: ECDH op secp256k1, HKDF-SHA256, ChaCha20 met HMAC-SHA256, en opvulling sodat syfertekslengte nie die boodskaplengte weggee nie. |
| Bluetooth mesh sessies | Geraas XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 vir aankondiging van handtekeninge, SHA-256 en HMAC daaronder. |
| Identiteit in rus | AES-GCM-256. Die sleutel kom van PBKDF2-SHA256 teen 310 000 iterasies vir 'n wagwoord of PIN, of van 'n WebAuthn PRF-uitvoer deur HKDF-SHA256 vir 'n wagwoordsleutel of biometriese. |
| Oproepe en lêeroordragte | WebRTC se eie DTLS-SRTP, onderhandel oor NIP-17-omhulde sein. |
| Willekeurigheid | Die platform CSPRNG deurgaans - sleutels, nonces, en die geskenk-verpakking tydstempel jitter. |
Metadatabeskerming
Twee besonderhede in die geskenkpak-pad is die moeite werd om uit te roep, want dit is wat NIP-59 skei van "geïnkripteer, maar natuurlik van jou na hulle":
- Elke omhulsel word geteken deur a eenmalige sleutel gegenereer vir daardie boodskap alleen, dus geen twee wraps deel 'n sender nie.
- Elke wrap s'n
created_atis lukraak teruggedateer met tot twee ure met behulp van die CSPRNG, so stuur- en ontvangtye kan nie in lyn gebring word nie.
Groepkletse voeg roterende kortstondige by ontvanger sleutels boonop — sien Hoe groepkodering werk.
Die kripto-primitiewe is in js/nym-crypto.js en
js/modules/key-vault.js in die webtoepassing, en onder
android-ios-app/lib/core/crypto/ en
lib/services/mesh/noise/ in die Flutter-toepassing. Die
bewaarplek
is AGPL-3.0 en volledig — daar is geen geslote komponent om vertroue te aanvaar nie.