Glossário

PKCS#11

Atualizado em · 4 min de leitura

Definição

PKCS#11 é um padrão técnico que define uma interface de programação, chamada Cryptoki, para que softwares conversem com dispositivos criptográficos, como tokens, smart cards e HSMs. Ele permite assinar documentos e usar chaves privadas sem que essas chaves saiam do dispositivo, sendo comum no uso de certificados digitais A3 para assinatura de notas fiscais.

Também conhecido como: PKCS, Public-Key Cryptography Standard #11, PKCS 11, PKCS #11, Cryptoki

O que é PKCS#11 e para que serve?

PKCS#11 é uma das especificações da família PKCS (Public-Key Cryptography Standards), um conjunto de padrões sobre criptografia de chave pública. Enquanto outros padrões da família tratam de formatos de arquivo ou de mensagens, o PKCS#11 define como um programa deve pedir operações criptográficas a um dispositivo físico ou virtual que guarda chaves.

Na prática, ele funciona como uma língua comum. Um sistema que precisa assinar um XML de nota fiscal não precisa saber os detalhes internos de cada marca de token ou de HSM: basta usar as funções previstas no padrão, como abrir uma sessão, informar o PIN, localizar a chave e pedir a assinatura.

A principal vantagem é a segurança. A chave privada fica protegida dentro do dispositivo e não pode ser copiada. O software envia os dados, o dispositivo assina internamente e devolve apenas o resultado.

Como o PKCS#11 funciona na prática?

Cada fabricante de token, smart card ou HSM fornece uma biblioteca que implementa o padrão, normalmente um arquivo .dll no Windows ou .so no Linux. O sistema emissor carrega essa biblioteca e passa a se comunicar com o dispositivo por meio dela.

O padrão organiza o acesso em alguns conceitos: o slot, que representa o leitor ou a entrada onde o dispositivo está; o token, que é o dispositivo em si; a sessão, que é a conexão aberta com ele; e os objetos, como certificados e chaves armazenados. Para usar a chave privada, geralmente é preciso fazer login com um PIN.

Depois do login, o sistema pede operações como assinar um conteúdo, gerar um par de chaves ou ler o certificado público. Tudo acontece dentro do dispositivo, que também pode bloquear o acesso após várias tentativas de PIN incorretas.

Qual a relação entre PKCS#11 e o certificado digital A3?

No Brasil, o certificado digital do tipo A3 da ICP-Brasil é armazenado em um token USB, em um cartão inteligente ou em um HSM. Como a chave privada não pode ser exportada desses dispositivos, os programas que assinam documentos fiscais precisam de uma forma padronizada de acessá-la, e o PKCS#11 é a interface mais usada para isso.

Por esse motivo, quem emite NF-e, CT-e ou MDF-e com certificado A3 costuma instalar o driver do fabricante do token, que inclui a biblioteca PKCS#11. Sem ela, o sistema emissor não consegue enxergar o certificado nem realizar a assinatura digital do XML.

Qual a diferença entre PKCS#11 e PKCS#12?

Apesar dos nomes parecidos, eles resolvem problemas diferentes. O PKCS#12 é um formato de arquivo, usado nos arquivos .pfx ou .p12, que guarda o certificado e a chave privada juntos, protegidos por senha. É o formato típico do certificado digital A1.

O PKCS#11 não é um arquivo, e sim uma interface de comunicação com dispositivos onde a chave fica presa. Em resumo: com PKCS#12, a chave viaja dentro de um arquivo; com PKCS#11, a chave permanece no hardware e o software apenas pede que ela seja usada.

Como o PKCS#11 aparece na emissão fiscal por API?

Em emissões feitas por API e executadas em servidores ou na nuvem, o certificado A1 em arquivo PFX costuma ser o mais prático, porque não depende de um dispositivo conectado fisicamente a uma máquina. Já um token A3 exige que o hardware esteja disponível no momento da assinatura, o que dificulta a automação em larga escala.

Quando uma empresa precisa de proteção de hardware em ambiente de servidor, a alternativa comum é o HSM, que também é acessado via PKCS#11. Nesse cenário, o backend de integração fiscal monta o XML, envia o conteúdo ao HSM pela interface PKCS#11, recebe a assinatura e segue com a transmissão ao fisco.

Exemplos de PKCS#11

  • Uma distribuidora que emite NF-e com certificado A3 instala o driver do token USB no computador do faturamento; o software emissor carrega a biblioteca PKCS#11 do fabricante para assinar cada nota.
  • Uma equipe de desenvolvimento configura o caminho da biblioteca PKCS#11 nas opções do sistema para que a aplicação encontre o certificado armazenado em um cartão inteligente.
  • Uma empresa de software de gestão guarda as chaves de assinatura em um HSM e usa a interface PKCS#11 para assinar os XMLs de CT-e e MDF-e gerados pelo seu backend.
  • Um analista recebe o erro de que o certificado não foi encontrado e descobre que a biblioteca PKCS#11 instalada era de outro fabricante, incompatível com o token em uso.

Perguntas frequentes

PKCS#11 é um tipo de certificado digital?

Não. PKCS#11 é uma interface de programação que permite a softwares acessarem dispositivos onde certificados e chaves ficam armazenados, como tokens, smart cards e HSMs. O certificado em si é outra coisa.

Preciso de PKCS#11 para usar certificado A1?

Normalmente não. O certificado A1 fica em um arquivo PFX, no formato PKCS#12, e é lido diretamente pelo sistema. O PKCS#11 é necessário quando a chave está em hardware, como no certificado A3 ou em um HSM.

O que é Cryptoki?

Cryptoki é o nome da interface de programação definida pelo padrão PKCS#11. Na prática, os dois termos são usados como equivalentes quando se fala de acesso a tokens e HSMs.

É possível copiar a chave privada usando PKCS#11?

Em dispositivos configurados corretamente, não. A chave é marcada como não exportável e as operações de assinatura acontecem dentro do hardware, que devolve apenas o resultado ao software.

Atualizado em · Como produzimos este glossário