Saltar al contenido
Volver a Nymchat

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.

Tipos de eventos

AmableUtilizado paraNotas
0Metadatos del perfilPerfil estándar de Nostr: nombre, imagen, banner, acerca de, lud16.
5Solicitudes de eliminaciónPNI-09.
7ReaccionesNIP-25, con un ['k', originalKind] etiqueta para que se presente una reacción contra el tipo de canal correcto.
13SelloLa capa intermedia de un mensaje NIP-17.
14Rumor de mensaje privadoNo firmado, y nunca publicado por sí solo. Una respuesta de hilo lleva un ['nymthread', rootId] etiqueta dentro del rumor cifrado, referenciando el id de mensaje compartido de la raíz.
1059Papel de regaloPNI-59. Lo que realmente llega a un relevo para mensajes privados y chats grupales.
1984InformesPNI-56.
9734 / 9735Solicitud de zap y recibo de zapPNI-57.
10030Listas de paquetes de emoji personalizadosPNI-30.
20000Mensaje del canal GeohashEfímero, etiquetado ['g', geohash]Una respuesta de thread añade un NIP-10 marcado ['e', rootId, '', 'root'] El día.
23333Mensaje del canal con nombreEfímero, etiquetado ['d', channel]Una respuesta de thread añade un NIP-10 marcado ['e', rootId, '', 'root'] El día.
24420 / 24421Indicadores de mecanografía públicos y recibos de lectura.Específico de Nymchat, para canales públicos.
25051 / 25052Señalización de igual a igual y estado de transferencia de archivosEspecífico de Nymchat.
30030Conjuntos de emojis personalizadosPNI-30.
30078Datos de la aplicaciónPNI-78. Encuestas, sincronización de configuraciones cifradas y anuncios de claves post-cuánticas (etiquetados nym-pq, que lleva una clave pública ML-KEM-768 con vencimiento NIP-40).
69420Confirmaciones de lectura privadas y estado de entregaEspecí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

CORTARLo que le da Nymchat
PNI-07Inicie sesión con una extensión del navegador.
PNI-09Solicitudes de eliminación.
NIP-10Etiquetas de respuesta marcadas: cómo un thread de canal responde a su mensaje raíz.
PNI-13Prueba de trabajo. Los mensajes salientes se minan hasta al menos 16 bits.
PNI-17Mensajes directos privados y base para chats grupales.
PNI-25Reacciones.
PNI-30Emojis personalizados.
PNI-40Marcas de tiempo de vencimiento: mensajes que desaparecen.
PNI-44Cifrado versionado, utilizado para sellos, envolturas y sincronización de configuraciones.
PNI-46Firma remota bunker://.
PIN-56Informes.
PIN-57Rayos.
PNI-59Envolturas de regalo.
PNI-78Datos de aplicación arbitrarios.
PNI-98Autenticación HTTP, para los puntos finales alojados.

Criptografía

DóndeQué
Identidad y firmassecp256k1 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.
Mensajes privados y chats grupales, entre usuarios de Nymchat.La misma carga útil NIP-44 v2, sin modificarse, se selló por segunda vez dentro de ChaCha20-Poly1305 desde una encapsulación ML-KEM-768 (FIPS 203) a través de HKDF-SHA256. pq2. prefixo para que un lector elija el camino inspeccionando la carga útil. Ambas capas deben ser rotas para recuperar un mensaje. cifrado resistente a los cuánticos.
Sesiones de malla BluetoothRuido XX: X25519, ChaCha20-Poly1305 (IETF), Ed25519 para firmas de anuncios, SHA-256 y HMAC debajo.
Identidad en reposoAES-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 a través de señalización envuelta en NIP-17.
AleatoriedadLa 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_at es 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.

leyendo la fuente

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.