7.0 KiB
Certificados Digitais A1, A3 e PKCS#11
Guia Técnico de Suporte a Provedores Criptográficos, Hardware PC/SC e ICP-Brasil
O CyberCore Signer fornece uma camada unificada de abstração para gerenciamento e consumo de certificados digitais brasileiros padrão ICP-Brasil, cobrindo certificados em arquivo de software (A1) e dispositivos físicos criptográficos em hardware (A3 via tokens USB e cartões inteligentes smartcards).
1. Certificados Digitais A1 (Software / PKCS#12)
Os certificados padrão A1 são contêineres criptográficos protegidos por senha em formato .pfx ou .p12.
1.1 Arquitetura e Ciclo de Vida
- Importação: O usuário seleciona o arquivo via diálogo nativo (
FileChooser) na interface ou pelo método de importação no Dashboard. - Coleta Segura de Senha: A senha é obtida por meio do diálogo
A1PasswordDialoge armazenada estritamente em um array de caractereschar[]volátil. Logo após o carregamento doKeyStore, o array é preenchido com zeros viaArrays.fill(passwordChars, (char) 0). - Instanciação JCA/JCE: O provedor
Pkcs12CertificateProviderinicializa umKeyStore.getInstance("PKCS12")e extrai o certificado X.509 e o manipulador da chave privada (PrivateKey). - Isolamento de Memória: A chave privada nunca é serializada, exportada para disco ou enviada em logs. Durante a assinatura, a chave privada em memória gera os bytes da assinatura via
Signature.getInstance("SHA256withRSA").
2. Certificados Digitais A3 no Windows (Windows Certificate Store)
No sistema operacional Microsoft Windows (Windows 10 e Windows 11), a grande maioria dos middlewares de fabricantes de tokens e smartcards registra os certificados automaticamente no repositório de certificados pessoais do usuário (Windows-MY).
2.1 Funcionamento do WindowsCertificateStoreProvider
- Integração SunMSCAPI / CNG: O agente consome o provedor JCA nativo
SunMSCAPI(KeyStore.getInstance("Windows-MY")), integrando-se diretamente à CryptoAPI e à moderna Cryptography Next Generation (CNG) do Windows. - Preservação no Chip Físico: A chave privada nunca sai do chip criptográfico do token. As operações de assinatura delegam a cifragem ao módulo de segurança em hardware (HSM/Token).
- Diálogo Nativo de PIN do Fabricante: Quando o token exige autenticação por PIN para liberar a chave privada, a janela nativa do próprio driver do fabricante (ex: diálogo nativo SafeSign ou SafeNet) é exibida com total segurança pelo subsistema de segurança do Windows.
- Tratamento de Chaves Não Exportáveis: O CyberCore Signer respeita integralmente a flag de chave privada não exportável, utilizando apenas referências de handle sem tentar copiar os bytes brutos da chave.
3. Acesso Direto a Hardware PKCS#11 (Tokens USB e Smartcards)
Para ambientes corporativos que requerem comunicação direta com bibliotecas de middleware ou para execução em ambientes Linux, o componente Pkcs11CertificateProvider interage com o driver PKCS#11 do fabricante através do módulo do JDK jdk.crypto.cryptoki (SunPKCS11).
3.1 Mapeamento de Middlewares Homologados no Brasil
O CyberCore Signer possui rotinas automáticas de varredura nos diretórios padrão do sistema (System32, SysWOW64 no Windows e /usr/lib/, /usr/local/lib/ no Linux):
| Fabricante / Modelo | Biblioteca Windows (DLL) | Biblioteca Linux (.so) | Tipo de Dispositivo |
|---|---|---|---|
| SafeSign Identity Client (AET / GD) | aetpkss1.dll |
libaetpkss.so |
Tokens e Smartcards (Certisign, Valid, Serasa) |
| SafeNet Authentication Client (Gemalto / Thales) | eps2003csp11.dll, eTPKCS11.dll |
libeTPkcs11.so |
Tokens eToken Pro / 5110 (Serpro, Safeweb) |
| ACOS / Oberthur (Idemia) | acospkcs11.dll, OcsCryptoki.dll |
libacospkcs11.so |
Smartcards e leitores de cartão |
| Watchdata / PROXKey | Watchdata ProxKey PKCS11.dll |
libwatchdata.so |
Tokens USB |
| OpenSC (Padrão Aberto) | opensc-pkcs11.dll |
opensc-pkcs11.so |
Leitores genéricos PC/SC e smartcards |
3.2 Configuração Dinâmica do Provedor SunPKCS11
A configuração do provedor é criada dinamicamente em memória (sem gravar arquivos temporários em disco com dados sensíveis):
name = CyberCore-Token
library = C:\Windows\System32\aetpkss1.dll
slotListIndex = 0
4. Monitoramento Dinâmico de Hardware (SmartCardWatcher)
O componente SmartCardWatcher executa um loop em segundo plano baseado na API padrão javax.smartcardio (subsistema PC/SC):
- Detecção de Conexão (Card Inserted):
- Detecta quando um novo smartcard ou token USB é conectado a qualquer leitora do sistema.
- Dispara recarregamento assíncrono do repositório de certificados.
- Notifica a interface gráfica (
UIEventListener) e emite evento de auditoria (AUDITORIA [TOKEN_INSERTED]).
- Detecção de Desconexão (Card Removed):
- Ao detectar a remoção do dispositivo, registra imediatamente o evento de auditoria
AUDITORIA [TOKEN_REMOVED]. - Limpa e zera os buffers de memória de PIN mantidos pelo
PinSessionManager. - Força o encerramento das conexões com o leitor via
SmartCardSessionManagerpara liberar handles travados no sistema operacional.
- Ao detectar a remoção do dispositivo, registra imediatamente o evento de auditoria
- Serialização de Concorrência (
signLock):- Como grande parte dos drivers de smartcard e chips criptográficos físicos não suporta acesso concorrente multi-thread, todas as requisições de assinatura são processadas de forma estritamente sequencial (fila FIFO garantida por
ReentrantLock).
- Como grande parte dos drivers de smartcard e chips criptográficos físicos não suporta acesso concorrente multi-thread, todas as requisições de assinatura são processadas de forma estritamente sequencial (fila FIFO garantida por
5. Extração e Parsing de Identidade ICP-Brasil (OIDs X.509)
O CyberCore Signer implementa o analisador de extensões X.509 conforme os padrões da Infraestrutura de Chaves Públicas Brasileira (ICP-Brasil) estabelecidos pelo ITI (normas DOC-ICP-04).
As informações são extraídas da extensão SubjectAlternativeName (OID 2.5.29.17) e analisadas a partir de seus identificadores de objeto (OIDs):
5.1 OID ICP-Brasil de Pessoa Física (e-CPF) — 2.16.76.1.3.1
Contém uma estrutura ASN.1 com as informações cadastrais do titular:
- Data de Nascimento: 8 caracteres no formato
DDMMAAAA; - CPF do Titular: 11 dígitos numéricos;
- Número do NIS/PIS/PASEP: 11 dígitos numéricos;
- Registro Geral (RG): Número do documento de identidade;
- Órgão Expedidor e UF: Identificação do órgão emissor.
5.2 OID ICP-Brasil de Pessoa Jurídica (e-CNPJ) — 2.16.76.1.3.3
Contém os dados cadastrais da empresa e do seu representante legal:
- CNPJ da Entidade: 14 dígitos numéricos;
- Nome do Responsável: Nome completo do signatário cadastrado na Receita Federal.
5.3 Demais OIDs Mapeados
- OID
2.16.76.1.3.2: Título de Eleitor, zona e seção eleitoral. - OID
2.16.76.1.3.4: Cadastro Específico do INSS (CEI / CAEPF).
Essa extração permite ao agente preencher automaticamente o nome e documento do signatário para o SDK Web e selos visuais em PDF, garantindo conformidade com a legislação e auditoria fiscal.