# 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.