Slaan oor na die inhoud
Keer terug na Nymchat

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.

Soorte gebeurtenisse

SoortGebruik virNotas
0Profiel metadataStandaard Nostr-profiel: naam, prent, banier, oor, lud16.
5SkrapversoekeNIP-09.
7ReaksiesNIP-25, met 'n ['k', originalKind] merk sodat 'n reaksie teen die regte kanaaltipe geliasseer word.
13SeëlDie middelste laag van 'n NIP-17-boodskap.
14Privaatboodskap gerugOngetekende, en nooit op sy eie gepubliseer nie. 'n thread antwoord dra 'n ['nymthread', rootId] tag binne die versleutelde gerug, verwys na die gedeelde boodskap id van die wortel.
1059GeskenkpapierNIP-59. Wat eintlik 'n aflos bereik vir privaat boodskappe en groepkletse.
1984VerslagdoeningNIP-56.
9734 / 9735Zap-versoek en zap-kwitansieNIP-57.
10030Pasgemaakte emoji-paklysteNIP-30.
20000Geohash-kanaalboodskapEfemeer, gemerk ['g', geohash]'N thread antwoord voeg 'n NIP-10 gemerk ['e', rootId, '', 'root'] Die dag.
23333Benoemde kanaalboodskapEfemeer, gemerk ['d', channel]'N thread antwoord voeg 'n NIP-10 gemerk ['e', rootId, '', 'root'] Die dag.
24420 / 24421Openbare tikaanwysers en leesbewyseNymchat-spesifiek, vir publieke kanale.
25051 / 25052Eweknie-sein- en lêeroordragstatusNymchat-spesifiek.
30030Pasgemaakte emoji-stelleNIP-30.
30078ToepassingsdataNIP-78. Meningspeilings, geïnkripteer instellings sinchroniseer en post-kwantumsleutelaankondigings (gemerk nym-pq, met 'n ML-KEM-768 publieke sleutel met 'n NIP-40-vervaldatum).
69420Privaat leesbewyse en afleweringstatusNymchat-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

NIPWat dit gee Nymchat
NIP-07Meld aan met 'n blaaieruitbreiding.
NIP-09Skrapversoeke.
Die NIP-10Gekenmerk antwoord tags - hoe 'n kanaal thread antwoord punte op sy wortel boodskap.
NIP-13Bewys van werk. Uitgaande boodskappe word tot ten minste 16 bisse ontgin.
NIP-17Privaat direkte boodskappe, en die basis vir groepkletse.
NIP-25Reaksies.
NIP-30Gepasmaakte emosiekone.
NIP-40Vervaltydstempels — boodskappe wat verdwyn.
NIP-44Weergawe enkripsie, gebruik vir seëls, omhulsels en instellings sinchroniseer.
NIP-46Afgeleë ondertekening - bunker://.
NIP-56Verslagdoening.
NIP-57Weerlig slaan.
NIP-59Geskenkpakkies.
NIP-78Arbitrêre toepassingsdata.
NIP-98HTTP-magtiging, vir die gehoste eindpunte.

Kriptografie

WaarWat
Identiteit en handtekeningesecp256k1 met Schnorr-handtekeninge (BIP-340), soos Nostr spesifiseer.
Privaat boodskappe en groepkletseNIP-44 v2: ECDH op secp256k1, HKDF-SHA256, ChaCha20 met HMAC-SHA256, en opvulling sodat syfertekslengte nie die boodskaplengte weggee nie.
Privaat boodskappe en groepkletse, tussen Nymchat-gebruikersDie dieselfde NIP-44 v2-gewerkloosheid, onveranderd, gesluit 'n tweede keer binne ChaCha20-Poly1305 gekleurde van 'n ML-KEM-768 (FIPS 203) inkapseling deur HKDF-SHA256. pq2. voorvoegsel sodat 'n leser die pad kies deur die nuttige lading te inspekteer. Beide lae moet gebreek word om 'n boodskap te herstel. kwantumbestande enkripsie.
Bluetooth mesh sessiesGeraas XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 vir aankondiging van handtekeninge, SHA-256 en HMAC daaronder.
Identiteit in rusAES-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êeroordragteWebRTC se eie DTLS-SRTP, onderhandel oor NIP-17-omhulde sein.
WillekeurigheidDie 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_at is 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.

Lees die bron

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.