Java Cryptography Architecture e Java Cryptography Extension

Introdução
   Este Artigo trata exclusivamente de fornecer ao leitor uma visão geral dessas duas APIs, apresentando de forma rápida a sua arquitetura e funcionamento, também serão apresentados pequenos trechos de código demonstrando os principais serviços criptográficos existentes.

JCA / JCE
  
    As funcionalidades básicas relacionadas a criptografia em Java estão disponiveis na Java Cryptography Extension (JCE) e na sua irmã Java Cryptography Extension (JCE),  a diferença entre elas está em questões históricas relacionadas exportação de algoritimos criptográficos, principalmente patentes desses algorítimos, contudo, pode-se dizer que com a  JCA você obtem serviços como: MessageDigest,  Security, KeyFactory, KeyPair, SecureRandom, and Provider classes. Já a JCE  estende a JCA  adicionando serviços, como: Cipher, CipherIn/OutputStream, KeyGenerator, SecretKeyFactory, SealedObject, KeyAgreement and Mac classes.

Arquitetura baseada em provedor de serviços criptográficos
   As classes e interfaces que compoem a JCA/JCE foram criadas com intuito de serem extremamente extensiveis, em outras palavras, forma criadas para permitir que sejam adicionadas implementações de diferentes fornecedores, daí o porque de se dizer que a arquitetura JCA/JCE é “provider-based”.
   Olhando a figura1, logo abaixo, dá pra perceber que o código da aplicação fica escondido da implementação especifica do provedor, acessando apenas classes e interfaces da JCA/JCE.

Figura 1. Visão geral da arquitetura baseada em provedor.

Principais funcionalidades da JCA/JCE

  • Cipher – cifra.
  • CipherInputStream/CipherOutputStream/SealedObject – Abstrações de alto nível sobre objectos de cifra.
  • SecureRandom – gerador de números aleatórios seguro.
  • KeyGenerator/KeyPairGenerator – geradores de chaves.
  • KeyFactory – conversão de formatos para chaves.
  • KeyAgreement – acordo de chaves.
  • AlgorithmParameterGenerator – gerador de parâmetros (a serem passados a outros objectos, como cifras…).
  • MessageDigest/MAC — funções de hash criptográficas, MACs.
  • Signature — assinaturas digitais.
  • X509Certificate — certificados X509.


Providers Existentes


      Segue uma lista de alguns providers disponíveis :

Instalando um provider

      A instalação de um provider pode ser feita de duas formas, estaticamente ou dinamicamente, para esse exemplo estou utilizando o Bouncy Castle provider, vejamos então essas duas formas:


Instalação dinamica

  • Realize o import
     import org.bouncycastle.jce.provider.BouncyCastleProvider; 
  • Adicione a seguinte linha de código no seu programa, antes de usar qualquer função criptográfica.
     Security.addProvider(new BouncyCastleProvider()); 
 

Instalação estática

  • Para instalar estaticamente você precisará adicionar uma entrada ao arquivo  java.security   qual está localizado em $JAVA_HOME/jre/lib/security/java.security.
  • Procure or uma lista de linhas parecidas com security.provider.X, onde X é algum número ao final da ultima linha adicione:

       security.provider.N=org.bouncycastle.jce.provider.BouncyCastleProvider, onde N é o ultimo número da lista.
 

Exemplo de código

      No exemplo abaixo, estou o utilizando o algorítimo DES ( Chave Simétrica ) para encriptar e decriptar a frase: “Tomar café faz muito bem a saúde”.


package com.blogsport.thecodingoflife.bc.padding;

import java.security.*;
import javax.crypto.*;

public class PrivateExample {
  
