Um Estudo sobre Criptografia e Assinatura Digital
Fernando Antonio Mota Trinta; Rodrigo Cavalcanti de Macêdo
E-mails = {trinta; rcdm}@di.ufpe.br
Departamento de Informática
Universidade Federal de Pernambuco
Setembro, 1998

RESUMO

Este documento mostra uma visão geral sobre a criptografia, método para segurança de informações confidenciais durante troca de mensagens. O documento mostra os tipos existentes, seus princípios básicos de funcionamento, seus pontos fortes e fracos. Além disso, também é abordado outro tema relacionado com a segurança do tráfego de informação, a assinatura digital, uma forma de proteção da integridade e autenticação de documentos.

ABSTRACT

This document shows an overview on cryptography, security method to protect confidential information during messages exchanges. This study shows its existing types, basic principles of functioning, strong and weak points. Moreover, the document also approaches another subject related with information traffic security, the digital signature, a protection method for document integrity and authentication.


1. Introdução

Com o crescente uso das redes de computadores por organizações para conduzir seus negócios e a massificação do uso da Internet, surgiu a necessidade de se utilizar melhores mecanismos para prover a segurança das transações de informações confidenciais. A questão segurança é bastante enfatizada, principalmente, quando imagina-se a possibilidade de se ter suas informações expostas a atacantes ou intrusos da Internet, que surgem com meios cada vez mais sofisticados para violar a privacidade e a segurança das comunicações. Devido a estas preocupações, a proteção da informação tem se tornado um dos interesses primários dos administradores de sistemas.

Uma das maneiras de se evitar o acesso indevido a informações confidenciais é através da codificação ou cifragem da informação, conhecida como criptografia, fazendo com que apenas as pessoas às quais estas informações são destinadas, consigam compreendê-las. A criptografia fornece técnicas para codificar e decodificar dados, tais que os mesmos possam ser armazenados, transmitidos e recuperados sem sua alteração ou exposição. Em outras palavras, técnicas de criptografia podem ser usadas como um meio efetivo de proteção de informações suscetíveis a ataques, estejam elas armazenadas em um computador ou sendo transmitidas pela rede. Seu principal objetivo é prover uma comunicação segura, garantindo serviços básicos de autenticação, privacidade e integridade dos dados.

Além da criptografia, aparecem também as assinaturas digitais, mecanismos elaborados para garantir a autenticação e integridade de informações, permitindo assim, que se prove com absoluta certeza quem é o autor de um determinado documento, e se este mesmo não foi alterado ou forjado por terceiros.

 

2. Criptografia e seus conceitos

2.1 Definição

A criptografia representa a transformação de informação inteligível numa forma aparentemente ilegível, a fim de ocultar informação de pessoas não autorizadas, garantindo privacidade.

A palavra criptografia tem origem grega (kriptos = escondido, oculto e grifo = grafia) e define a arte ou ciência de escrever em cifras ou em códigos, utilizando um conjunto de técnicas que torna uma mensagem incompreensível, chamada comumente de texto cifrado, através de um processo chamado cifragem, permitindo que apenas o destinatário desejado consiga decodificar e ler a mensagem com clareza, no processo inverso, a decifragem.

Há duas maneiras básicas de se criptografar mensagens: através de códigos ou através de cifras. A primeira delas procura esconder o conteúdo da mensagem através de códigos predefinidos entre as partes envolvidas na troca de mensagens. Imagine o exemplo onde em uma guerra, um batalhão tem duas opções de ação contra o inimigo: atacar pelo lado direito do inimigo ou não atacar. A decisão depende da avaliação de um general posicionado em um local distante da posição de ataque deste batalhão. É acertado que se for enviado uma mensagem com a palavra "calhau", o exército deverá atacar pela direita; se for enviada uma mensagem com a palavra "araçagy", não deve haver ataque. Com isso, mesmo que a mensagem caia em mãos inimigas, nada terá significado coerente. O problema deste tipo de solução é que com o uso constante dos códigos, eles são facilmente decifrados. Outro problema é que só é possível o envio de mensagens predefinidas. Por exemplo: não há como o general mandar seu exército atacar pela esquerda.

