5.2 Criptografia assimétrica
       Em 1976, Diffie e Hellman [DIF 76] mudaram os rumos da criptografia com a criptografia assimétrica, também chamada de criptografia de chave pública, eles propuseram um sistema para cifrar e decifrar uma messagem com duas chaves distintas, sendo a pública (chave pública) que pode ser divulgada e a outra mantida em segredo (chave privada). Funcionando da seguinte forma: se crifrar a mensagem com a chave privada ela somente será decifrada pela chave pública e vice-versa.
    O algoritmo de chave pública não substitui a criptografia simétrica, pois eles são lentos e vulneráveis a alguns ataques. Geralmente a criptografia de chave pública é usada para distribuir com segurança as chaves simétricas (chaves de seção), pois esta será usada para cifrar as mensagens. Tal técnica funciona da seguinte forma, o originador gera uma chave simétrica (chave de seção) e esta mesma é cifrada usando a chave pública do receptor (chave assimétrica) e a envia, só poderá decifrar a pessoa que possuir a chave privada do receptor, que somente ele sabe qual. Recuperando assim a chave simétrica e ela então poderá ser usada para a comunicação.
    Segue abaixo as figuras que representam como transmitir obtendo a confidencialidade e a autenticação.
graphic
Figura 5 - Retirada da apresentação: CRIPTOGRAFIA DE CHAVES PÚBLICAS - Marcelo Augusto Rauh Schmitt – RNP (Rede Nacional de Ensino e Pesquisa)
graphic
Figura 6 - Retirada da apresentação: CRIPTOGRAFIA DE CHAVES PÚBLICAS - Marcelo Augusto Rauh Schmitt – RNP (Rede Nacional de Ensino e Pesquisa)
    Este processo é que chamamos de assinatura digital.
    Em 1977, Rivest, Shamir e Adleman desenvolveram um algoritmo assimétrico denominado RSA, em referência aos sobrenomes dos autores. O algoritmo RSA é a base, atualmente, da maioria  das aplicações que utilizam criptografia assimétrica. O tamanho desta chave varia entre 512 a 2048bits.
5.2.1 Como gerar par de chaves
    As chaves pública/privada é gerada a partir de números aleatórios, que vão ser descartados mais tarde. Essa criptografia só é possivel pois existe um relacionamento matemático entre estas chaves geradas por estes números aleatórios e pelos cálculos para encontrar estas chaves.
    Cabe salientar que a chave pública é geralmente distribuída e a chave privada mantida em segredo e armazenada em um smart-card, token ou em repositório em software.
Tecnicamente, o procedimento para gerar um par de chaves pública/privada é o seguinte:
1.  Escolha dois números primos extensos, p e q;
2.  Calcule n = p x q;
3.  z = (p – 1 ) x ( q –1); 
4.  Escolha um número relativamente primo em relação a “z” e chame-o de “e”; 
5. Encontre “d” de forma que d = e-1  mod z. (“mod” é o resto inteiro da
divisão).
   Portando, a chave pública (KU) consiste em KU = {e, n} e a chave privada (KR)
consiste em KR = {d, n}.
5.2.2 Cifrando com a chave privada.
    Como já foi dito anteriormente as chaves assimétricas públicas/privadas podem ser utilizadas em ambas direções, ou seja, cifrar com a pública e decifrar com a privada e vice-e-versa.
    A figura abaixo mostra um documento cifrado com a chave privada:
graphic
Figura 7 – Retirada do livro “INTRODUÇÃO À CERTIFICAÇÃO
DIGITAL DA CRIPTOGRAFIA AO CARIMBO DE TEMPO”
 
    Vemos acima que, ao cifrar o documento, foi como tivesse criado um lacre com ranhuras como as de uma chave e o documento só será decifrado com a chave de ranhuras opostas. Não há como descobrir uma chave privada a partir da pública (ou vice-versa), ou a partir do próprio texto cifrado, o que nos garante a integridade e a autenticidade.
A função RSA para cifrar, utilizando a chave privada, é a seguinte:
C = Md  (mod n)
Onde:
    C = texto cifrado
    M = texto plano
    “d” e “n” são a chave privada KR = {d,n}.
5.2.3 Decifrando com a chave pública.
    Quando se deseja decifrar um documento cifrado com a chave privada utiliza-se a chave pública. E assim Beto (da figura) consegue verificar a autenticidade e integridade de um documento cifrado com a chave privada de Alice (da figura), mas para isso Beto deve possuir a chave pública de Alice e submeter ao algoritmo criptográfico como ilustra a figura abaixo.
graphic
Figura 8 – Retirada do livro “INTRODUÇÃO À CERTIFICAÇÃO
DIGITAL DA CRIPTOGRAFIA AO CARIMBO DE TEMPO”
A função RSA para decifrar, utilizando a chave pública, é a seguinte:
  M = Ce  (mod n)
Onde:
    M = texto plano
    C = texto cifrado
    “e” e “n” são a chave pública KU = {e,n}.
5.2.4 Cifrar com a chave pública.
    O para cifrar um documento utilizando a chave pública trabalha-se de forma muito parecida com a do processo de cifrar com a chave privada, só que neste caso garante-se o sigilo da informação. Isto porque para poder abrir um envelope cifrado com a chave pública necessita-se da chave privada do destinatário e somente o proprietário do par de chaves é quem a possui.
    Cabe informar que quem cifrar um documento com a chave pública não poderámais decifrá-lo, porque normalmente ele não tem acesso a chave privada.
    Em um sistema de controle de acesso a documentos, onde se exija que um grupo de pessoas tenha acesso à informação, pode-se utilizar  esta técnica para cifrar o documento com a chave pública de mais de um destinatário.