   public static void main (String[] args) throws Exception {
       //
       // Check args and get plaintext
       byte[] plainText = “Tomar café faz muito bem a saúde“.getBytes(“UTF8”);
       //
       // Get a DES private key
       System.out.println( “\nStart generating DES key” );
       KeyGenerator keyGen = KeyGenerator.getInstance(“DES”);
      
       // If you do not initialize the KeyGenerator, each provider supply a default initialization.
       keyGen.init(56);
       Key key = keyGen.generateKey();
       System.out.println( “Finish generating DES key” );
       //
       // Creates the DES Cipher object (specifying the algorithm, mode, and padding).
       Cipher cipher = Cipher.getInstance(“DES/ECB/PKCS5Padding”);
       // Print the provider information      
       System.out.println( “\n” + cipher.getProvider().getInfo() );
       //
       System.out.println( “\nStart encryption” );
       // Initializes the Cipher object.
       cipher.init(Cipher.ENCRYPT_MODE, key);
       // Encrypt the plaintext using the public key
       byte[] cipherText = cipher.doFinal(plainText);
       System.out.println( “Finish encryption: ” );
       System.out.println( new String(cipherText, “UTF8”) );
       //
       System.out.println( “\nStart decryption” );
       // Initializes the Cipher object.
       cipher.init(Cipher.DECRYPT_MODE, key);
       // Decrypt the ciphertext using the same key
       byte[] newPlainText = cipher.doFinal(cipherText);
       System.out.println( “Finish decryption: ” );
       System.out.println( new String(newPlainText, “UTF8”) );
   }
}

Saída



Start generating DES key
Finish generating DES key

SunJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC)

Start encryption
Finish encryption:
??_6f??<@
?shO? n?^5?”??? ??#* ?Ht?? )

Start decryption
Finish decryption:
Tomar café faz muito bem a saúde

Conclusao

    Em vista dos argumentos apresentados, pode-se dizer que a plataforma Java fornece os subsidios necessários para se trabalhar com criptografia. Através das APIs JCA e JCE e a escolha de um bom provedor de serviços criptográficos o desenvolvedor consegue alcançar uma gama enorme de opções na hora de implementar uma solução que envolva criptografia.

Referencias

Instituto Nacional de Tecnologia da Informação – ITI

    É uma autarquia federal vinculada à Casa Civil da Presidência da República, cujo objetivo é manter a Infra-Estrutura de Chaves Públicas Brasileira – ICP-Brasil, sendo a primeira autoridade da cadeia de certificação – AC Raiz.
    A Medida Provisória 2.200-2 de 24 de agosto de 2001 deu início à implantação do sistema nacional de certificação digital da ICP-Brasil. Isso significa que o Brasil possui uma infra-estrutura pública, mantida e auditada por um órgão público, no caso, o Instituto Nacional de Tecnologia da Informação, que segue regras de funcionamento estabelecidas pelo Comitê Gestor da ICP-Brasil, cujos membros são nomeados pelo Presidente da República, entre representantes dos poderes da República, bem como, de segmentos da sociedade e da academia, como forma de dar estabilidade, transparência e confiabilidade ao sistema.
     O certificado digital da ICP-Brasil, além de personificar o cidadão na rede mundial de computadores, garante, por força da legislação atual, validade jurídica aos atos praticados com seu uso. A certificação digital é uma ferramenta que permite que aplicações, como comércio eletrônico, assinatura de contratos, operações bancárias, iniciativas de governo eletrônico, entre outras, sejam realizadas. São transações feitas de forma virtual, ou seja, sem a presença física do interessado, mas que demandam identificação inequívoca da pessoa que a está realizando pela Internet.
     Compete ainda ao ITI estimular e articular projetos de pesquisa científica e de desenvolvimento tecnológico voltados à ampliação da cidadania digital. Nesse vetor, o ITI tem como sua principal linha de ação a popularização da certificação digital e a inclusão digital, atuando sobre questões como sistemas criptográficos, software livre, hardware compatíveis com padrões abertos e universais, convergência digital de mídias, entre outras.

Video bem legal….

http://www.youtube.com/watch?v=-hSLnoXKL2Y

Abrcs.

Segurança na Internet e Certificação Digital

Olá pessoal,
    Bem, quando criei esse blog, pensei principalmente em postar tópicos relacionados a tecnologia Java e, é claro, a minha própria experiencia utilizando-a, pois bem, sem fugir do cerne do blog, pretendo realizar uma série de posts falando sobre “Certificação Digital”, mas para que eu possa ser entendido por todos, faz-se necessário abordar um pouco sobre Segurança da Informação, afinal, por que utilizar certificados digitais ?  para responder a essa questão, precisamos entender principamente o contexto que estamos inseridos dentro da segurança da informação no mundo atual.
     É fato que  inumeras pessõas já utilizam a internet para realizar operações financeiras, estas que vão desde um simples pagamento de conta, até compras em diversos sites. Mas será que nos todos estamos seguros quando realizamos estas operaçoes na internet ? afinal de contas, quais os riscos que corremos ao  realizar uma simples compra na internet ?
    Sem entrar em detalhes sobre os inúmeros tipos de ataques de Crackers que existem, vamos pensar o seguinte, no geral podemos classificar as ameaçãs que sofremos em quatro tipos básicos: interrupção, interceptação, modificação e fabricação.

