Pular para o conteúdo
De volta ao Nymchat

Base de conhecimento Sob o capô

Protocolo e eventos

O que o Nymchat realmente coloca na rede, para qualquer um que esteja construindo contra ele, auditá-lo ou ler eventos de outro cliente Nostr.

Tipos de eventos

TipoUsado paraNotas
0Metadados de perfilPerfil Nostr padrão: nome, foto, banner, sobre, lud16.
5Solicitações de exclusãoNIP-09.
7ReaçõesNIP-25, com ['k', originalKind] tag para que uma reação seja arquivada contra o tipo de canal correto.
13SeloA camada intermediária de uma mensagem NIP-17.
14Boato de mensagem privadaSem assinatura, e nunca publicado por conta própria. Uma resposta de thread carrega um ['nymthread', rootId] marcando dentro do rumor criptografado, referenciando o id de mensagem compartilhada da raiz.
1059Embrulho para presenteNIP-59. O que realmente atinge um retransmissor para mensagens privadas e bate-papos em grupo.
1984RelatóriosNIP-56.
9734 / 9735Solicitação de Zap e recebimento de ZapNIP-57.
10030Listas de pacotes de emojis personalizadosNIP-30.
20000Mensagem do canal GeohashEfêmero, marcado ['g', geohash]Uma resposta de thread adiciona um NIP-10 marcado ['e', rootId, '', 'root'] O dia.
23333Mensagem do canal nomeadoEfêmero, marcado ['d', channel]Uma resposta de thread adiciona um NIP-10 marcado ['e', rootId, '', 'root'] O dia.
24420 / 24421Indicadores públicos de digitação e recibos de leituraEspecífico do Nymchat, para canais públicos.
25051 / 25052Sinalização ponto a ponto e status de transferência de arquivosEspecífico do Nymchat.
30030Conjuntos de emojis personalizadosNIP-30.
30078Dados do aplicativoNIP-78. Pesquisas, sincronização de configurações criptografadas e anúncios de chave pós-quântica (marcados nym-pq, carregando uma chave pública ML-KEM-768 com expiração NIP-40).
69420Recibos de leitura privados e status de entregaEspecífico do Nymchat, divulgado como boato dentro de uma embalagem de presente. Um tipo separado de 14 deliberadamente, para que outros clientes NIP-17 não renderizem mensagens diretas em branco para cada recibo.

NIPs que Nymchat implementa

BELISCARO que isso oferece ao Nymchat
NIP-07Faça login com uma extensão do navegador.
NIP-09Solicitações de exclusão.
NIP-10Etiquetas de resposta marcadas – como uma resposta de thread de canal aponta para sua mensagem raiz.
NIP-13Prova de trabalho. As mensagens de saída são extraídas em pelo menos 16 bits.
NIP-17Mensagens diretas privadas e base para bate-papos em grupo.
NIP-25Reações.
NIP-30Emoji personalizado.
NIP-40Carimbos de data e hora de expiração – mensagens que desaparecem.
NIP-44Criptografia versionada, usada para selos, wraps e sincronização de configurações.
NIP-46Assinatura remota — bunker://.
NIP-56Relatórios.
NIP-57Relâmpagos.
NIP-59Embrulhos para presente.
NIP-78Dados de aplicação arbitrários.
NIP-98Autenticação HTTP, para os endpoints hospedados.

Criptografia

OndeO que
Identidade e assinaturassecp256k1 com assinaturas Schnorr (BIP-340), conforme especifica Nostr.
Mensagens privadas e bate-papos em grupoNIP-44 v2: ECDH em secp256k1, HKDF-SHA256, ChaCha20 com HMAC-SHA256 e preenchimento para que o comprimento do texto cifrado não revele o comprimento da mensagem.
Mensagens privadas e chats em grupo, entre usuários do NymchatA mesma carga útil NIP-44 v2, não modificada, selada uma segunda vez dentro do ChaCha20-Poly1305 chaveado a partir de uma encapsulação ML-KEM-768 (FIPS 203) através do HKDF-SHA256. pq2. prefixo para que um leitor escolha o caminho inspeccionando a carga útil. Ambas as camadas devem ser quebradas para recuperar uma mensagem. criptografia resistente a quantum.
Sessões de malha BluetoothRuído XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 para assinaturas de anúncio, SHA-256 e HMAC abaixo.
Identidade em repousoAES-GCM-256. A chave vem de PBKDF2-SHA256 em 310.000 iterações para uma senha ou PIN, ou de uma saída WebAuthn PRF por meio de HKDF-SHA256 para uma chave de acesso ou biométrica.
Chamadas e transferências de arquivosO próprio DTLS-SRTP do WebRTC, negociado sobre sinalização encapsulada em NIP-17.
AleatoriedadeToda a plataforma CSPRNG – chaves, nonces e o jitter do carimbo de data/hora do embrulho para presente.

Proteção de metadados

Vale a pena destacar dois detalhes no caminho do embrulho para presente, porque são eles que separam o NIP-59 de "criptografado, mas obviamente de você para eles":

  • Cada envoltório é assinado por um chave única gerado apenas para essa mensagem, portanto, não há dois wraps que compartilhem um remetente.
  • Cada envoltório created_at é retroativo aleatoriamente em até dois horas usando o CSPRNG, portanto, os tempos de envio e recebimento não podem ser alinhados.

Bate-papos em grupo adicionam efêmero rotativo destinatário teclas em cima disso - veja Como funciona a criptografia de grupo.

Lendo a fonte

As cripto primitivas estão em js/nym-crypto.js e js/modules/key-vault.js no aplicativo da web e em android-ios-app/lib/core/crypto/ e lib/services/mesh/noise/ no aplicativo Flutter. O repositório é AGPL-3.0 e completo – não há nenhum componente fechado para confiar.