Herkos

Política de segurança

O Herkos trata chaves privadas e mensagens cifradas, por isso levamos a sério as comunicações de segurança e preferimos saber de um problema cedo do que tarde.

Comunicar uma vulnerabilidade

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

Comunique-o em privado por email para security@herkos.email.

O que convém incluir: qual é o problema, como reproduzi-lo, em que plataforma e versão o testou, e o que um atacante conseguiria fazer. Uma prova de conceito ajuda muito.

Nunca inclua num relatório a sua própria nsec, chave secreta ou segredo do bunker.

Procuramos confirmar a receção dos relatórios em poucos dias. Como o Herkos é um projeto pequeno, conceda-nos um prazo razoável para uma correção antes de o divulgar publicamente. Teremos todo o gosto em creditá-lo no aviso, salvo se preferir o contrário.

O que está abrangido

A própria aplicação Herkos: tratamento e armazenamento de chaves, cifragem e decifragem de mensagens (incluindo as verificações do remetente NIP-59 e o isolamento do Bcc em local_packages/nostr_mail), o bloqueio da aplicação, 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 seu pacote de protocolo (packages/herkos_drive_protocol) e a página que abre as suas ligações (herkos.app/f/); ver a secção própria mais abaixo.

O que não está abrangido

Limitações conhecidas, ditas com clareza

São compromissos de conceção, não vulnerabilidades. Preferimos escrevê-los a que alguém os descubra da pior maneira:

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

O Herkos Local Relay guarda no seu dispositivo os eventos das suas aplicações, também os privados (rascunhos, listas privadas, os envelopes que recebe). Isto é o que os protege e onde está o limite, plataforma a plataforma. Os problemas de segurança do relay comunicam-se como os outros (acima).

A base de dados é cifrada por inteiro, incluindo o diário (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 porta-chaves (libsecret) no Linux. Não leva nenhuma palavra-passe sua, porque o relay tem de arrancar sozinho. Sem a chave, o relay não arranca e diz porquê: nunca abre nem cria uma base não cifrada, e nunca apaga a que não consegue abrir.

Se… Android Windows Linux
alguém copia o ficheiro da base (uma cópia de segurança, uma pasta sincronizada, uma imagem do disco) Protegido Protegido Protegido
lhe roubam o aparelho ou o disco desligado Protegido: a chave está no Keystore Protegido, a menos que saibam a palavra-passe da sua sessão do Windows: a DPAPI protege a chave com ela Protegido, a menos que saibam a palavra-passe do seu porta-chaves (quase sempre, a da sua sessão)
outra conta de utilizador do mesmo aparelho Protegido Protegido: a DPAPI é por utilizador Protegido: o porta-chaves é por utilizador
outra aplicação ou programa a correr com o seu utilizador Protegido: o Android isola cada aplicação e o Keystore só dá a chave ao relay Não: a DPAPI cifra por utilizador, não por aplicação; um programa que corre como o utilizador pode pedir a chave tal como o relay Não: o porta-chaves da sua sessão não separa as aplicações umas das outras
um telemóvel com root, ou uma ferramenta que executa código como a aplicação Não — —
alguém tem o aparelho desbloqueado na mão Só com o PIN ou a impressão digital do relay, se os definir Igual Igual
alguém lê a memória do relay enquanto funciona Não Não Não

No computador, o limite da DPAPI e do porta-chaves é o de qualquer programa: protegem contra outros utilizadores e contra quem leva o disco, não contra um programa malicioso que já corre com o seu utilizador. Se esse caso o preocupa, o que protege é a cifragem do disco do sistema (BitLocker, LUKS) juntamente com não executar programas em que não confia. Num Linux sem porta-chaves (sem Secret Service), o relay não arranca e explica porquê: nunca guarda a chave em claro.

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

O que não protege, aqui:

A rede local, se a ativar (vem desativada):

O que 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 router pelo meio), essa porta vê-se a partir da Internet, embora continue a pedir uma chave da sua lista.

Cópias. A cópia cifrada tem palavra-passe (scrypt e XChaCha20-Poly1305): sem ela ninguém a consegue abrir, nem nós. A exportação JSONL não é cifrada e contém os seus eventos privados em claro; a aplicação avisa.

O bloqueio (PIN, e impressão digital ou Windows Hello) é pedido ao abrir a aplicação, após 30 segundos fora, e para aprovar um emparelhamento. É uma barreira de conveniência, como no Mail: não cifra nada. No Android, com PIN definido não há capturas de ecrã nem miniatura nas aplicações recentes, e desde o Android 12 nenhuma janela de outra aplicação se pode sobrepor à do relay enquanto a usa.

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

O Herkos Drive guarda os seus ficheiros em servidores Blossom e a lista dos seus ficheiros e pastas em relays Nostr, ambos cifrados no seu dispositivo. É isto que os protege, e estes sã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 cada servidor vê está na política de privacidade. Comunique os problemas de segurança do Drive da mesma forma que os outros (acima).

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

O que não protege:

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

Versões suportadas

As correções de segurança são aplicadas à última versão publicada. Dada a dimensão do projeto, as versões anteriores não são mantidas — atualize antes de comunicar um problema.