Criptografia

Com a grande utilização da Internet no século XXI, problemas de segurança das redes estão se tornando cada vez mais frequentes e, consequentemente, mais empresas na área de proteção a dados nas redes estão aparecendo. Esses problemas podem ser divididos em seis áreas interligadas: confiabilidade, integridade, autenticação, não repúdio, controle de acesso e disponibilidade. Com exceção da segurança existe na camada física do modelo OSI, praticamente toda a segurança se baseia em princípios criptográficos.

A palavra criptografia vem do grego, significando "escrita secreta". Os maiores contribuidores para esta tecnologia foram os militares, com o papel mais importante nessa arte, os diplomatas, aqueles que gostam de guardar memórias e os amantes. As mensagens a serem criptografadas são transformadas por uma função, com um parâmetro, denominado chave, específico de quem está fazendo a encriptação. A saída desse processo, denominada texto cifrado, é transmitida normalmente, só tendo acesso a seu conteúdo original aqueles que obtiverem a chave de decriptação da mensagem. A ideia principal aqui é transmitir uma mensagem, por qualquer meio, que só poderá ser entedinda por aqueles que obtiverem a chave dessa mensagem, ou seja, proteger a mensagem de ser lida por quem não deveria. É como uma porta trancada: todos podem vê-la, mas só poderão atravessá-la (compreender o conteúdo da mensagem) aqueles que tiverem a chave específica que destranca essa porta.

A criptografia simétrica, também conhecida por criptografia de chave privada ou de chave simétrica, é o modelo mais antigo de criptografia. Este modelo consiste na ideia de chave única, isto é, a chave que o remetente usa para encriptar a mensagem será a mesma que o receptor utilizará para decriptá-la, como podemos ver na Figura 1.1.

A grande vantagem desse método consiste em sua simplicidade, uma que vez essa técnica é de fácil uso e é rápida ao executar os processos criptográficos. Em contrapartida, ela também possui algumas desvantagens, sendo a principal o problema de como enviar a chave simétrica para o receptor sem que essa seja descoberta por intrusos ou malfeitores, isto é, como garantir que apenas o indivíduo desejado saiba a chave. De certa forma, com esse problema, volta-se a questão inicial: como enviar uma mensagem de modo que ela só seja lida pelos indivíduos que realmente deveriam ter acesso a ela. Além disso, ao só existir uma única chave, se a mensagem for interceptada por alguém que possua essa chave, ela pode ter seu conteúdo modificado, chegando ao receptor uma mensagem diferente da que foi enviada. Existem métodos, que serão vistos mais adiante nesta página, que são capazes de resolver esses problemas, de modo a tornar a criptografia de chave simétrica menos propensa a esses possíveis distúrbios. Além disso, é importante ressaltar que a criptografia simétrica não garante os princípios de autenticidade, uma vez que não comprova que determinada chave é realmente de quem diz ser, e não-repudiação.

Figura 1.1. Exemplificação do algoritmo de Chave Simétrica.


Existem diversos algoritmos diferentes de criptografia simétrica, sendo alguns dos principais:

♦ DES (Data Encryption Standard): Esse já foi o algoritmo de criptografia simétrica mais disseminado no mundo. Criado em 1977, pela IBM, possui tamanho de chave igual a 56 bits. Ele já foi quebrado, pelo mecanismo de força bruta (basicamente testa-se todas as combinações de chave possível) em 1997, o que fez o NIST (National Institute of Standards and Technology) passar a recomendar o 3DES.

♦ 3DES: É bem similar ao DES. No 3DES é executado três ciframentos sucessivos, podendo utilizar duas (112 bits) ou três (168 bits) chaves diferentes. Apesar de ser mais seguro, a grande desvantagem desse algoritmo é que ele é mais lento do que deveria ser para ser um algoritmo padrão, muito utilizado.

♦ AES (Advanced Encryption Standard): Foi anunciado em 2003 após um concurso realizado para escolher um novo algoritmo de chave simétrica que protegeria as informações do governo americano, que pouco tempo depois o adotou como algoritmo padrão. O AES tem um tamanho de bloco fixo em 128 bits e uma chave que pode ter 128, 192 ou 256 bits. Desde 2006, esse algoritmo é um dos mais populares para criptografia de chave simétrica, uma vez que é rápido (tanto em software quanto em hardware), requer pouca memória, é muito eficiente na área e é fácil de executar.

