Herkos

Política de segurança

O Herkos lida com chaves privadas e mensagens criptografadas, por isso levamos a sério os relatos de segurança e preferimos saber de um problema cedo do que tarde.

Como relatar uma vulnerabilidade

Por favor, não abra uma issue pública para problemas de segurança.

Relate-o de forma privada por e-mail para security@herkos.email.

Coisas úteis para incluir: qual é o problema, como reproduzi-lo, em qual plataforma e versão você testou e o que um atacante poderia conseguir. Uma prova de conceito ajuda muito.

Nunca inclua num relato sua própria nsec, sua chave secreta ou o segredo do seu bunker.

Procuramos confirmar o recebimento dos relatos em poucos dias. Como o Herkos é um projeto pequeno, por favor, dê um prazo razoável para a correção antes de divulgar publicamente. Teremos prazer em dar crédito a você no aviso de segurança, a menos que prefira o contrário.

O que está no escopo

O próprio aplicativo Herkos: o tratamento e o armazenamento de chaves, a criptografia e descriptografia de mensagens (incluindo as verificações de remetente do NIP-59 e o isolamento do Cco em local_packages/nostr_mail), o bloqueio do aplicativo, a comunicação com relays e bridges, o tratamento de anexos e o processo de compilação e publicação. No Herkos Drive, também o pacote do protocolo dele (packages/herkos_drive_protocol) e a página que abre os links dele (herkos.app/f/); veja a seção própria dele mais abaixo.

O que está fora do escopo

Limitações conhecidas, ditas com clareza

Estas são escolhas de projeto, não vulnerabilidades. Preferimos deixá-las por escrito a alguém descobri-las do pior jeito:

Herkos Local Relay: o que ele protege e o que não protege

O Herkos Local Relay guarda no seu dispositivo os eventos dos seus aplicativos, inclusive os privados (rascunhos, listas privadas, os envelopes que você recebe). Isto é o que os protege e onde fica o limite, plataforma por plataforma. Problemas de segurança do relay são relatados do mesmo jeito que os outros (acima).

O banco de dados é criptografado por inteiro, inclusive o journal (SQLite3 Multiple Ciphers, AEGIS-256). A chave são 32 bytes aleatórios criados no dispositivo e guardados no armazenamento seguro do sistema: o Keystore no Android, a DPAPI no Windows, o chaveiro (libsecret) no Linux. Ela não depende de nenhuma senha sua, porque o relay precisa iniciar sozinho. Sem a chave, o relay não inicia e avisa: ele nunca abre nem cria um banco não criptografado, e nunca apaga o que não consegue abrir.

Se… Android Windows Linux
alguém copia o arquivo do banco (um backup, uma pasta sincronizada, uma imagem do disco) Protegido Protegido Protegido
roubam o aparelho ou o disco desligado Protegido: a chave está no Keystore Protegido, a menos que saibam a senha da sua sessão do Windows: a DPAPI protege a chave com ela Protegido, a menos que saibam a senha do seu chaveiro (quase sempre, a da sua sessão)
outra conta de usuário no mesmo aparelho Protegido Protegido: a DPAPI é por usuário Protegido: o chaveiro é por usuário
outro aplicativo ou programa rodando com o seu usuário Protegido: o Android isola cada aplicativo e o Keystore só entrega a chave ao relay Não: a DPAPI criptografa por usuário, não por aplicativo; um programa que roda como você pode pedir a chave do mesmo jeito que o relay Não: o chaveiro da sua sessão não separa um aplicativo do outro
um celular com root, ou uma ferramenta que executa código como o aplicativo Não — —
alguém está com o aparelho desbloqueado na mão Só com o PIN ou a impressão digital do relay, se você os definir Igual Igual
alguém lê a memória do relay enquanto ele roda Não Não Não

No computador, o limite da DPAPI e do chaveiro é o de qualquer programa: eles protegem contra outros usuários e contra quem leva o disco, não contra um programa malicioso que já roda com o seu usuário. Se esse caso te preocupa, o que protege é a criptografia do disco do sistema (BitLocker, LUKS) junto com não rodar programas em que você não confia. Num Linux sem chaveiro (sem Secret Service), o relay não inicia e explica por quê: ele nunca guarda a chave em texto puro.

Quem entra, no próprio dispositivo. O relay só escuta em 127.0.0.1, e qualquer aplicativo do dispositivo, ou uma página web no navegador, consegue alcançar esse endereço. Por isso:

O que ele não protege, aqui:

A rede local, se você ativá-la (ela vem desativada):

O que ele não protege, aqui: quem está na mesma rede vê que o aparelho tem uma porta aberta e quanto tráfego passa, mas não o que passa; e se o aparelho tem um endereço público (sem roteador no meio), essa porta fica visível na Internet, embora continue pedindo uma chave da sua lista.

Cópias. A cópia criptografada tem senha (scrypt e XChaCha20-Poly1305): sem ela ninguém consegue abri-la, nem nós. A exportação JSONL não é criptografada e contém seus eventos privados em texto puro; o aplicativo avisa.

O bloqueio (PIN, e impressão digital ou Windows Hello) é pedido ao abrir o aplicativo, depois de 30 segundos fora, e para aprovar um pareamento. É uma barreira de conveniência, como no Mail: ele não criptografa nada. No Android, com PIN definido não há capturas de tela nem miniatura nos aplicativos recentes, e desde o Android 12 nenhuma janela de outro aplicativo pode ficar por cima da do relay enquanto você o usa.

Herkos Drive: o que ele protege e o que não protege

O Herkos Drive guarda seus arquivos em servidores Blossom e a lista dos seus arquivos e pastas em relays Nostr, ambos criptografados no seu dispositivo. Isto é o que os protege e onde estão os limites. O detalhe completo está em spec-drive.md e no modelo de ameaças amenazas-drive.md, em packages/herkos_drive_protocol/; o que cada relay e servidor vê está na política de privacidade. Relate os problemas de segurança do Drive da mesma forma que qualquer outro (acima).

O que os relays e servidores não conseguem fazer:

O que ele não protege:

Como é verificado. Duas revisões internas com base no modelo de ameaças (2 de novembro de 2026) e suas correções; testes do que cada evento e bloco mostra; fuzzing de cada leitor do que vem de fora (eventos, selos, manifestos, links, cópias). Ainda sem auditoria externa: uma está prevista antes do beta público, e o relatório dela será publicado na íntegra. O Drive ainda está em desenvolvimento.

Versões com suporte

As correções de segurança são aplicadas à versão publicada mais recente. Dado o tamanho do projeto, as versões antigas não são mantidas — por favor, atualize antes de relatar.