graphic
Figura 9 – Retirada do livro “INTRODUÇÃO ÀCERTIFICAÇÃO
DIGITAL DA CRIPTOGRAFIA AO CARIMBO DE TEMPO”
    A função RSA para cifrar, utilizando a chave pública, é a seguinte:
C = Me (mod n)
Onde:
    C = texto cifrado
    M = texto plano
    “e” e “n” são a chave pública KU = {e,n} do destinatário.
5.2.5 Decifrando com a chave privada
    Para decifrar o documento que foi cifrado com a chave pública e ter acesso ao conteúdo, há a necessidade de usar a chave privada. Então submete a chave privada ao algoritmo criptográfico para decifrar o documento. Como na figura abaixo.
    Neste procedimento garante-se que somente o possuidor da chave privada consiga ler o conteúdo do documento, mas este mesmo não sabe quem foi o remetente.
graphic
Figura 10 – Retirada do livro “INTRODUÇÃO À CERTIFICAÇÃO
DIGITAL DA CRIPTOGRAFIA AO CARIMBO DE TEMPO”
    A função RSA para decifrar, utilizando a chave privada, é a seguinte:
M = Cd  (mod n)
Onde:
    M = texto plano
    C = texto cifrado
    “d” e “n” são a chave privada KR = {d,n}.
Obs: Para garantir a autenticidade e sigilo, há a necessidade de aplicar a criptografia com a chave privada do remetente e depois com a chave pública do destinatário.
    Podemos tirar como algumas conclusões sobre o algoritmo assimétrico, que: o texto cifrado é do mesmo tamanho que o texto plano; utiliza funções exponenciais para cifrar e decifrar, o que a torna lenta; ela possibilita as tarefas de autenticação e sigilo; pode tornar a troca de chaves simétricas segura.
5.2.6 Dos algoritmos
    A Criptoanálise é a ciência que abrange os princípios, métodos e meios para se chegar à decifração de uma mensagem cifrada, sem prévio conhecimento dos códigos ou algoritmos empregados na produção do texto cifrado. 
    Um documento cifrado é dito computacionalmente seguro se atende a estes dois critérios:
•  O custo para quebrar o texto cifrado excede ao valor da informação cifrada;
•  O tempo requerido para quebrar o texto cifrado excede o tempo de vida útil da informação.
    Existem várias técnicas de criptoanálise que podem ser usadas para quebrar sistemas cifrados. Uma delas, o ataque da força bruta (busca exaustiva da chave), consiste na média  do teste de todas as chaves possíveis  de serem usadas. Quanto maior o número de bits  da chave, maior é o esforço para se tentar descobrir a informação cifrada.
5.2.7 Segurança do Algoritmo Assimétrico
    O RSA baseia-se da grande dificuldade dos computadores de fatorarem números grandes, as chaves são geradas matemáticamente através do produto de dois números primos grandes. Mesmo que se tenha esse produto (que faz parte da chave pública divulgada), a segurança ainda é garantida devido a grande dificuldade de se fatorá-lo e obter os primos que são essenciais para o algoritmo.
    Se fosse possível fatorar o valor de n (publicamente conhecido), o criptoanalista poderia então encontrar "p" e "q", e a partir deles chegar a "z". Sabendo "z" e "e", torna possível achar "d" utilizando o algoritmo de Euclides. Felizmente têm-se tentado fatorar números extensos por pelo menos 300 anos, e a conclusão que se chega é que esse problema é extremamente difícil.
    Um algoritmo de busca de chave através da força bruta (busca exaustiva da chave). Suponha-se um computador executando um milhão de instruções por segundo durante um ano inteiro. Assim, tendo uma chave assimétrica de 512 bits necessitaria de 30 mil computadores executando em paralelo um milhão de instrução por segundo para ser quebrada (ou seja, um computador rodando um milhão de instruções por segundo levaria 30 mil anos para efetuar a fatoração necessária); uma chave assimétrica de 768 bits demandaria 200 milhões de desses computadores; uma chave assimétrica de 1.024 bits demandaria 300 bilhões; e finalmente, uma chave de 2.048 bits exigiria 300 quinqüilhões para ser quebrada.
5.2.8 Resumo criptográfico (hash)
    A tradução da palavra hash quer dizer "picar, misturar, confundir". É uma função criptográfica que tem como finalidade computar um resumo de mensagem ao criar uma assinatura digital. Esta função hash, ou também pode ser chamada de resumo criptográfico, é usada em conjunto com a criptografia assimétrica, e é utilizada para garantir a integridade de um documento digital.
    Esta função serve como uma imagem representativa compacta da mensagem, ou melhor um resumo (que às vezes também é chamada de impressão digital ou "message digest"), da cadeia de bits da entrada, e pode ser usada como se fosse unicamente identificável com aquela entrada, essa função de resumo criptográfico tem a função parecida com a do digito verificador do CPF. Pois esse digito tem uma relação matemática com o restante, se qualquer número do CPF mudar, o seu digito verificador também muda. As funções de resumo criptográfico são usadas para garantir a integridade de dados.
Algumas das propriedades desta função são: 
  • Deve ser computacionalmente inviável fazer a operação inversa, ou seja, dado um resumo, deve ser inviável obter uma mensagem original; 
  • Duas mensagens semelhantes devem produzir um resumo completamente diferente; 
  • Deve ser fácil e rápido produzir o resumo.
    Com essas propriedades a função resumo pode ser utilizada para garantir a integridade de uma mensagem. Isso pode ser feito enviando-se uma mensagem e o resumo da mensagem cifrada com a chave privada. O receptor decifra o resumo com a chave pública do remetente, depois calcula um novo resumo com base na mensagem recebida e compara os dois valores. Se forem iguais, a mensagem não foi alterada, garantindo-se dessa forma a sua integridade.