base de conocimientos Debajo del capó
Protocolo y eventos
Lo que Nymchat realmente pone en el cable, para cualquiera que construya contra él, auditarlo o leer eventos de otro cliente Nostr.
Esta página está traducida automáticamente para mayor comodidad. La versión original en inglés es la que se aplica.
Tipos de eventos
| Amable | Utilizado para | Notas |
|---|---|---|
0 | Metadatos del perfil | Perfil estándar de Nostr: nombre, imagen, banner, acerca de, lud16. |
5 | Solicitudes de eliminación | PNI-09. |
7 | Reacciones | NIP-25, con un ['k', originalKind] etiqueta para que se presente una reacción contra el tipo de canal correcto. |
13 | Sello | La capa intermedia de un mensaje NIP-17. |
14 | Rumor de mensaje privado | Sin firmar y nunca publicado solo. |
1059 | Papel de regalo | PNI-59. Lo que realmente llega a un relevo para mensajes privados y chats grupales. |
1984 | Informes | PNI-56. |
9734 / 9735 | Solicitud de zap y recibo de zap | PNI-57. |
10030 | Listas de paquetes de emoji personalizados | PNI-30. |
20000 | Mensaje del canal Geohash | Efímero, etiquetado ['g', geohash]. |
23333 | Mensaje del canal con nombre | Efímero, etiquetado ['d', channel]. |
24420 / 24421 | Indicadores de mecanografía públicos y recibos de lectura. | Específico de Nymchat, para canales públicos. |
25051 / 25052 | Señalización de igual a igual y estado de transferencia de archivos | Específico de Nymchat. |
30030 | Conjuntos de emojis personalizados | PNI-30. |
30078 | Datos de la aplicación | PNI-78. Sincronización de encuestas y configuraciones cifradas. |
69420 | Confirmaciones de lectura privadas y estado de entrega | Específico de Nymchat, transmitido como un rumor dentro de un envoltorio de regalo. Un tipo separado de 14 deliberadamente, para que otros clientes NIP-17 no muestren mensajes directos en blanco para cada recibo. |
NIP que implementa Nymchat
| CORTAR | Lo que le da Nymchat |
|---|---|
| PNI-07 | Inicie sesión con una extensión del navegador. |
| PNI-09 | Solicitudes de eliminación. |
| PNI-13 | Prueba de trabajo. Los mensajes salientes se minan hasta al menos 16 bits. |
| PNI-17 | Mensajes directos privados y base para chats grupales. |
| PNI-25 | Reacciones. |
| PNI-30 | Emojis personalizados. |
| PNI-40 | Marcas de tiempo de vencimiento: mensajes que desaparecen. |
| PNI-44 | Cifrado versionado, utilizado para sellos, envolturas y sincronización de configuraciones. |
| PNI-46 | Firma remota bunker://. |
| PIN-56 | Informes. |
| PIN-57 | Rayos. |
| PNI-59 | Envolturas de regalo. |
| PNI-78 | Datos de aplicación arbitrarios. |
| PNI-98 | Autenticación HTTP, para los puntos finales alojados. |
Criptografía
| Dónde | Qué |
|---|---|
| Identidad y firmas | secp256k1 con firmas Schnorr (BIP-340), como especifica Nostr. |
| Mensajes privados y chats grupales. | NIP-44 v2: ECDH en secp256k1, HKDF-SHA256, ChaCha20 con HMAC-SHA256 y relleno para que la longitud del texto cifrado no revele la longitud del mensaje. |
| Sesiones de malla Bluetooth | Ruido XX: X25519, ChaCha20-Poly1305 (IETF), Ed25519 para firmas de anuncios, SHA-256 y HMAC debajo. |
| Identidad en reposo | AES-GCM-256. La clave proviene de PBKDF2-SHA256 con 310.000 iteraciones para una contraseña o PIN, o de una salida PRF de WebAuthn a través de HKDF-SHA256 para una clave de acceso o datos biométricos. |
| Llamadas y transferencias de archivos. | DTLS-SRTP propio de WebRTC, negociado sobre señalización envuelta en NIP-17. |
| Aleatoriedad | La plataforma CSPRNG en todas partes: claves, nonces y la fluctuación de la marca de tiempo del envoltorio de regalo. |
Protección de metadatos
Vale la pena mencionar dos detalles en el camino del envoltorio de regalo, porque son los que separan a NIP-59 de "cifrado, pero obviamente de usted a ellos":
- Cada envoltorio está firmado por un clave de un solo uso generado solo para ese mensaje, por lo que no hay dos envoltorios que compartan un remitente.
- Cada envoltura
created_ates retroactivo aleatoriamente por hasta dos horas utilizando CSPRNG, por lo que los tiempos de envío y recepción no se pueden alinear.
Los chats grupales añaden efímeros rotativos beneficiario llaves encima de eso - ver Cómo funciona el cifrado de grupo.
Las cripto primitivas están en js/nym-crypto.js y
js/modules/key-vault.js en la aplicación web y en
android-ios-app/lib/core/crypto/ y
lib/services/mesh/noise/ en la aplicación Flutter. El
repositorio
es AGPL-3.0 y está completo: no hay ningún componente cerrado en el que confiar.