O outro método usado para criptografar mensagens é a cifra, técnica na qual o conteúdo da mensagem é cifrado através da mistura e/ou substituição das letras da mensagem original. A mensagem é decifrada fazendo-se o processo inverso ao ciframento. Os principais tipos de cifras são:

  1. Cifras de Transposição: método pelo qual o conteúdo da mensagem é o mesmo, porém com as letras postas em ordem diferente. Por exemplo, pode-se cifrar a palavra "CARRO" e escrevê-la "ORARC";
  2. Cifras de Substituição: neste tipo de cifra, troca-se cada letra ou grupo de letras da mensagem de acordo com uma tabela de substituição. As cifras de substituições podem ser subdivididas em:
    1. Cifra de substituição simples, monoalfabética ou Cifra de César: é o tipo de cifra na qual cada letra da mensagem é substituída por outra, de acordo com uma tabela baseada geralmente num deslocamento da letra original dentro do alfabeto. Ela é também chamada Cifra de César devido ao seu uso pelo imperador romano quando do envio de mensagens secretas. César quando queria enviar mensagens secretas a determinadas pessoas, substituía cada letra "A" de sua mensagem original pela letra "D", o "B" pelo "E", etc., ou seja, cada letra pela que estava três posições a frente no alfabeto.
    2. Cifra de substituição polialfabética: consiste em utilizar várias cifras de substituição simples, em que as letras da mensagem são rodadas seguidamente, porém com valores diferentes.
    3. Cifra de substituição de polígramos: utiliza um grupo de caracteres ao invés de um único caractere individual para a substituição da mensagem. Por exemplo, "ABA" pode corresponder a "MÃE" e "ABB" corresponder a "JKI".
    4. Cifra de substituição por deslocamento: ao contrário da cifra de César, não usa um valor fixo para a substituição de todas as letras. Cada letra tem um valor associado para a rotação através de um critério. Por exemplo, cifrar a palavra "CARRO" utilizando o critério de rotação "023", seria substituir "C" pela letra que está 0(zero) posições a frente no alfabeto, o "A" pela letra que está 2 (duas) posições a frente, e assim por diante, repetindo-se o critério se necessário.
A principal vantagem das cifras em relação aos códigos é a não limitação das possíveis mensagens a serem enviadas, além de ser tornarem mais difíceis de serem decifradas.

As cifras são implementadas através de algoritmos associados a chaves, longas seqüências de números e/ou letras que determinarão o formato do texto cifrado.

2.2 Chaves

O conceito de chave apresentado é um tanto abstrato, mas se pensarmos no criptosistema como um conjunto de algoritmos, as chaves são elementos fundamentais que interagem com os algoritmos para a cifragem/decifragem das mensagens. A figura 1 ilustra bem esta relação.

Figura 1 – Cifragem e decifragem de uma mensagem.

Para entender melhor o conceito de chave, considere o exemplo de cifras de substituição por deslocamento descrito anteriormente. Nele, o critério utilizado para a cifragem das mensagens não é nada mais que a chave usada pelo algoritmo. No caso também da cifra de substituição simples, poderia-se dizer que o algoritmo de cifragem seria algo do tipo "deslocamento de n letras à frente", onde n seria a chave.

Do ponto de vista do usuário, as chaves de criptografia são similares as senhas de acesso a bancos e a sistema de acesso a computadores. Usando a senha correta, o usuário tem acesso aos serviços, em caso contrário, o acesso é negado. No caso da criptografia, o uso de chaves relaciona-se com o acesso ou não à informação cifrada. O usuário deve usar a chave correta para poder decifrar as mensagens.

Tomando-se ainda a comparação aos sistemas de acesso a computadores, senhas dos serviços descritos acima podem possuir diferentes tamanhos, sendo que quanto maior for a senha de um usuário, mais segurança ela oferece. Assim como estas senhas, as chaves na criptografia também possuem diferentes tamanhos, e também seu grau de segurança está relacionado com sua extensão.

Na criptografia moderna, as chaves são longas seqüências de bits. Visto que um bit pode ter apenas dois valores, 0 ou 1, uma chave de três dígitos oferecerá 23 = 8 possíveis valores para a chave. Sendo assim, quanto maior for o tamanho da chave, maior será o grau de confidencialidade da mensagem.

2.3 Segurança e ataques

