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 privadoSin firmar y nunca publicado solo.
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].
23333Mensaje del canal con nombreEfímero, etiquetado ['d', channel].
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. Sincronización de encuestas y configuraciones cifradas.
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.
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.
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 sobre 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.