Algoritmos Criptográficos

Os modernos algoritmos de criptográfia podem ser classificados em dois tipos de acordo com a chave que utiliza : os de chave única e os de chave pública e privada.

Chave simétrica
Os algoritmos de chave única, são também conhecidos como algoritmos de chave simétrica e, caracterizam-se por utilizar a mesma chave tanto para a cifragem como para a decifragem dos dados, esse método funciona  em aplicações limitadas, como as militares, onde o emissor e o receptor podem se preparar antecipadamente para trocar a chave.

Infelizmente, genericamente esse método não funciona muito bem, pois trocar chaves secretas com todas as pessoas a quem você queira enviar uma mensagem é praticamente impossível. Para ilustrar isso, considere o que você teria de fazer se tivesse de enviar um memorando confidencial para acionistas de uma empresa. Primeiro, você teria de entra em contato com cada acionista individualmente para que pudesse fazer a troca das chaves secretas. Isso poderia ser feito ao telefone, mas se as mensagens fossem extremamente confidenciais, talvez fosse melhor você trocar chaves pessoalmente. Lembre-se de que você precisaria fazer isso para todas as pessoas; cada uma teria uma chave secreta separada. Para aumentar a complexidade desse sistema, você também deverá se lembrar de qual chave serve para cada cliente. Se você as misturar, os clientes não serão capazes de ler as suas mensagens. Obviamente, esse tipo de sistema não é viável para transações comerciais comuns.

Chave assimétrica
Os algoritmos de chave pública e privada, também chamados de algoritmos de chave assimétrica, utilizam duas chaves : uma pública que pode ser divulgada e outra secreta conhecida somente por pessoas autorizadas. Em um sistema de chave pública, cada pessoa tem duas chaves: uma chave pública e uma chave privada. As mensagens criptografadas com uma das chaves do par só podem se decriptografadas com a outra chave correspondente; portanto, qualquer mensagem criptografada com a chave privada só pode ser decriptografada com a chave pública e vice-versa. Como o nome sugere, normalmente a chave pública é mantida universalmente disponível. A outra chave, a chave privada, é mantida em segredo.

Vamos ver com a juda de um exemplo o funcionamento da chave pública. Se Frank e Andrea quiserem se comunicar secretamente usando a criptografia com chave pública, eles terão de fazer o seguinte :
 

  1. Frank escreve uma mensagem e a criptografa utilizando a chave pública de Andrea. A chave está disponível para qualquer pessoa.
  2. Frank envia a mensagem para Andrea através da Internet.
  3. Andrea recebe a mensagem e a decriptografa utilizando sua chave privada.
  4. Andrea lê a mensagem. Se quiser responder, ela deverá fazer o mesmo, a diferença é que dessa vez a chave de Frank será utilizada.
Como apenas Andrea tem acesso à sua própria chave privada (presupondo-se que a segurança do sistema seja eficiente), somente ela poderá ler a mensagem, pois existe confidencialidade. A grande vantagem deste sistema é que não só Frank pode enviar mensagens secretas para Andrea, todo mundo pode. Tudo o que o emissor precisa é da chave pública de Andrea.
Lembre-se que o sigilo da chave privada é importantíssimo. O criptossistema inteiro se baseia no fato de que a chave privada é realmente privada. Se um invasor conseguir roubar a sua chave privada, tudo estará perdido. Não importa qual seja a eficiência do algoritmo de criptografia - o intruso vencerá e poderá ler e criar mensagens utilizando seu nome.
 
ADVERTÊNCIA :
Mantenha sua chave privada secreta. Não a guarde em texto simples no sistema. Se um intruso roubar a sua chave privada, ele poderá assumir a sua identidade, e enviar e receber mensagens como se fosse você.

Assinatura Digital:
Ter duas chaves separadas proporciona outro benefício : a assinatura digital. Imagine usar o sistema de forma invertida. Em vez de Frank criptografar a mensagem com a chave pública de Andrea, ele utiliza sua própria chave privada. Você deve observar que agora todo mundo pode ler a mensagem, ele deixou de ser privada. Isso é verdade, mas também é verdade que apenas Frank poderia ter escrito a mensagem. Pois ele é a unica pessoa capaz de criar mensagens que possam ser lidas com sua chave pública, pressupondo-se que Frank não tenha compartilhado sua chave privada com ninguém mais e que ela seja realmente secreta.

Vejamos um exemplo. Frank quer enviar uma mensagem para todos os seus contatos informando-os que mudou de emprego. Na verdade, ele não se importa com quem lerá a mensagem, mas quer ter certeza de garantir a seus contatos que a mensagem realmente é dele, e não de outra pessoa.

  1. Frank escreve a mensagem e a criptografa utilizando sua chave privada.
  2. Frank envia a mensagem a seus contatos através da Internet.
  3. Os contatos recebem a mensagem e a decriptografam utilizando a chave pública de Frank.