A avaliação da segurança de algoritmos está na facilidade ou não com que uma pessoa consegue decifrar mensagens sem o conhecimento da chave de decifragem, ação comumente conhecida por "quebrar o código". As tentativas de se quebrar os códigos de algoritmos são chamadas ataques. A forma mais simples de ataque a algoritmos é o ataque por força bruta, na qual é feita a tentativa de se quebrar o código utilizando-se todas as chaves possíveis, uma após a outra. Esta é a forma mais simples, porém a menos eficiente, às vezes até impossível de ser implementada. No entanto, ataques por força bruta são raramente necessários. Na maioria das vezes, é utilizada uma mistura de matemática e computadores potentes para quebrar códigos, num processo chamado criptoanálise. Os possíveis tipos de ataque usando criptoanálise são:

Todos os sistemas criptográficos possuem níveis diferentes de segurança, dependendo da facilidade ou dificuldade com que os mesmos são quebrados. Só teremos um sistema condicionalmente seguro quando ele for teoricamente inquebrável, ou seja, não importa a quantidade de texto normal ou cifrado a disposição de um criptoanalista, ele nunca terá informação suficiente para se quebrar as cifras ou deduzir as chaves que foram usadas.

A segurança de um criptosistema não deve ser baseada nos algoritmos que cifram as mensagens, mas sim no tamanho das chaves usadas. Um algoritmo para ser avaliado como forte ou fraco, deve amplamente ser testado contra todos os possíveis tipos de ataques descritos para que sua robustez seja assegurada. Um algoritmo é considerado forte quando é praticamente impossível quebrá-lo em um determinado espaço de tempo em que as informações ainda sejam relevantes e possam ser utilizadas por pessoas não autorizadas.

Geralmente, a maneira mais fácil de se determinar se um algoritmo é forte ou fraco é publicando sua descrição, fazendo com que várias pessoas possam discutir sobre a eficiência ou não dos métodos utilizados. Programas que usam algoritmos proprietários não divulgam sua especificação. Geralmente isto acontece porque a simples divulgação do método revelará também seus pontos fracos. Por esta razão, um criptosistema deve ser tão seguro, que mesmo o autor de um algoritmo não seja capaz de decodificar uma mensagem se não possuir a chave.

 

3. Tipos de criptografia em relação ao uso de chaves

Há basicamente dois tipos de criptografia em relação ao uso de chaves. Quando podemos cifrar e decifrar uma mensagem usando a mesma chave tanto para o ciframento quanto para o deciframento, dizemos estar usando um sistema de criptografia por chave simétrica ou chave secreta. Caso estas chaves sejam diferentes, fala-se de um sistema de chaves assimétricas ou chave pública. A seguir, veremos com mais detalhes cada um deles.

3.1 Criptografia por chave secreta

No caso do uso de chave secreta, tanto o emissor quanto o receptor da mensagem cifrada devem compartilhar a mesma chave, que deve ser mantida em segredo por ambos. A figura 2 ilustra o processo de criptografia por chave secreta, mostrando que a mesma chave que atua para a cifragem da mensagem, é utilizada para sua posterior decifragem.

Figura 2 – Processo de criptografia por chave secreta.

Se uma pessoa quer se comunicar com outra com segurança, ela deve passar primeiramente a chave utilizada para cifrar a mensagem. Este processo é chamado distribuição de chaves, e como a chave é o principal elemento de segurança para o algoritmo, ela deve ser transmitida por um meio seguro. Porém, se existe um meio seguro de se enviar a chave, por que não enviar a própria mensagem por este meio? A resposta para esta questão é que meios seguros de comunicação são geralmente caros e mais difíceis de serem obtidos e utilizados, sendo então razoável sua utilização uma única vez, mas não continuamente.

Existe outro problema no processo de distribuição das chaves. Imaginando-se o caso de três pessoas – A, B e C – que queiram se comunicar utilizando chaves secretas. Serão necessárias 3 (três) chaves: uma compartilhada entre A e B, outra entre A e C, e a última entre B e C, como descrito pela figura 3.

Figura 3 – Comunicação usando chaves secretas.

Se mais pessoas forem inclusas neste sistema de comunicação, mais chaves serão necessárias. No caso de mais duas pessoas, mais sete chaves serão necessárias. Em geral, se n pessoas querem se comunicar utilizando chave secreta, serão necessárias  chaves, gerando um grande problema para o gerenciamento de chaves entre grandes grupos de usuários.

