Public Key Cryptography Standard #11 (PKCS#11)

 

Introdução
Ao longo da história da criptografia de chaves públicas, a utilização de padrões sempre foi tida como algo extremamente necessário, porém, a corrida para defini-los, acabou por ter sido responsável pela incrível sopa de letrinhas que existe neste mundo. Em se tratando exclusivamente de certificados do Tipo A3,  o fato é que atualmente existem inúmeros padrões que podemos utilizar quando estivermos pensando na escolha de uma arquitetura para a utilização de certificados digitais que estão armazenados em dispositivos seguros conhecidos como HSM (Hardware Security Module).
Este artigo tem como intuito demonstrar os principais padrões disponíveis no mercado para a comunicação com esses dispositivos, dando enfase no que considero o principal e mais comum deles, PKCS#11. Pretende-se mostrar ainda, como a tecnologia Java fornece de uma maneira elegante uma interface que abstrai toda a comunicação com esses dispositivos através da JCA/JCE e o conceito de providers.
Afinal, o que é um HSM ?
Basicamente esses hardwares são um tipo de criptoprocessador que tem como objetivo o gerenciamento digital de chaves, suas funções incluem dentre outras: encriptação, decriptação, geração de chaves e hashing. Aqui no brasil os HSMs mais populares são os do tipo Token ou SmartCards, bastante utilizados no conceito de E-CPF.
RSA Security
É uma divisão da EMC Corporation, que foi  fundada pelos mesmos criadores do algoritimo RSA: Ron Rivest, Adi Shamir e Len Adleman, a sua norma PKCS, configura uma das mais importantes contribuições para a regulamentação da Public key Infraestructure no mundo inteiro.
Refere-se a um grupo de padrões publicados pela RSA Security, cuja intenção principal é a criação de normas que regem vários aspectos e procedimentos dentro da infraestrutura de chaves. Até a data da criação deste artigo eram ao todo doze padrões.
PKCS#11 ( Cryptographic Token Interface ou Cryptoky  )
Esta relacionado a uma API que define uma interface padrão para “Tokens Criptográficos”, ou seja, cada fabricante de HSM que seguir este padrão, está concordando em fornecer uma API na qual várias linguagens de programação e até mesmo os Sistemas Operacionais podem se comunicar, assim sendo, pode-se concluir que esta API fornece a abstração necessaria para a comunicação comum entre diversos tipos de tokens de diferentes marcas.
Java e PKCS#11
A plataforma Java define um cojunto de APIs para realizar operações criptográficas, estas interfaces estão inseridas dentro da JCA e também da JCE. Pelo fato da JCA/JCE terem sido criadas com o conceito de “provider based”, o acesso aos  tokens criptográficos pode ser feito por meio de um provedor da própria Sun que é encontrado na JDK, chamado de “Sun PKCS#11 provider”.
             E para fazer uso deste provider, basta que sigamos os seguintes passos:

    1. Criação de um arquivo de configuração, no minímo, informando o nome do Token e a DLL, caso windows,  ou arquivo.so, caso linux, para a comunicação do dispositivo.
    2. Adicionar o Provider SunPKCS#11 ao serviço cripgrafico.
    3. O ultimo passo é apenas programar o acesso ao token, do mesmo modo como se acessa uma keystore qualquer…

Comunicando com Aladdin-eToken          

         Para este exemplo prático, vou utilizar o token criptográfico “Alladin-eToken”, da  empresa Safenet , que facilmente encontrado aqui no brasil, pelas diferentes Acs.          

Passo 1:

          Basta abrir o notepad ou um editor de texto qualquer e, criar um arquivo como o da imagem abaixo:

Config.txt




Passo 2

      As linhas de código para adicionar o provider da Sun PKCS11, são as da imagem abaixo:    

Adicionando o provider ao servico criptográfico.
Passo 3
   Agora vem o último passo, que é utilizar de fato os serviços criptográficos do token, o código abaixo obtem uma instancia da KeyStore, definindo o tipo para PKCS11(Linha 38), depois inicia a mesma, passando o PIN informado pelo usuário(Linha 42) e, por último recupera uma Enumeration contendo todos os aliases que existem nesse “repositório de chaves”(Linha 44), feito isso você já consegue obter o certificado e a chave privada para utilizar na assinatura digital de documentos eletrônicos.

Código para obter o certificado e a chave privada do Token.



Conclusão


           Dado o exposto, conclui-se que o acesso aos tokens criptograficos utilizando o provider da Sun, denominado de SunPKCS#11, é de fácil utilização ! Contudo, há de se observar que haverá a necessidade de solicitar do usuário da aplicação o arquivo de comunicação com o Token,  .DLL no windows ou .SO no Linux.
            Em se tratando de amigabilidade do sistema que será construido e a diversidades de possiveis tokens que a sua aplicação irá suportar, faz-se necessário que o usuário seja treinado para saber,quando for solicitado, informar a localização deste arquivo de comunicação.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s