A criptografia assimétrica, também conhecida por criptografia de chaves assimétricas ou de chave pública, é um modelo criptogŕafico criado na década de 1970 que possui um par de chaves complementares, denominadas chave pública e chave privada. A ideia desse modelo é poder disponibilizar a chave pública para qualquer pessoa, sem as preocupações existentes na criptografia de chave simétrica, e manter a chave privada apenas para o titular dela. Isso é possível uma vez que nessa técnica a chave privada é usada para decodificar uma mensagem que foi criptografada com a chave pública que faz par com ela. Para exemplificar, imagine que João quer enviar uma mensagem encriptada para Maria. O João então pedirá a chave pública da Maria para ela, encriptará a mensagem com essa chave e enviará para a Maria por qualquer meio. Como só a Maria possui a chave que faz par com a chave usada para a encriptação, ou seja, a chave privada da Maria, apenas ela será capaz de descriptar a mensagem e assim, ter acesso a seu conteúdo.

Figura 1.2. Exemplificação do algoritmo de Chaves Assimétricas.


Esse método, apesar de parecer muito bom, também possui suas desvantagens. A principal é a complexidade existente nos algoritmos de criptografia assimétrica, necessitando de grande poder de processamento computacional e tempo, por serem algoritmos mais lentos quando comparados aos algoritmos de criptografia simétrica. Outra questão a ser levantada é a problemática de autenticidade das chaves públicas. Suponha que no exemplo anterior, João achou em um site a chave pública de Maria, ao em vez de pedir diretamente para ela. Ele então encriptou a mensagem com essa chave e disponibilizou a mensagem encriptada, acreditando que apenas Maria teria acesso. Se a chave pública não for realmente de Maria, além dela não conseguir ter acesso a mensagem, outra pessoa qualquer (a que contém aquela chave pública no seu par de chaves, junto a sua chave privada) será capaz de decriptar a mensagem.

A questão da autenticidade de chaves públicas é um problema sério, que será visto mais a frente como resolver, na seção de Distribuição de Chaves Públicas. Há, entretanto, uma maneira de resolver esse problema apenas utilizando a criptografia assimétrica: a partir da ideia de assinatura. A assinatura serve para provar que determinada chave pública é realmente de quem diz ser. Para isso, o dono dessa chave a ser verificada enviará uma mensagem qualquer, encriptada com sua chave privada, a outra pessoa, que contém sua chave pública. Se o receptor conseguir decriptar a mensagem com a chave pública, significa que ela é realmente do emissor da mensagem, uma vez que apenas o emissor possui a chave privada que faz par com essa chave pública. Dessa forma, o receptor consegue ter certeza da autenticidade daquela chave pública, utilizando apenas a criptografia assimétrica, como podemos ver na Figura 1.3.

Figura 1.3. Exemplificação da assinatura digital.


Existem diversos algoritmos existentes de criptografia de chave pública, sendo dois dos principais:

♦ RSA: Algoritmo criptográfico assimétrico criado no MIT, em 1977, por Ron Rivest, Adi Shamir e Len Adleman. É uma das mais poderosas formas de criptografia assimétrica conhecidas até os dias atuais. A ideia do algoritmo é utilizar dois números primos e grandes (com aproximadamente 256 bits cada) e multiplicá-los, uma vez que a partir do resultado, denominado por $ n $, da multiplicação é muito difícil chegar nos dos números primos iniciais. O próximo passo é calcular a função totiente de Euler $ \phi(n) $ do resultado da multiplicação, escolher um número, que denominaremos por $ e $, que seja primo entre si com $ \phi(n) $ e então calcular $ d $, a partir de $ e $ e $ \phi(n) $. Pronto, agora somos capazes de montar as chaves, sendo a chave pública igual a $ (e,n) $ e a chave privada $ (d,n) $. É importante ressaltar que geral a chave pública pode ser facilmente feito, enquanto derivar a chave privada a partir da chave pública é extremamente complicado.

♦ Diffie Hellman: Esse algoritmo é o mais antigo de chave pública que continua sendo usado nos dias atuais. O objetivo dele é estabelecer uma chave secreta entre duas entidades, entretanto, ele não permite nem a encriptação de mensagens nem a assinatura. O algoritmo necessita que as duas entidades escolham dois números, sendo o maior entre eles primo. Então, cada entidade deve escolher um número qualquer, randômico, com cerca de 512 bits, que deve permanecer em segredo, isto é, elas não devem compartilhar esses números entre si. A partir disso, cálculos matemáticos são feitos de modo que cada entidade é capaz de chegar em um resultando. As duas entidades possuem a mesma chave secreta, ou seja, chegam no mesmo resultado por meio desses cálculos, que foi obtida pelo números compartilhados entre elas no início e pelo número secreto que cada uma escolheu. Apesar dos números secretos de cada entidade serem diferentes, o algoritmo conseguiu por meio dos cálculos que o resultado final fosse o mesmo para ambas.