Uma das tentativas de solucionar o problema da distribuição das chaves secretas foi a criação de um centro de distribuição de chaves(Key Distribution Center - KDC), que seria responsável pela comunicação entre pessoas aos pares. Para isto, o KDC deve ter consigo todas as chaves secretas dos usuários que utilizam seus serviços. Por exemplo, imagine a situação descrita pela figura 4, onde A quer mandar uma mensagem secreta para B. Para isto, ele manda a mensagem para o KDC usando sua chave secreta. O KDC recebe esta mensagem, decifrando com a chave secreta de A, depois o KDC a cifra novamente usando agora a chave secreta de B, e a envia para o mesmo.

O maior problema em torno do KDC, é que este constitui um componente centralizado, além de ser gerenciado por pessoas que podem, casualmente, serem corrompidas.

Figura 4 – O Centro de Distribuição de Chaves (KDC).

Em relação ao uso das cifras, os algoritmos de chaves secretas utilizam dois tipos de cifra:

    1. Cifras de corrente: quando se cria uma chave aleatória com o mesmo tamanho do texto a ser cifrado, e combina-se a chave com a mensagem a ser enviada.
    2. Cifras de Bloco: aceita um grupo de bits ou bloco de dados, podendo ser utilizados em cadeia. São geralmente usados para grandes quantidades de dados.
3.1.1 Principais algoritmos que utilizam chave secretas: DES – (Data Encription Standard). Baseado num algoritmo desenvolvido pela IBM chamado Lucifer, é o padrão utilizado pelo governo americano para a criptografia de seus dados desde 1978. Em 1981, foi adotado como padrão pela ANSI com o nome de DEA, como tentativa de padronizar procedimentos de cifragem do segmento privado, especialmente instituições financeiras. O DES utiliza cifras de blocos de 64 bits usando uma chave de 56 bits, fazendo uma substituição monoalfabética sobre um alfabeto de 264 símbolos.

Triple-DES – Baseia-se na utilização três vezes seguidas do DES com chaves diferentes.

RC2, RC4 – Algoritmos criados pelo Professor Ronald Rivest, são proprietários da RSA Data Security. Estes algoritmos usam chaves que variam de 1 a 1024 bits de extensão. Com chaves pequenas (menores que 48 bits), são códigos fáceis de serem quebrados, e como são proprietários, não se tem muitas informações sobre sua segurança com chaves extensas. RC2 é uma cifra de bloco, similar ao DES. RC4 é uma cifra de corrente, onde o algoritmo produz uma corrente de pseudo-números que são cifrados através de uma operação lógica XOR com a própria mensagem.

IDEA – Sigla que designa International Data Encryption Algorithm é um algoritmo de cifragem de bloco desenvolvido na Suíça e publicado em 1990. IDEA utiliza uma chave de 128 bits. É um algoritmo que ainda não pode ser conceituado como forte, devido a seu pouco tempo de vida, porém aparenta ser robusto. Sua chave com 128 bits elimina a possibilidade de alguém usar computadores atuais para ataques por força bruta.

Skipjack – Algoritmo secreto desenvolvido pela National Security Agency para uso por civis. É o coração do chip Clipper, desenvolvido pela NSA.

3.2 Criptografia por chave pública

A criptografia por chave pública, também conhecida com criptografia assimétrica, é aquela baseada no uso de pares de chaves para cifrar/decifrar mensagens. As duas chaves são relacionadas através de um processo matemático, usando funções unidirecionais para a codificação da informação. Uma chave, chamada chave pública, é usada para cifrar, enquanto a outra, chamada chave secreta, é usada para decifrar.

Uma mensagem cifrada com uma chave pública só pode ser decifrada pela outra chave secreta com a qual esta relacionada. O processo é ilustrado na figura 5. A chave usada para cifrar recebe o nome de chave pública porque ela deve ser publicada e amplamente divulgada pelo seu possuidor, fazendo com que qualquer pessoa possa lhe enviar mensagens cifradas. Já a chave usada para decifrar as mensagens, deve ser mantida em sigilo. Geralmente, os usuários deste tipo de criptografia publicam suas chaves públicas em suas home pages, assinaturas dos E-mails, etc.

Figura 5 – Processo de criptografia por chave pública.