O fato de a chave pública de Frank ter decriptografado a mensagem garante aos contatos que a mensagem realmente é de Frank. Qualquer mensagem decriptografada com a chave pública de Frank só poderia ter sido criada com sua chave privada.

Isso é muito importante. Na criptografia com chave pública, cada par de chaves é único. Só existe apenas uma chave pública para cada chave privada e vice-versa. Se isso não fosse verdade, a assinatura digital não seria possível; um impostor poderia utilizar outra chave privada para criar uma mensagem que pudesse ser lida pela chave pública fornecida.

Podemos observar que a assinatura digital assegura aos contados que a mensagem não foi alterada (integridade) e que vei de Frank (autenticidade). Além disso, Frank é o único com acesso a sua chave privada.

Agora combinando so dois métodos, Frank pode enviar uma mensagem privada e assinada para Andrea, vejamos :

  1. Frank escreve a mensagem e a criptografa utilizando sua chave privada (assinatura da mensagem).
  2. Em seguida, ele criptografa a mensagem com a chave pública de Andrea (tornando-a privada)
  3. Frank envia a mensagem duplamente criptografada para Andrea através da Internet.
  4. Andrea recebe a mensagem.
  5. Ela decriptografa a mensagem duas vezes. Primeiro, ela utiliza sua chave privada e, depois, a chave pública de Frank.
  6. Agora Andrea pode ler a mensagem e tem certeza que ela é secreta e vei de Frank. Ela tem certeza de que a mensagem não foi modificada; para alterá-la, o invasor teria de acessar a chave privada de Frank.
Como Combinar Criptografia com chave pública e criptografia simétrica :
Agora vamos ver a combinação dos dois métodos : A criptografia com chave pública é computacionalmente intensiva; é necessário muito tempo para criptografar uma mensagem com apenas alguns paragráfos. No entanto, nem tudo está perdido, pois os melhores aspectos da criptografia com chave simétrica e da criptografia com chave assimétrica podem ser combinados codificando-se a mensagem com o método da chave simétrica e criptografando-se a chave simétrica com o método de chave pública, vejamos :

Novamente vamos considerar Frank e Andrea. Frank quer enviar uma mensagem à Andrea, mas dessa vez ele utilizará uma combinação de criptografia com chave pública e de criptografia com chave simétrica :

  1. Frank escreve a mensagem e a codifica utilizando a criptografia com chave simétrica com uma chave que ele cria aleatoriamente apenas para essa mensagem. Isso é conhecido como chave de mensagem ou chave de sessão.
  2. Frank criptografa essa chave de sessão com a chave pública de Andrea.
  3. Frank envia a mensagem criptografada e a chave de sessão criptografada a Andrea.
  4. Andrea decriptografa a chave de sessão utilizando sua chave privada.
  5. Em seguida, Andrea decriptografa a mensagem usando a chave de sessão que acabou de receber.
  6. Andrea agora pode ler a mensagem.
Esse método se beneficia da força dos dois tipos de criptossistemas : a velocidade da criptografia simétrica e a facilidade dos mecanismos de distribuição de chave do sistema de criptografia com chave pública.

Tudo bem, esse método resolve o problema de garantir a confidencialidade de uma mensagem, mas como fica a integridade e a não- repudiação ? Poderíamos simplemente criptografar a mensagem utilizando a chave privada do emissor, como fizemos antes. Infelizmente, encontramos os mesmos problemas de desempenho discutidos anteriormente com relação à confidencialidade. Para resolver o problema, precisamos introduzir outra ferramenta útil conhecida como message digest (ou hash).

Message digest é uma função que obtém uma mensagem como entrada e produz um código de tamanho fixo como saída. Por exemplo, se tivéssemos uma função de message digest de 10 bytes, qualquer texto que executássemos através da função produziria 10 bytes de saída, como dar3ksjudr. Lembre-se de que cada mensagem deverá produzir facilmente um message digest aleatório. Ou seja, qualquer par de mensagens que escolhermos deverá produzir um message digest específico.

Existem muitos algoritmos de message digest ou hash, mas para que eles sejam úteis a esse propósito (considerados criptograficamente seguros), o algoritmo deverá exibir determinadas propriedades, como as seguintes :

Vários message digests exibem essas propriedade. Os mais utilizados são o MD4 e o MD5, e o SHA.

Vejamos como os message digest podem ser usados para oferecer não-repudiação e integridade. Frank deseja enviar uma mensagem assinada a seus contatos, só que agora de uma forma mais eficiente :

  1. Frank escreve a mensagem e cria um message digest da mensagem.
  2. Frank criptografa o message digest com sua chave privada (ele assina a mensagem).
  3. Ele envia a mensagem e o message digest criptografados a seus contatos (eniod da assinatura).
  4. Os contatos de Frank calculam um novo message digest da mensagem que acabaram de receber.
  5. Em seguida, eles decriptografam o message digest que Frank enviou. Para isso utilizam a chave pública de Frank.
  6. Por fim, eles comparam o message digest que criaram com o que Frank enviou (verificação da assinatura).
