Kunskapsbas Under huven
Protokoll och evenemang
Vad Nymchat faktiskt lägger på tråden, för alla som bygger mot den, granska den eller läsa händelser från en annan Nostr-klient.
Den här sidan är maskinöversatt för enkelhetens skull. Det engelska originalet är den version som gäller.
Event typer
| Slag | Används för | Anteckningar |
|---|---|---|
0 | Profilens metadata | Standard Nostr-profil: namn, bild, banner, om, lud16. |
5 | Borttagningsbegäranden | NIP-09. |
7 | Reaktioner | NIP-25, med en ['k', originalKind] tagga så att en reaktion arkiveras mot rätt kanaltyp. |
13 | Täta | Det mellersta lagret i ett NIP-17-meddelande. |
14 | Privat meddelande rykte | Osignerad och aldrig publicerad på egen hand. |
1059 | Presentpapper | NIP-59. Vad som faktiskt når ett relä för privata meddelanden och gruppchattar. |
1984 | Rapportering | NIP-56. |
9734 / 9735 | Zap-begäran och zap-kvitto | NIP-57. |
10030 | Anpassade emoji-paketlistor | NIP-30. |
20000 | Geohash-kanalmeddelande | Efemär, taggad ['g', geohash]. |
23333 | Namngiven kanalmeddelande | Efemär, taggad ['d', channel]. |
24420 / 24421 | Offentliga skrivindikatorer och läskvitton | Nymchat-specifik, för publika kanaler. |
25051 / 25052 | Peer-to-peer-signalering och filöverföringsstatus | Nymchat-specifik. |
30030 | Anpassade emoji-set | NIP-30. |
30078 | Applikationsdata | NIP-78. Omröstningar och krypterade inställningar synkroniseras. |
69420 | Privata läskvitton och leveransstatus | Nymchat-specifik, bärs som ett rykte inuti en presentpapper. En separat sort från 14 medvetet, så att andra NIP-17-klienter inte återger tomma direktmeddelanden för varje kvitto. |
NIPs Nymchat implementerar
| NIP | Vad det ger Nymchat |
|---|---|
| NIP-07 | Logga in med ett webbläsartillägg. |
| NIP-09 | Borttagningsbegäranden. |
| NIP-13 | Bevis på arbete. Utgående meddelanden mineras till minst 16 bitar. |
| NIP-17 | Privata direktmeddelanden och grunden för gruppchattar. |
| NIP-25 | Reaktioner. |
| NIP-30 | Anpassad emoji. |
| NIP-40 | Förfallotidsstämplar — meddelanden som försvinner. |
| NIP-44 | Versionerad kryptering, används för förseglingar, omslag och synkronisering av inställningar. |
| NIP-46 | Fjärrsignering — bunker://. |
| NIP-56 | Rapportering. |
| NIP-57 | Blixtnedslag. |
| NIP-59 | Presentpapper. |
| NIP-78 | Godtyckliga applikationsdata. |
| NIP-98 | HTTP-auth, för de värdbaserade slutpunkterna. |
Kryptografi
| Där | Vad |
|---|---|
| Identitet och signaturer | secp256k1 med Schnorr-signaturer (BIP-340), som Nostr specificerar. |
| Privata meddelanden och gruppchattar | NIP-44 v2: ECDH på secp256k1, HKDF-SHA256, ChaCha20 med HMAC-SHA256 och utfyllnad så att chiffertextlängden inte ger meddelandelängden bort. |
| Bluetooth mesh-sessioner | Noise XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 för tillkännagivande signaturer, SHA-256 och HMAC undertill. |
| Identitet i vila | AES-GCM-256. Nyckeln kommer från PBKDF2-SHA256 vid 310 000 iterationer för ett lösenord eller PIN, eller från en WebAuthn PRF-utgång genom HKDF-SHA256 för en lösenordsnyckel eller biometrisk. |
| Samtal och filöverföringar | WebRTC:s egen DTLS-SRTP, förhandlad över NIP-17-inpackad signalering. |
| Slumpmässighet | Plattformen CSPRNG genomgående – nycklar, nonces och tidsstämpeln i presentinpackningen. |
Metadataskydd
Två detaljer i presentförpackningsvägen är värda att nämna, eftersom de är det som skiljer NIP-59 från "krypterad, men uppenbarligen från dig till dem":
- Varje wrap är signerad av a engångsnyckel genererat för det meddelandet enbart, så inga två omslag delar en avsändare.
- Varje wrap är
created_atär backdateras slumpmässigt med upp till två timmar använder CSPRNG, så sändnings- och mottagningstider kan inte radas upp.
Gruppchattar lägger till roterande tillfälligt mottagare nycklar ovanpå det — se Hur gruppkryptering fungerar.
Kryptoprimitiven är inne js/nym-crypto.js och
js/modules/key-vault.js i webbappen och under
android-ios-app/lib/core/crypto/ och
lib/services/mesh/noise/ i Flutter-appen. De
förvaret
är AGPL-3.0 och komplett — det finns ingen sluten komponent att ta på sig förtroende.