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.
Denne side er maskinoversat for nemheds skyld. Den engelske original er den version, der gælder.
Begivenhedsarter
| Slags | Bruges til | Noter |
|---|---|---|
0 | Profilmetadata | Standard Nostr-profil: navn, billede, banner, om, lud16. |
5 | Anmodninger om sletning | NIP-09. |
7 | Reaktioner | NIP-25, med en ['k', originalKind] tag, så en reaktion arkiveres mod den rigtige kanaltype. |
13 | Forsegle | Det midterste lag af en NIP-17-meddelelse. |
14 | Privat besked rygte | Usigneret og aldrig offentliggjort alene. |
1059 | Gavepapir | NIP-59. Hvad der rent faktisk når et relæ for private beskeder og gruppechat. |
1984 | Indberetning | NIP-56. |
9734 / 9735 | Zap-anmodning og zap-kvittering | NIP-57. |
10030 | Tilpassede emoji-pakkelister | NIP-30. |
20000 | Geohash kanal besked | Ephemeral, tagget ['g', geohash]. |
23333 | Navngivet kanal besked | Ephemeral, tagget ['d', channel]. |
24420 / 24421 | Offentlige tasteindikatorer og læsekvitteringer | Nymchat-specifik, til offentlige kanaler. |
25051 / 25052 | Peer-to-peer-signalering og filoverførselsstatus | Nymchat-specifik. |
30030 | Brugerdefinerede emoji-sæt | NIP-30. |
30078 | Ansøgningsdata | NIP-78. Afstemninger og krypterede indstillinger synkroniseres. |
69420 | Private læsekvitteringer og leveringsstatus | Nymchat-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
| NIP | Hvad det giver Nymchat |
|---|---|
| NIP-07 | Log ind med en browserudvidelse. |
| NIP-09 | Anmodninger om sletning. |
| NIP-13 | Bevis for arbejde. Udgående beskeder mineres til mindst 16 bit. |
| NIP-17 | Private direkte beskeder og grundlaget for gruppechat. |
| NIP-25 | Reaktioner. |
| NIP-30 | Brugerdefineret emoji. |
| NIP-40 | Udløbstidsstempler — forsvindende beskeder. |
| NIP-44 | Versioneret kryptering, brugt til forseglinger, indpakninger og synkronisering af indstillinger. |
| NIP-46 | Fjernsignering - bunker://. |
| NIP-56 | Indberetning. |
| NIP-57 | Lyn zapper. |
| NIP-59 | Gavepapir. |
| NIP-78 | Vilkårlige applikationsdata. |
| NIP-98 | HTTP-godkendelse for de hostede slutpunkter. |
Kryptografi
| Hvor | Hvad |
|---|---|
| Identitet og underskrifter | secp256k1 med Schnorr-signaturer (BIP-340), som Nostr specificerer. |
| Private beskeder og gruppechat | NIP-44 v2: ECDH på secp256k1, HKDF-SHA256, ChaCha20 med HMAC-SHA256 og polstring, så chiffertekstlængden ikke giver beskedlængden væk. |
| Bluetooth mesh-sessioner | Noise XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 til annoncering af signaturer, SHA-256 og HMAC nedenunder. |
| Identitet i hvile | AES-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ørsler | WebRTC's egen DTLS-SRTP, forhandlet over NIP-17-indpakket signalering. |
| Tilfældighed | Platformen 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_ater 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.
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.