Base de connaissances Sous le capot
Protocole et événements
Ce que Nymchat met réellement sur le fil, pour quiconque construit contre cela, l'auditer ou lire les événements d'un autre client Nostr.
Cette page est traduite automatiquement pour plus de commodité. La version originale anglaise est la version qui s’applique.
Types d'événements
| Gentil | Utilisé pour | Remarques |
|---|---|---|
0 | Métadonnées du profil | Profil Nostr standard : nom, photo, bannière, à propos, lud16. |
5 | Demandes de suppression | PIN-09. |
7 | Réactions | NIP-25, avec un ['k', originalKind] tag afin qu'une réaction soit déposée contre le bon type de canal. |
13 | Joint | La couche intermédiaire d'un message NIP-17. |
14 | Rumeur de message privé | Non signé et jamais publié seul. |
1059 | Emballage cadeau | PIN-59. De quoi parvenir en fait à un relais pour les messages privés et les discussions de groupe. |
1984 | Rapports | PIN-56. |
9734 / 9735 | Demande de zap et reçu de zap | PIN-57. |
10030 | Listes de packs d'emoji personnalisés | PIN-30. |
20000 | Message du canal Geohash | Éphémère, tagué ['g', geohash]. |
23333 | Message de canal nommé | Éphémère, tagué ['d', channel]. |
24420 / 24421 | Indicateurs de frappe publics et accusés de lecture | Spécifique à Nymchat, pour les chaînes publiques. |
25051 / 25052 | Signalisation peer-to-peer et statut de transfert de fichiers | Spécifique à Nymchat. |
30030 | Ensembles d'emojis personnalisés | PIN-30. |
30078 | Données de candidature | PIN-78. Synchronisation des sondages et des paramètres cryptés. |
69420 | Accusés de lecture privés et état de livraison | Spécifique à Nymchat, porté comme une rumeur dans un emballage cadeau. Un genre distinct de 14 délibérément, de sorte que les autres clients NIP-17 n'affichent pas de messages directs vierges pour chaque reçu. |
NIP mis en œuvre par Nymchat
| PINCER | Ce que ça donne à Nymchat |
|---|---|
| PIN-07 | Connectez-vous avec une extension de navigateur. |
| PIN-09 | Demandes de suppression. |
| PIN-13 | Preuve de travail. Les messages sortants sont extraits sur au moins 16 bits. |
| PIN-17 | Messages directs privés et base des discussions de groupe. |
| PIN-25 | Réactions. |
| PIN-30 | Émoji personnalisé. |
| PIN-40 | Horodatages d’expiration – messages qui disparaissent. |
| PIN-44 | Cryptage versionné, utilisé pour les sceaux, les enveloppes et la synchronisation des paramètres. |
| PIN-46 | Signature à distance — bunker://. |
| PIN-56 | Rapport. |
| PIN-57 | La foudre zappe. |
| PIN-59 | Emballages cadeaux. |
| PIN-78 | Données d'application arbitraires. |
| PIN-98 | Authentification HTTP, pour les points de terminaison hébergés. |
Cryptographie
| Où | Quoi |
|---|---|
| Identité et signatures | secp256k1 avec les signatures Schnorr (BIP-340), comme le précise Nostr. |
| Messages privés et discussions de groupe | NIP-44 v2 : ECDH sur secp256k1, HKDF-SHA256, ChaCha20 avec HMAC-SHA256 et remplissage pour que la longueur du texte chiffré ne donne pas la longueur du message. |
| Sessions maillées Bluetooth | Noise XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 pour les signatures d'annonce, SHA-256 et HMAC en dessous. |
| Identité au repos | AES-GCM-256. La clé provient de PBKDF2-SHA256 à 310 000 itérations pour un mot de passe ou un code PIN, ou d'une sortie WebAuthn PRF via HKDF-SHA256 pour un mot de passe ou une clé biométrique. |
| Appels et transferts de fichiers | Le propre DTLS-SRTP de WebRTC, négocié via une signalisation enveloppée NIP-17. |
| Le hasard | La plate-forme CSPRNG partout : les clés, les noms occasionnels et la gigue de l'horodatage de l'emballage cadeau. |
Protection des métadonnées
Deux détails dans le parcours des emballages cadeaux méritent d'être soulignés, car c'est ce qui sépare le NIP-59 de "crypté, mais évidemment de vous à eux":
- Chaque emballage est signé par un clé à usage unique généré pour ce seul message, donc pas deux wraps ne partagent un expéditeur.
- Chaque emballage est
created_atest antidaté aléatoirement jusqu'à deux heures en utilisant CSPRNG, les heures d'envoi et de réception ne peuvent donc pas être alignées.
Les discussions de groupe ajoutent des échanges éphémères en rotation destinataire clés en plus - voir Comment fonctionne le chiffrement de groupe.
Les primitives cryptographiques sont dans js/nym-crypto.js et
js/modules/key-vault.js dans l'application Web et sous
android-ios-app/lib/core/crypto/ et
lib/services/mesh/noise/ dans l'application Flutter. Le
dépôt
est AGPL-3.0 et complet — il n'y a pas de composant fermé auquel faire confiance.