Figura1. Ameaçãs de Segurança
    Como mostra a figura1, a intenção das partes que estão se comunicando é simples, desejam apenas que a informação que esta sendo enviada chegue ao seu destino, esse é o fluxo normal.

 

   Interrupção    
   O objetivo deste ataque é prejudicar a comunicação, ou seja, não se pretende capturar nenhuma informação para uso pessoal nem tirar alguma vatagem financeira com essa ação.
   Interceptação
   
   Este é um dos cenários mais perigosos na transação entre dois pontos, a interceptação da comunicação pode ter como intuito apenas a curiosidade ou ainda para beneficiar-se de alguma informação sigilosa.

      

   Modificação
   Neste tipo de ataque, o atacante pode acabar por enviar uma informação irreal ao ponto B, ai que mora o perigo, imagine por exemplo, o ponto B esperando por uma reserva de 200 carros, e ai chega a informação distorcida, por exemplo, 600 carros !
   
   Fabricação
   Este é o cenário onde o atacante se faz passar pelo ponto A e envia uma informação falsa ao ponto B, imagine por exemplo, alguem se passando por você e realizando a compra de uma TV LCD de 50 polegadas no submarino ;-).

    Depois de definirmos estes conceitos básicos, fica mais fácil entender o quão estamos inseguros num ambiente computacional distribuido como é a internet, faz-se necessário então a utilização de mecanismos computacionais que nos auxiliam na identificação( quem é ), autenticação( verificação da credencial ) , garantia de integridade( informação intácta ), não repudio ( impossível negar que é vc ) e por fim, na condidencialidade da informação( ninguem pode ver, apenas os envolvidos ). 
     A identificação e autenticação fazem parte de um processo de dois passos que determina quem pode acessar determinado sistema. Durante a identificação, o usuário diz ao sistema quem ele é (normalmente através de um nome de usuário). Durante a autenticação a identidade é verificada através de uma credencial (uma senha, por exemplo) fornecida pelo usuário.     
       
     Confidencialidade é uma propriedade que limita o acesso a informação tão somente às entidades legítimas, ou seja, àquelas autorizadas pelo proprietário da informação.
     
      Integridade já diz respeito a propriedade que garante que a informação manipulada mantenha todas as características originais estabelecidas pelo proprietário da informação, incluindo controle de mudanças e garantia do seu ciclo de vida (nascimento,manutenção e destruição).    
   
     A certificação digital está atralada ao conceito de  criptografia assimétrica que nada mais é do que um método de criptografia que utiliza um par de chaves: uma chave pública e uma chave privada. A chave pública é distribuída livremente para todos os que desejam se comunicar com o proprietario da informação, enquanto a chave privada deve ser conhecida apenas pelo seu dono.

    Os algoritmos de chave pública podem ser utilizados para autenticidade e confidencialidade. Para confidencialidade, a chave pública é usada para cifrar mensagens, com isso apenas o dono da chave privada pode decifrá-la. Para autenticidade, a chave privada é usada para cifrar mensagens, com isso garante-se que apenas o dono da chave privada poderia ter cifrado a mensagem que foi decifrada com a ‘chave pública’.

Figura 2. Processo de comunicação utilizando par de chaves( Pública e Privada ).

     O certificado digital entra justamente ai, por ser um documento legal, emitido por uma autoridade legal, com fins legais, assim sendo, o certificado digital nada mais é do que um documento eletronico emitido por um terceiro de confiança( Autoridade Certificadora ), que vai associar um proprietário a sua chave pública, ou seja, na figura 2, o Bob poderia ter recebido uma chave pública de outra pessoa se fazendo passar por Alice, mas com a utilização do certificado digital, uma entidade certificadora, AC, garante legalmente que a chave pública que Bob está recebendo, seja realmente de Bob.

    Outro conceito criado com o certificado digital é o de assinatura digital, que nada mais é do que a utilização de duas técnicas: Chave Privada + Remumo Criptográfico, vamos analisar a figura abaixo, que demonstra a utilização dessas técnicas.

