Ir ao contido
Volver a Nymchat

Base de coñecemento Baixo o capó

Protocolo e eventos

O que Nymchat pon realmente no fío, para quen constrúa contra el, auditándoo ou lendo eventos doutro cliente Nostr.

Tipos de eventos

amableUsado paraNotas
0Metadatos do perfilPerfil estándar de Nostr: nome, imaxe, banner, sobre, lud16.
5Solicitudes de eliminaciónNIP-09.
7ReacciónsNIP-25, con a ['k', originalKind] etiqueta para que se presente unha reacción contra o tipo de canle correcto.
13SeloA capa media dunha mensaxe NIP-17.
14Rumor de mensaxe privadaSen asinar, e nunca publicado por si só.
1059Papel de agasalloNIP-59. O que realmente chega a un relé para mensaxes privadas e chats de grupo.
1984InformesNIP-56.
9734 / 9735Solicitude de zap e recibo de zapNIP-57.
10030Listas de paquetes de emoji personalizadasNIP-30.
20000Mensaxe da canle GeohashEfímero, etiquetado ['g', geohash].
23333Mensaxe da canle nomeadaEfímero, etiquetado ['d', channel].
24420 / 24421Indicadores de mecanografía pública e recibos de lecturaEspecífico de Nymchat, para canles públicas.
25051 / 25052Sinalización punto a punto e estado de transferencia de ficheirosEspecífico de Nymchat.
30030Conxuntos de emoji personalizadosNIP-30.
30078Datos da aplicaciónNIP-78. Sincronización de enquisas e configuración cifrada.
69420Recibos de lectura privados e estado de entregaEspecífico de Nymchat, levado como un rumor dentro dunha envoltura de agasallo. Un tipo separado de 14 deliberadamente, para que outros clientes NIP-17 non emitan mensaxes directas en branco para cada recibo.

NIP implementos Nymchat

NIPO que dá a Nymchat
NIP-07Inicie sesión cunha extensión do navegador.
NIP-09Solicitudes de eliminación.
NIP-13Proba de traballo. As mensaxes de saída extraen polo menos 16 bits.
NIP-17Mensaxes directas privadas e a base para os chats en grupo.
NIP-25Reaccións.
NIP-30Emoji personalizado.
NIP-40Marcas de tempo de caducidade: mensaxes que desaparecen.
NIP-44Cifrado con versións, usado para selos, envolturas e sincronización de configuracións.
NIP-46sinatura remota - bunker://.
NIP-56Informes.
NIP-57Zaps de raios.
NIP-59Papel de agasallo.
NIP-78Datos de aplicación arbitraria.
NIP-98Autorización HTTP, para os puntos finais aloxados.

Criptografía

OndeQue
Identidade e sinaturassecp256k1 con sinaturas Schnorr (BIP-340), como especifica Nostr.
Mensaxes privadas e chats en grupoNIP-44 v2: ECDH en secp256k1, HKDF-SHA256, ChaCha20 con HMAC-SHA256 e recheo para que a lonxitude do texto cifrado non diga a lonxitude da mensaxe.
Sesións de malla BluetoothRuído XX: X25519, ChaCha20-Poly1305 (IETF), Ed25519 para sinaturas de anuncio, SHA-256 e HMAC debaixo.
Identidade en repousoAES-GCM-256. A clave provén de PBKDF2-SHA256 en 310.000 iteracións para un contrasinal ou PIN, ou dunha saída WebAuthn PRF a través de HKDF-SHA256 para unha clave de acceso ou biométrica.
Chamadas e transferencias de ficheirosO propio DTLS-SRTP de WebRTC, negociado sobre a sinalización envuelta en NIP-17.
AleatoriedadeA plataforma CSPRNG en todas partes: claves, nonces e a vibración da marca de tempo do envoltorio de agasallo.

Protección de metadatos

Dous detalles no camiño do envoltorio de agasallos merecen a pena destacar, porque son os que separan a NIP-59 de "cifrado, pero obviamente de ti a eles":

  • Cada envoltura está asinada por a chave única xerado só para esa mensaxe, polo que non hai dous envoltorios que compartan un remitente.
  • Cada envoltura created_at é retrodatados aleatoriamente ata dous horas usando o CSPRNG, polo que os horarios de envío e recepción non se poden aliñar.

Os chats de grupo engaden efémeros rotativos destinatario teclas enriba diso - ver Como funciona o cifrado de grupo.

Lectura da fonte

Os primitivos criptográficos están en js/nym-crypto.js e js/modules/key-vault.js na aplicación web e baixo android-ios-app/lib/core/crypto/ e lib/services/mesh/noise/ na aplicación Flutter. O repositorio é AGPL-3.0 e completo; non hai ningún compoñente pechado para asumir a confianza.