A função resumo, chamada também de Hash Function, é uma função do tipo unívoca, isto é, uma entrada gera exatamente uma saída e a partir do valor da saída é extremamente improvável obter o valor de entrada. Outra característica muito importante dessas funções é que se as entradas forem bem similares, por exemplo, se elas diferem de 1 bit apenas, as saídas, mesmo assim, as saídas serão completamente diferentes, isto é, as saídas são completamente descorrelacionadas.

Por que é quase impossível chegar na entrada (mensagem) a partir da saída (resumo)? Simples. Suponha que o algoritmo que está sendo utilizado gera um hash, a saída, de 128 bits e que a mensagem da entrada possui 1000 bits. Dessa forma, existe, em média, $ 2^{1000-128} $, ou seja, $ 2^{872} $ mensagens possíveis para cada resumo. Isso causa a possibilidade de duas ou mais entradas serem mapeadas no mesmo resumo. Entretanto, devido às saídas completamente descorrelacionadas (função aleatória), é necessário testar muitas entradas para achar um mesmo resumo (técnica de força bruta).

O objetivo da função resumo é garantir a integridade da mensagem original, isto é, garantir que o receptor leia exatamente o que foi escrito, ou, se a mensagem tiver sido alterada no caminho por um interceptador, que o receptor tenha conhecimento disso. Para isso, o emissor enviará além da mensagem o resumo que ela gerou. Assim, o receptor, ao receber a mensagem, irá gerar o resumo dela e comparar com o enviado pelo emissor. Se forem iguais, significa que a mensagem não foi alterada. Como dito acima, apesar de mensagens diferentes poderem gerar o mesmo resumo, a probabilidade é extremamente baixa, garantindo, portanto, que a mensagem não foi alterada. Entretanto, se o resumo que o receptor gerar a partir da mensagem for diferente do enviado pelo emissor, este saberá que a mensagem foi interceptada e modificada.

Como já discutido mais acima, na criptografia assimétrica existe um par de chaves, denominadas chave pública e chave privada, sendo a pública aquela a ser divulgada e que não necessita de sigilo. Além disso, foi discutida a problemática de como autenticar essa chave pública, ou seja, como garantir que determinada chave pública pertence de fato a determinada pessoa.

As técnicas de distribuição de chaves públicas surgiram para facilitar a disseminação das chaves. Nesse artigo, serão detalhadas as quatro principais.

♦ Anúncio Público: É simplesmente enviar a chave pública a qualquer um que pedir ou deixar exposta em um site (acessível a qualquer pessoa), por exemplo. Ou seja, qualquer pessoa pode ter conhecimento da chave pública de alguém que utilize o anúncio público. Essa técnica, entretanto, não garante autenticidade, uma vez que João, por exemplo, pode falar que sua chave pública é qualquer valor, não necessariamente sendo esse valor o verídico.

♦ Diretório Público: Todos aqueles que desejarem compartilhar suas chaves públicas e terem acesso às chaves públicas de outras pessoas se cadastram em um diretório, que pode ser acessado eletronicamente. Cada usuário registra sua chave pública nesse diretório. O problema dessa técnica é que o diretório possui uma chave privada o protegendo, mas caso um intruso tenha acesso a essa, ele consegue falsificar qualquer informação dentro do diretório, ou seja, ele consegue alterar as chaves públicas lá inseridas.

♦ Autoridade de Chave Pública: Nessa técnica existe um órgão de autoridade de chave pública, contendo as chaves públicas daqueles que se cadastraram nele. Quando João quiser a chave pública de Maria, por exemplo, ele irá enviar uma solicitação para este órgão. Junto dessa solicitação, será enviado o tempo (timestamp) o momento em que a solicitação foi realizada. Na resposta, serão enviados para João, que foi o solicitador, a chave pública de Maria, a solicitação que foi feita no início, para garantir que ela não foi alterada e o tempo, mais uma vez, garantindo que essa resposta, essa mensagem, não é antiga.

♦ Certificados de Chave Pública: Nos Certificados de Chave Pública, existe um órgão chamado Autoridade de Certificação, que recebe solicitações de pessoas para gerar um certificado para suas chaves públicas. Dessa forma, uma pessoa qualquer terá um comprovante garantindo que sua chave pública é de fato a que ela diz ser. Além disso, nessa técnica, é possível revogar uma chave pública e colocar outra no lugar. Isso pode acontecer quando a chave privada de alguém vazar, por exemplo, isto é, outras pessoas terem acesso a chave que deveria ser secreta. Dessa forma, essa pessoa terá que inutilizar aquele par de chaves, precisando, portanto trocar sua chave pública também. Assim, ele gerará um novo certificado.