Figura 3. Processo de assinatura digital.

 

       Na figura 3, podemos ver o seguinte processo acontecendo:
 
       1. Alice gera o hash do documento e criptografa esse hash com sua chave privada (a esse processo chamamos de assinatura digital) então envia o documento original + documento assinado para Bob.
       2. Bob decriptografa o documento assinado com a chave pública de Alice, obtendo o hash que foi gerado por alice.
       3.Bob então calcula novamente o hash do documento orgial e compara com o hash obtido da decriptografia com a chave pública de alice, dessa forma ele sabe se o documento sofreu alteração no caminho.
       Nessa transação conseguimos:
 
       Autenticação, Autorização      
           -Somente Alice poderia ter cifrado a mensagem com sua chave privada
       Não repúdio
            -Somente Alice conhece sua chave privada
        Integridade dos dados
             -Se Bob comparar as duas versões, elas só irão diferir se tiver ocorrido qualquer modificação não autorizada
         Não conseguimos privacidade
            -Qualquer pessoa pode ler a cópia “autêntica”

       Com essa pequena explicação já dá pra entendermos o porque da existencia de um terceiro de confiança que vai garantir através de um certificado digital que a chave pública de Alice que Bob utliizou é realmente de Alice.

 
       Bem pessoa;, por enquanto é só, espero ter ajudado a esclarecer a dúvida de algumas pessoas com esse Post, pretendo explanar nos proximos o conceito de “chave de sessão” dentro do processso de assinatura digital, bem como, os principais algoritimos computacionais envolvidos para dar garantia a esse processo ( chave simétrica ou de sessão, MD5, RSA).              

Abrcs.
Vamos tomar café certificado digitalmente agora……..;-)

Para Polícia Federal, RIC não tem sentido sem certificado digital

Na próxima semana, o comitê gestor do RIC – a nova identidade dos brasileiros – vai se debruçar sobre a inclusão, ou não, do certificado digital nos cartões que começarão a ser emitidos no fim do ano. Entre a preocupação com o custo e o desconhecimento das utilidades do recurso, o grupo parece inclinado a deixar o certificado de fora.
Mas os defensores do modelo, como o diretor-geral da Polícia Federal, Luiz Fernando Corrêa, acham que ainda dá tempo de convencer o comitê. “Parece que existe pouco entendimento sobre o certificado digital, mas acredito que essa dificuldade será superada. Realmente não faz sentido adotarmos o RIC sem o certificado”, acredita Corrêa.
Para o ministro da Justiça, Luiz Paulo Barreto, o que assusta o comitê é o investimento necessário para a inclusão do certificado digital nos estimados 150 milhões de cartões do novo Registro de Identidade Civil. “Há uma discussão técnica sobre se é interessante incluir o certificado nesse primeiro momento e parece que há um entendimento de que isso encareceria o cartão”, afirma o ministro.
O ministro e o diretor-geral da PF participaram nesta quinta-feira, 9/9, da assinatura do convênio com o Tribunal Superior Eleitoral que vai garantir o uso do cadastro de eleitores como base de dados para o RIC. “Temos o cadastro mais completo do país, com quase 136 milhões de registros”, lembrou o presidente do TSE, Ricardo Lewandowski.
Escala
Na primeira reunião efetivamente deliberativa do comitê gestor do RIC, no fim de agosto, a maioria dos integrantes do grupo se mostrou resistente à inclusão do certificado nos cartões. Um dos motivos teria sido a apresentação feita durante a reunião que sugeriu o custo unitário da certificação digital em aproximadamente R$ 300.
Na verdade, é possível encontrar no mercado certificados digitais por pouco mais de R$ 100, mas quem defende a inclusão do recurso no RIC prefere levar em conta outro fator: a diluição dos custos diante da aquisição de 150 milhões de certificados ao longo dos nove anos previstos para a substituição das carteiras de identidade.

“Temos uma janela de oportunidade para massificar o uso do certificado, por conta da escala. Além disso, o principal custo do certificado não é o cartão, mas a AR [registro], sendo que o RIC já é uma AR, por identificar claramente cada cidadão”, sustenta o diretor do Instituto de Tecnologia da Informação (ITI), Renato Martini.

Fonte:

http://www.iti.gov.br/twiki/bin/view/Midia/MidiaClip2010set1

