Files
cybercore-signer/docs/security.md
T

2.6 KiB

Modelo de Segurança e Privacidade

O CyberCore Signer foi projetado seguindo as diretrizes rigorosas da ICP-Brasil e os princípios de Security by Design e Least Privilege.


1. Isolamento de Rede

  1. Loopback Estrito: O socket do servidor HTTP local vincula-se exclusivamente ao endereço IP 127.0.0.1. Nenhuma interface de rede externa (LAN ou WAN) escuta a porta de serviço 21325.
  2. Prevenção contra Exposição Acidental: Testes unitários e de arquitetura garantem que conexões fora de 127.0.0.1 sejam bloqueadas imediatamente no nível de bind do socket.

2. Autenticação e Autorização de Aplicações

Nenhuma aplicação desconhecida tem autorização para obter certificados ou assinar documentos sem consentimento expresso:

  1. Handshake de Autorização (POST /ccsp/v1/authorize):
    • A aplicação web identifica-se enviando seu application_id (UUID estável) e seu nome amigável.
    • O CyberCore Signer suspende a requisição e abre uma janela modal nativa na tela principal do sistema operacional perguntando se o usuário autoriza aquele domínio web.
  2. Armazenamento Seguro das Autorizações:
    • As aplicações autorizadas são gravadas em ~/.cybercore/authorized-apps.json.
    • O usuário pode visualizar e revogar a qualquer momento qualquer permissão através da aba Configurações na interface gráfica.

3. Proteção Contra Ataques de Replay

Cada solicitação de assinatura enviada pelo SDK deve incluir:

  • Um nonce (UUID criptograficamente aleatório);
  • Um campo expires_at (ou timestamp).

O componente NonceManager:

  • Armazena os nonces recentes em memória protegida com expiração temporal (TTL);
  • Rejeita com código estruturado REPLAY_DETECTED caso o mesmo nonce seja submetido mais de uma vez;
  • Rejeita com código REQUEST_EXPIRED requisições cuja data/hora de validade já tenha sido ultrapassada.

4. Confirmação Visual Obrigatória e Proteção de PIN/Chaves

  1. Confirmação Manual do Usuário: Toda e qualquer assinatura exige intervenção física e visual do usuário. Não é possível assinar "silenciosamente" por chamadas de API em segundo plano.
  2. Inviolabilidade da Chave Privada: A chave privada nunca é exportada nem manipulada em forma de bytes puros. Todas as operações utilizam handles JCA/JCE ou comandos de hardware nativo.
  3. Proteção de PIN e Senhas:
    • O PIN de smartcards e a senha de arquivos A1 nunca são transmitidos para a aplicação web e nunca aparecem em logs de auditoria.
    • Em caso de remoção do hardware, o SmartCardWatcher limpa e zera os buffers de memória de PIN imediatamente.