7.7 KiB
Arquitetura do CyberCore Signer
Especificação da Arquitetura Modular, Modelo de Threads e Fluxo Criptográfico
O CyberCore Signer foi concebido a partir de princípios de alta coesão, baixo acoplamento e estrito isolamento de camadas. O software é desenvolvido em Java 21+ LTS (Java 25 LTS), utilizando o runtime modular do JDK, JavaFX para a camada de apresentação e os provedores JCA/JCE da plataforma para operações criptográficas seguras.
1. Visão Geral da Arquitetura em Módulos
O projeto adota uma divisão modular rigorosa no Maven, garantindo que regras de negócio e algoritmos de criptografia nunca se acoplem a componentes visuais:
cybercore-signer/
├── modules/
│ ├── cybercore-core/ # Núcleo de criptografia, provedores, protocolo e segurança
│ ├── cybercore-ui/ # Interface gráfica JavaFX, diálogos nativos e System Tray
│ └── cybercore-app/ # Ponto de entrada (Main), bootstrap e empacotamento nativo
├── sdk/ # SDK Web em JavaScript (@cybercore/signer-sdk)
├── scripts/ # Scripts de build nativo jpackage para Windows e Linux
└── docs/ # Especificações técnicas e manuais de integração
1.1 Módulo cybercore-core (Agnóstico de UI)
O módulo de núcleo é totalmente independente de JavaFX ou bibliotecas visuais:
- Domínio Imutável: Modelos imutáveis (
ManagedCertificate,SigningContext,SigningResult,CertificateType,CertificateStatus). - Serviços de Assinatura:
SigningServiceorquestra a aplicação de algoritmos certificados (SHA256withRSA) delegando a operação ao provedor de certificado resolvido. - Provedores de Certificados (
CertificateProvider): Abstração que unifica:Pkcs12CertificateProvider: leitura de arquivos.pfx/.p12em memória com limpeza volátil de senha.WindowsCertificateStoreProvider: integração com o repositório nativo do Windows (Windows-MYvia SunMSCAPI/CNG).Pkcs11CertificateProvider: integração direta com bibliotecas dinâmicas (DLL/SO) de drivers e tokens USB através do SunPKCS11.
- Protocolo e Rede Local:
CcspServerescuta exclusivamente em127.0.0.1:21325, fornecendo a API REST CCSP/1 com validação de origens e controle de concorrência. - Segurança e Persistência:
ApplicationRegistry,NonceManager(proteção anti-replay),OriginValidator,SmartCardSessionManagereAgentConfigurationServicecom armazenamento persistente em diretório de usuário (~/.cybercore/). - Assinatura de Documentos e Validação:
PdfSigningService(PAdES com salvamento incremental e carimbo TSA via PDFBox e Bouncy Castle),XmlSigningService(XAdES-BES e XMLDSig viajavax.xml.crypto) eSignatureValidationServicepara conferência de integridade e signatários.
1.2 Módulo cybercore-ui (Apresentação JavaFX)
Responsável por toda a interação com o usuário:
- Interface Principal (
MainAppView): Painel de navegação moderno com alternador dinâmico de tema (Claro/Escuro), grade de operações rápidas (PDF, XML, Assinatura Atachada, Designer de Selos, Validar Assinatura, Sair do Agente) e coluna lateral de utilitários (Logs em tempo real, Configurações, Tutorial, Certificados e Sobre). - Diálogos de Consentimento e PIN: Modais nativos de aprovação visual para requisições do protocolo CCSP/1 (
SignatureConfirmationDialog,ApplicationAuthorizeDialog) e coleta segura de PIN de tokens (A1PasswordDialog). - Designer de Selos Digitais (
SealDesignerDialog): Ferramenta com Live Preview para criação de selos visuais com controle de cores, estilo de brasão, exibição de nome completo sem truncamento e privacidade de CPF. - Bandeja do Sistema (System Tray): Execução minimizada com menu de contexto rápido para restauração da tela ou encerramento da sessão.
1.3 Módulo cybercore-app (Orquestração e Bootstrap)
Ponto de partida da aplicação (CyberCoreApp):
- Processa argumentos de linha de comando (
--dev,--headless). - Executa rotinas de diagnóstico pré-inicialização do ambiente Java e disponibilidade criptográfica.
- Inicia o
CcspServerem segundo plano e abre a interface gráfica naJavaFX Application Thread. - Empacota o executável consolidado via
maven-shade-plugine orquestra o build nativo viajpackage.
2. Modelo de Threads e Concorrência
Para manter a interface gráfica sempre fluida e ágil, o CyberCore Signer utiliza um particionamento rígido de threads:
graph TD
subgraph UI Layer
JFX[JavaFX Application Thread]
end
subgraph Local Protocol Layer
HTTPPool[CcspServer Worker Pool (FixedThreadPool 8)]
end
subgraph Background Services
Watcher[SmartCardWatcher Thread (PC/SC Loop)]
AsyncTasks[JavaFX Task / CompletableFuture Workers]
end
subgraph Hardware Critical Section
Lock[Trava Serializada FIFO: signLock]
Hardware[Token Físico A3 / SmartCard Driver]
end
HTTPPool -->|Solicita Aprovação Visual| JFX
JFX -->|Consentimento Concedido| HTTPPool
HTTPPool --> Lock
AsyncTasks --> Lock
Lock --> Hardware
- JavaFX Application Thread: Dedicada exclusivamente à renderização da interface e tratamento de eventos visuais. Nenhuma operação criptográfica, leitura de disco ou chamada de rede é executada nesta thread.
- CcspServer Worker Pool: Pool de 8 threads daemon dedicadas ao atendimento de requisições HTTP da API REST CCSP/1.
- SmartCardWatcher Thread: Thread daemon isolada que executa
cardTerminal.waitForCardPresent()ewaitForCardAbsent()para monitorar hardware PC/SC sem onerar a CPU. - Trava Serializada FIFO (
signLock): Implementada viaReentrantLock(true). Garante que operações de assinatura em cartões inteligentes físicos sejam enfileiradas ordenadamente, prevenindo falhas de hardware e estados corrompidos em drivers de fabricantes mono-thread.
3. Fluxo de Dados e Assinatura Descentralizada por Digest
A arquitetura do CyberCore Signer prioriza a privacidade e o modelo de assinatura por digest:
sequenceDiagram
autonumber
actor Usuario as Usuário
participant Web as Aplicação Web (SDK)
participant CCSP as CcspServer (127.0.0.1)
participant UI as CyberCore JavaFX
participant Crypto as SigningService & Providers
Web->>CCSP: POST /ccsp/v1/sign (digest, appId, certHint, nonce, expires_at)
CCSP->>CCSP: Valida autorização, nonce anti-replay e integridade do digest
CCSP->>UI: Solicita confirmação visual (requestSignatureConfirmation)
UI->>Usuario: Exibe Diálogo Nativo (Nome do Documento, Hash SHA-256, Certificado)
Usuario->>UI: Clica em "Autorizar Assinatura" (e digita PIN se requerido)
UI-->>CCSP: Confirmação concedida
CCSP->>Crypto: sign(SigningContext) sob signLock.lock()
Crypto->>Crypto: JCA/JCE Signature.update(digest) + sign()
Crypto-->>CCSP: SigningResult (signatureBytes, certChain)
CCSP-->>Web: 200 OK JSON { status: "signed", signature: "Base64", certificate: "Base64" }
4. Persistência de Dados e Configurações
Todos os dados de configuração e personalizações do usuário são armazenados no diretório do usuário no sistema operacional:
- Diretório Base:
~/.cybercore/(ou%USERPROFILE%\.cybercore\no Windows). config.json: Configurações globais do agente (política de cache de PIN, tema padrão, selo padrão ativo).authorized-apps.json: Registro de aplicações web autorizadas pelo usuário, contendoapplication_id, nome amigável e data da aprovação.seals/*.json: Selos visuais SVG personalizados criados ou importados pelo usuário no designer de selos.