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é par lui-même. Une réponse de thread porte un ['nymthread', rootId] étiquette à l'intérieur de la rumeur cryptée, en référencant l'id du message partagé de la racine. |
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]Une réponse de thread ajoute un NIP-10 marqué ['e', rootId, '', 'root'] Le jour. |
23333 | Message de canal nommé | Éphémère, tagué ['d', channel]Une réponse de thread ajoute un NIP-10 marqué ['e', rootId, '', 'root'] Le jour. |
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. Sondages, synchronisation des paramètres cryptés et annonces clés post-quantiques (marqués nym-pq, portant une clé publique ML-KEM-768 avec une expiration NIP-40). |
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. |
| Le NIP-10 | Étiquettes de réponse marquées – comment un fil de canal pointe la réponse à son message racine. |
| 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. |
| Messages privés et discussions de groupe, entre utilisateurs de Nymchat | La même charge utile NIP-44 v2, non modifiée, scellée une seconde fois à l'intérieur de ChaCha20-Poly1305, clé d'une encapsulation ML-KEM-768 (FIPS 203) via HKDF-SHA256. pq2. préfixe afin qu'un lecteur choisisse le chemin en inspectant la charge utile. Les deux couches doivent être brisées pour récupérer un message. cryptage résistant aux quantiques. |
| 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.