3.2.1 Principais algoritmos que utilizam chave públicas

Diffie-Hellman - Foi o ponto de partida para a criptografia por chave pública, através do artigo chamado "Multi-User Cryptographic Techniques", de Whitfield Diffie e Martin Hellman. A técnica baseia-se na troca de uma chave de cifragem de tal forma que uma terceira parte não autorizada, não tenha como deduzi-la. Cada participante inicia com sua chave secreta e através da troca de informações é derivada uma outra chave chamada chave de sessão, que será usada para futuras comunicações. O algoritmo baseia-se na exponenciação discreta, pois sua função inversa, os logaritmos discretos, é de alta complexidade.

RSA - Desenvolvido por Ronald Rivest, Adi Shamir e Len Adleman, o algoritmo tomou por base o estudo feito por Diffie e Hellman, porém usando outro fundamento matemático para a criação das chaves públicas. Eles utilizaram o fato de que é fácil de se obter o resultado da multiplicação de dois números primos extensos, mas é muito difícil de se obter os fatores primos de um número muito extenso.

Merkle-Hellman - Baseava-se em um jogo matemático chamado Knapsack (Mochila), onde dada uma coleção de itens, verifica-se as possíveis maneiras de armazená-la dentro de um repositório de tamanho fixo, de forma a não sobrar espaço. Foi usado durante muitos anos, porém com a descoberta de uma falha crucial foi inutilizado para fins práticos.

3.3 Criptografia Simétrica X Criptografia Assimétrica

Analisando os dois métodos, podemos observar que a criptografia por chave pública tem a vantagem sobre a chave privada no sentido de viabilizar a comunicação segura entre pessoas comuns. Com a chave pública também acaba o problema da distribuição de chaves existente na criptografia por chave secreta, pois não há necessidade do compartilhamento de uma mesma chave, nem de um pré-acordo entre as partes interessadas. Com isto o nível de segurança é maior. A principal vantagem da criptografia por chave secreta está na velocidade dos processos de cifragem/decifragem, pois estes tendem a ser mais rápidos que os de chave pública.

4. Autenticação comum e verificação de integridade

Algumas vezes, particularmente, não há a necessidade de se criptografar documentos. Simplesmente, precisa-se provar quem escreveu o documento e manter as informações desse documento sem modificações. Para esses casos particulares, serviços de autenticação e integridade de dados são requeridos e podem ser realizados por dois mecanismos: Código de Autenticação de Mensagem (Message Authentication Code - MAC) e Assinaturas Digitais. A meta de um MAC ou de uma assinatura digital é tornar possível para a informação ser enviada de uma parte a outra, estando o receptor apto a demonstrar que essa informação de fato veio do remetente que alega tê-la enviado e ainda que essa mesma não foi adulterada na transmissão.

Muitas pessoas confundem MACs e assinaturas digitais com checksums. De fato, ambos provêem tentativas de garantir a detecção de modificações da informação transmitida entre remetente e receptor. A diferença entre as duas técnicas se apresenta quanto aos perigos possíveis que existem para modificar as mensagens.

Um checksum típico é um mecanismo que tem como função encontrar erros que são resultados de ruídos ou outras fontes não intencionais. Por outro lado, uma assinatura digital ou MAC é um checksum criptográfico que é designado para detectar ataques iniciados por fontes intencionais ou acidentais.

4.1. Código de Autenticação de Mensagens

Códigos de Autenticação de Mensagem são mecanismos usados com sistemas de criptografia simétrica tal como o Data Encryption Standard (DES), com a finalidade de proteger a informação. Quando executado em cima de uma parte da informação, este modo de criptografia da informação gera um valor (pequeno pedaço de dados) que serve como código para o documento.

Se duas pessoas compartilham uma chave simétrica, é possível para uma delas, o remetente, executar o DES em cima dos dados, obtendo dessa forma, o código de autenticação da mensagem, e enviá-la juntamente com os dados. O receptor tem que estar apto para validar o código dos dados que lhe foram enviados e, ele consegue isto realizando a mesma cifragem em cima dos dados recebidos e deve obter esse mesmo código. Se os dados foram adulterados, o receptor não obterá um valor que se iguala com o MAC enviado.