Criptologia, Criptoanálise e JCrypTool

 
  Durante muitos anos a criptografia (Do Grego kryptós, “escondido”, e gráphein, “escrita”) tem sido um topico bastante discutido, tendo seu uso aplicado a diversos grupos e campos do conhecimento, seja no uso militar ou até mesmo no uso mais simples que é o de simplesmente esconder a mensagem trocada, tornando a disponível apenas entre o emissor e o receptor, a verdade é que ela tem evoluido e muito nos ultimos anos.
  A Criptologia que é a disciplina científica que reúne e estuda os conhecimentos (matemáticos, computacionais, psicológicos, filológicos, etc.) e técnicas necessários à criptoanálise (solução de criptogramas) e à criptografia (escrita codificada) nos permite então entender os principais algoritimos e o funcionamento dessa materia nos mais diversos campos do conhecimento.
  Na computação, por exemplo,  existem inúmeros maneiras de se esconder informação, para se ter uma noção da gama de algoritimos, segue abaixo uma lista dos principais algoritimos e sistemas criptográficos:

Funções de Hash criptográfico, ou message digest’

  • MD5
  • SHA-1
  • RIPEMD-160
  • Tiger

Sistemas Free/Open Source

  • PGP
  • GPG
  • SSH
  • IPSec / Free S/WAN

Algoritmos assimétricos ou de chave pública

  • Curvas elípticas
  • Diffie-Hellman
  • DSA de curvas elípticas
  • El Gamal
  • RSA

Algoritmos simétricos

  • Máquina Enigma (Máquina alemã de rotores utilizada na 2a Guerra Mundial)
  • DES – Data Encryption Standard (FIPS 46-3, 1976)
  • RC4 (um dos algoritmos criados pelo Prof. Ron Rivest)
  • RC5 (também por Prof. Ron Rivest)
  • Blowfish (por Bruce Schneier)
  • IDEA – International Data Encryption Algorithm (J Massey e X Lai)
  • AES (também conhecido como RIJNDAEL) – Advanced Encryption Standard (FIPS 197, 2001)
  • RC6 (Ron Rivest)

   Eis que surge a pergunta, e se eu quiser entender um desses algorítimos  ? ou ainda se eu quiser criar o meu próprio ?
   Bem a resposta para essas perguntas, pelo menos até a um tempo atrás, seria apenas: “Papel ,Caneta e um  bom livro” ;-).
    Calma, calma, lhes apresento uma ferramenta de e-learning, chamada JCrypTool, que foi construida toda em cima da IDE Eclipse, que tem como único proposito, servir de ambiente de estudo para os principais algoritimos criptográifcos e métodos de analise da criptoanálise.
  
Site do Projeto

http://jcryptool.sourceforge.net/JCrypTool/Home.html

E antes que alguem diga que é apenas um projetinho sem valor algum, quero que saibam que este
projeto é contruido com as principais bibliotecas e “Security Provider” disponíveis no mercado como, por exemplo, BouncyCastle and FlexiProvider.

Abrcs.

Começando com Java

   Quando comecei com java há um tempo atrás, me deparei com várias terminologias bem dificeis de entender, coisas do tipo: EJB, DTO, TDO, JSE, JDK, JRE, JAR, SWING, SWT, AWT, Struts e tantas outras. 
   Na data que escrevo este post, vejo que a situação piorou ;-). O que era de se esperar, é lógico, uma vez que a tecnologia por si só é extremamente mutável, bem como as necessidades recorrentes dela, mas nem tudo é ruim não viu, apesar do bebê java ter crescido e se tornado um gigante, hojê vejo que existe bastante documentação disponível, muitas delas de qualidade inquestionável como, por exemplo, a famosa série Core Java ( http://www.horstmann.com/corejava.html ) e ainda o famoso livro “Java Como Programar”( http://www.deitel.com/Books/Java/JavaHowtoProgram7e/tabid/1191/Default.aspx ).
   Este post tem como intuito clarificar dois conceitos importantes para os inciantes em java , que são JDK e JRE.   
  
  A figura acima mostra os dois principais produtos da plataforma Java SE, que são:  o  que é o  JDK(Kit de Desenolvimento) e o JRE( Runtime de Execução ).
   A JDK contem tudo que existe na  JRE mais utilitários para compilação e debug, ela atualmente se encontra na versão 6 e com uma grande quantidade de APIs para as mais diversas necessidades. 
   Uma coisa boa que ainda mantém o Java a frente junto com tantas outras linguagens é justamente o fato dela ter evoluido e ter sido adotada amplamente por grandes empresas.
 
  Aqui um tutorial excelente de como construir seu primeiro programa Java
  
  Abrcs.