Se os dois message digest forem iguais, isso significa que somente Frank poderá ter enviado a mensagem. Além disso, a mensagem não poderia ter sido modificada, pois nesse caso os contatos teriam calculado um message digest que não corresponderia ao enviado pro Frank.

E finalmante para oferecer confidencialidade, integridade e não repudiação, devemos combinar criptografia com chave pública e message digest, Frank deseja enviar uma mensagem secreta assinada para Andrea :

  1. Frank escreve a mensagem e cria um message digest da mensagem.
  2. Frank criptografa o message digest com sua chave privada (ele assina a mensagem).
  3. Ao mesmo tempo, Frank codifica a mensagem com base na técnica de criptografia com chave simétrica utilizando uma chave de sessão aleatoriamente escolhida.
  4. Frank criptografa a chave de sessão com a chave pública de Andrea.
  5. Agora, ele envia à Andrea a mensagem criptografada, o message digest criptografado e a chave de sessão criptografada.
  6. Andrea recebe todos os três itens. Primeiro, ela decriptografa a chave de sessão usando sua chave privada.
  7. Usando a chave de sessão decriptografada, Andrea decriptografa a própria mensagem.
  8. Em seguida, ela calcula seu próprio message digest da mensagem.
  9. Agora, ela decriptografa o message digest enviado por Frank. Para isso, Andrea utiliza a chave pública de Frank.
  10. E finalmente, ela compara os dois message digest. Se eles forem iguais, isso significa que a mensagem não foi alterada e realmente foi enviada por Frank.
Certificados :
Como acabamos de ver, a criptografia com chave pública pode ser usada para proporcionar confidencialidade, integridade não-repudiação. A assinatura digital exige que o verificador esteja certo de que tem uma chave pública pertencente à pessoa que assinou a mensagem. A confiança do verificador na assinatura deverá ser igual à sua confiança no proprietário da chave pública. Por exemplo, se um violador quiser forjar documentos eletrônicos, uma estratégia seria criar um par de chave pública/chave privada e divulgar a chave pública com o nome de outra pessoa. Quaisquer documento assinado com a chave privada do violador serão verificados com a chave pública correspondente - uma chave pública que tenha sido anunciada como pertencente a outra pessoa.

Existem diversas estratégias para solucionar esse problema. Uma delas é trocar chaves públicas através de um meio diret, como uma reunião. Infelizmente, esse método não funciona bem quando temos muitas pessoas envolvidas. Uma opção melhor seria a utilização de certificados e de autoridades de certificação.

Um certificado é um documento digital contendo informações de identificação e uma chave pública. Em geral, os certificados têm um formato comum, normalmente baseados no padrão ITU-T X.509. Mas ainda não podemos ter certeza de que o certificado é genuíno e não é falso. Uma forma de descobrir isso é utilizar autoridades de certificação ou CAs.

Uma autoridade de certificação assina certificados de chave pública digitalmente. Ao assinar um certificado, a CA garante sua validade. No entanto um problema persiste : como a chave pública da CA é distribuída? Também existem muitas estratégias para esse problema. Em uma delas, se a CA for muito conhecida, como é o caso do serviço postal americano, ele poderá divulgar amplamente sua chave pública. Outro método seria que a CA tivesse seu próprio certificado assinado por outra CA, também conhecida pelo destinatário. Essa idéia de encadeamento de certificação pode avançar ainda mais, com várias CAs organizadas em uma hierarquia onde cada CA subordinada valida sua assinatura com a assinatura de uma CA mais alta na hierarquia. Obviamente, as CAs de nível mais alto deverão reverter para o método de divulgação direta.

Quem oferecerá esses serviços ? . Há muito para se discutir a respeito de quem deverá manter CAs na Internet. Muitas organizações, incluindo instituições financeiras, fornecedores de aplicações e até mesmo o serviço postal americano expressaram interesse em oferecer serviços de certificação. Em 1995, com a ajuda de muitos parceiros, a RSA Data Security criou uma empresa, a VeriSign, inteiramente dedicada ao fornecimento de serviços de certificação para usuários de chaves públicas.

Em um fututo próximo, provavelmente existirão CAs na Internet, cada uma com exigências variáveis para comprovar identidade. Algumas podem exigir que você venha pessoalmente com uma cópia da sua certidão de nascimento, enquanto outras podem assinar certificados com a garantia de sua palavra. A questão aqui é que o fato de um documento ter sido assinado por uma CA não o torna necessariamente válido.

Questões práticas no uso da criptografia :
Vejamos algumas questões de gerenciamento relacionadas ao uso da criptografia:


Referências :


<=

http://www.absoluta.org      ---oOo---      verdade@absoluta.org

Copyright © 1998 - 1999  Verdade @bsoluta