5.4 KiB
Modelo de Segurança e Privacidade
Diretrizes de Segurança em Profundidade, Proteção Criptográfica e Conformidade LGPD
O CyberCore Signer foi concebido sob os princípios de Security by Design (Segurança desde a Concepção) e Least Privilege (Menor Privilégio), seguindo as normas da Infraestrutura de Chaves Públicas Brasileira (ICP-Brasil) e as exigências da Lei Geral de Proteção de Dados (LGPD — Lei nº 13.709/2018).
1. Isolamento de Rede e Proteção Local
1.1 Ligação Estrita ao Loopback (127.0.0.1)
O servidor HTTP do protocolo CCSP/1 vincula-se exclusivamente ao endereço IPv4 local 127.0.0.1.
- Sem Escuta Externa: O agente nunca realiza bind em
0.0.0.0ou em interfaces de rede de área local (LAN) ou externa (WAN). - Bloqueio no Socket: Tentativas de acesso originadas fora da própria estação de trabalho são sumariamente recusadas pelo subsistema de rede do sistema operacional antes de qualquer processamento da aplicação.
1.2 Proteção Contra Ataques de DNS Rebinding
Para neutralizar ataques em que domínios externos tentam resolver para 127.0.0.1 e burlar a política de mesma origem do navegador:
- O
CcspServervalida expressamente o cabeçalho HTTPHost. - Somente requisições com
Host: 127.0.0.1:21325ouHost: localhost:21325são aceitas; qualquer outro valor é rejeitado com status403 Forbidden.
1.3 Controle de Origem (CORS) e Preflight
- Requisições prévias HTTP
OPTIONSsão validadas contra as origens web homologadas. - O cabeçalho
Access-Control-Allow-Originé devolvido estritamente com a origem solicitante autorizada (nunca com wildcard*).
2. Autenticação e Autorização de Aplicações
Nenhuma aplicação web externa tem acesso a certificados digitais ou serviços de assinatura sem autorização prévia e explícita do usuário:
- Handshake de Aprovação (
POST /ccsp/v1/authorize):- Ao tentar comunicar-se pela primeira vez, a aplicação web deve fornecer seu
application_id(UUID estável) e seu nome amigável. - O CyberCore Signer suspende a requisição e exibe um modal nativo no desktop informando o nome da aplicação e solicitando autorização do usuário.
- Ao tentar comunicar-se pela primeira vez, a aplicação web deve fornecer seu
- Armazenamento Seguro de Permissões:
- As aplicações autorizadas são gravadas no arquivo local
~/.cybercore/authorized-apps.json. - O usuário pode visualizar e revogar a qualquer momento a autorização de qualquer aplicação através da aba Configurações na interface gráfica.
- As aplicações autorizadas são gravadas no arquivo local
3. Proteção Contra Ataques de Replay
Para impedir que requisições de assinatura capturadas por softwares maliciosos na máquina sejam reenviadas:
- Identificador Único (
nonce): Toda requisição ao/ccsp/v1/signdeve conter um UUID aleatório criptograficamente forte gerado pelo chamador. - Janela de Validade Temporal (
expires_at): A requisição inclui uma estampa de tempo limite (TTL). - Gerenciador de Nonces (
NonceManager):- Mantém uma estrutura em memória com os identificadores recentes;
- Se o mesmo
noncefor submetido mais de uma vez dentro da janela de validade, a operação é rejeitada com erro estruturadoREPLAY_DETECTED(HTTP409 Conflict); - Se a data/hora atual ultrapassar
expires_at, a operação é rejeitada com erroREQUEST_EXPIRED(HTTP422 Unprocessable Entity).
4. Confirmação Visual Obrigatória e Proteção de PIN/Chaves
- Assinatura Exclusivamente Assistida: Toda operação de assinatura exige interação humana voluntária. O agente nunca assina documentos em segundo plano de forma silenciosa ou desassistida via API.
- Inviolabilidade da Chave Privada: As chaves privadas ICP-Brasil nunca são exportadas em formato de bytes brutos. Operações em certificados A3 utilizam handles criptográficos do hardware, garantindo que a chave nunca deixe o chip criptográfico.
- Higienização Segura de Memória Volátil:
- O PIN de smartcards e senhas de certificados A1 nunca são convertidos para strings imutáveis do Java (
java.lang.String). - São manipulados estritamente como arrays de caracteres mutáveis
char[]. - Imediatamente após o carregamento da chave, o array é sobrescrito com zeros através de
Arrays.fill(pinBuffer, (char) 0).
- O PIN de smartcards e senhas de certificados A1 nunca são convertidos para strings imutáveis do Java (
- Remoção de Hardware (
TOKEN_REMOVED): Se o usuário desconectar o token USB ou retirar o cartão do leitor durante ou após a assinatura, oSmartCardWatcherforça a limpeza imediata do cache de sessão e dos buffers do sistema operacional.
5. Privacidade de Dados e Conformidade com a LGPD
- Assinatura Descentralizada por Digest: O CyberCore Signer opera prioritariamente recebendo apenas o hash SHA-256 do arquivo. O conteúdo completo do documento (contrato, laudo, prontuário) não transita pela API local nem é gravado em logs.
- Mascaramento e Sigilo de CPF: Nos selos visuais em PDF, o usuário pode configurar o modo de exibição de seu CPF (
CpfDisplayMode):FULL: Exibição completa (123.456.789-00);MASKED: Dígitos sensíveis ocultados (***.456.789-**);NONE: Remoção completa do CPF do gráfico visual do selo.
- Auditoria e Logs Transparentes: Os logs do agente registram apenas identificadores de correlação (
request_id), algoritmo utilizado e status da operação, sem armazenar hashes de documentos sigilosos ou dados pessoais desnecessários.