Obviamente que o atacante também pode modificar o MAC da mesma forma que pode modificar os dados. Porém, sem o conhecimento da chave utilizada para criar o MAC, não é possível para este modificar a informação enviada e depois computar um código que corresponda a mesma.

 

4.2. Assinaturas digitais

Uma assinatura digital é um tipo específico de MAC que resulta de sistemas de criptografia assimétrica, o RSA por exemplo, e é usado para proteger a informação. Para assinar uma mensagem, uma função Message Digest (MD) é usada para processar o documento, produzindo um pequeno pedaço de dados, chamado de hash. Uma MD é uma função matemática que refina toda a informação de um arquivo em um único pedaço de dados de tamanho fixo.

Funções MD são mais parecidas com checksums quanto a não receber uma chave como parte de sua entrada. Na verdade, entra-se com os dados a serem "digeridos" e o algoritmo MD gera um hash de 128 ou 160 bits (dependendo do algoritmo, são exemplos: MD4, MD5 e Snefru). Uma vez computada uma message digest, criptografa-se o hash gerado com uma chave privada. O resultado de todo este procedimento é chamado de assinatura digital da informação. A assinatura digital é uma garantia que o documento é uma cópia verdadeira e correta do original.

O motivo para se usar funções message digest está diretamente ligado ao tamanho do bloco de dados a ser criptografado para se obter a assinatura. De fato, criptografar mensagens longas pode durar muito tempo, enquanto que criptografar hashs, que são blocos de dados pequenos e de tamanho fixo, gerados pela MD torna o processamento mais eficiente.

Contudo, a simples presença de uma assinatura digital no documento não quer dizer nada. Assinaturas digitais, como outras convencionais, podem ser forjadas. A diferença é que a assinatura digital pode ser matematicamente verificada. Dado um documento e sua assinatura digital, pode-se facilmente verificar sua integridade e autenticidade. Primeiro, executa-se a função MD (usando o mesmo algoritmo MD que foi aplicado ao documento na origem), obtendo assim um hash para aquele documento, e posteriormente, decifra-se a assinatura digital com a chave pública do remetente. A assinatura digital decifrada deve produzir o mesmo hash gerado pela função MD executada anteriormente. Se estes valores são iguais é determinado que o documento não foi modificado após a assinatura do mesmo, caso contrário o documento ou a assinatura, ou ambos foram alterados. Infelizmente, a assinatura digital pode dizer apenas que o documento foi modificado, mas não o que foi modificado e o quanto foi modificado. Todo o processo de geração e verificação de assinatura digital pode ser visto na figura 6, utilizando o algoritmo de criptografia de chave pública RSA.

Para ser possível que um documento ou uma assinatura adulterada não seja detectada, o atacante deve ter acesso a chave privada de quem assinou esse documento.

O que faz assinaturas digitais diferentes de MACs é que enquanto estes últimos requerem chaves privadas para verificação, assinaturas digitais são possíveis de serem verificadas usando chaves públicas.

A assinatura digital também é valiosa pois pode-se assinar informações em um sistema de computador e depois provar sua autenticidade sem se preocupar com a segurança do sistema que as armazena.

Figura 6 – Geração e verificação de assinatura digital.
Documento e assinatura digital enviados pela rede.

 

5. Conclusões

Pelo estudo realizado, podemos concluir que o uso da criptografia no mundo atual é praticamente imprescindível. Com o uso da internet, surgiram novas aplicações como o comércio eletrônico e o home-banking. Nestas aplicações, informações confidenciais como cartões de crédito, transações financeiras, etc. são enviadas e processadas em meios não confiáveis. Enquanto meios de comunicações suficientemente seguros para proteger este tipo de informação não surgem, a criptografia aparece como uma boa alternativa para proteção de dados. Com a criptografia e assinatura digital, três características importantes para segurança de informações são alcançadas. São elas:

Bibliografia GARFINKEL, Simson. PGP: Pretty Good Privacy. O’Reilly & Associates. 1995.

KHANNA, Raman. Distributed Computing Implementation and Management Strategies. Prentice Hall, 1993.

Gradient Technologies White Paper – Encryption Security in the Enterprise. URL: http://www.gradient.com/Products/NetCrusader/WhitePaper/wp_pbkey.htm

White paper on the impact of the Public Key technology and Digital Signatures on CAD. URL: http://www.datakey.com/SignaSURE-EDM_white_paper.htm.