The Signthing

Olá pessoal,

    Durante o ano de 2011 estive envolvido em um projeto bem interessante, que me rendeu muito aprendizado pessoal e profissional e, dica-se de passagem, estava precisando de um choque de conhecimento do nível em que esse projeto me proporcionou :-).
    Bem, durante dezenas e inúmeras pesquisas que fiz sobre PKI, acabei encontrando um projeto open-source muito interessante chamado de “Signthing” e que merecia não somente um Post, mas dezenas deles discorrendo o teor do trabalho.
    Antes de falar sobre o que é projeto,  vou dar uma dica: – Pare um minuto e lembre-se que atualmente a tecnologia de certificados digitais já é uma realidade, a prova é tanta, que vários tribunais do brasil inteiro estão assinando digitalmente seus documentos, economizando e muito o orçamento público. Recomendo a todos que trabalham com TI, que dediquem um tempo a entender esta tecnologia, que na minha modesta opinião é “Genial”.
    O projeto Signthing é uma tentativa de fornecer a toda comunidade “open-source”, um software que suporta certificados digitais x.509 codificados em DER e armazenados em smart-cards e mídias removíveis e que ainda, realiza validações nestes segundo às regras da ICP-Brasil. Mas não é só isso, ele ainda tem uma série de outras funcionalidades como, por exemplo:
  • Efetua verificação on-line da revogação do certificado, contra a Lista de Certificados Revogados emitidas pela Autoridade Certificadora;
  • Suporta assinatura, co-assinatura e verificação criptográfica de documentos já assinados; 
  • suporta envelopes CMS SignedData attached e detached, em conformidade à RFC 2630.
    Mas nem tudo são flores pessoal, a primeira coisa que você percebe ao entrar no site do projeto, é que desde 2009 não houveram mais evoluções, o que de certa forma me causou espanto e tristeza, afinal, só quem já trabalhou com isso sabe o quanto a falta de material e a quase inexistência de fontes pra se basear, fazem com que a caminhada seja árdua.

   De qualquer forma, vale muito a pena baixar e estudar o projeto ! Deixo aqui meus sinceros parabéns aos criadores desta ideia.

Links

Site do projeto

Abrcs.
Natanael Fonseca

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.