Criptografia não é contar bits

Por Lucas C. Ferreira 

Quem nunca ouviu a pergunta: "Quantos bits tem a criptografia do seu browser?" Pois é, ainda mais agora que temos disponíveis os browsers "com 128 bits". Mas o que quer dizer este número? Será que é muito? Ou pouco? Vou tentar responder neste artigo a estas e outras perguntas com relação ao uso de criptografia.

Em primeiro lugar, vamos ver o que é criptografia. Uma cifra, ou algoritmo criptográfico, é um mecanismo que pode ser usado para "embaralhar" uma informação de maneira a torná-la secreta. A idéia é que apenas pessoas autorizadas tenham acesso a esta informação, pois apenas estas pessoas autorizadas são capazes de reverter o "embaralhamento" usado. Um bom exemplo é o método criptográfico usado pelo imperador romano Julio César para enviar mensagens a suas tropas durante as batalhas. César substituía cada letra da mensagem pela letra que fica três posições a frente no alfabeto. Por exemplo, A era substituído por D, B por E, e assim por diante, com o Z sendo substituído por C. Se a mensagem fosse "ATACAR", o mensagem enviada iria conter "DXDFDU".

A cifra de César, como é conhecido o método usado por Julio César, é uma cifra fixa, ou seja, basta descobrir o segredo uma vez e o inimigo poderia descobrir o conteúdo de todas as mensagens enviadas. Cifras mais modernas foram além e introduziram o conceito de chave. A chave é uma maneira de variar o comportamento da cifra sem precisar alterar o algoritmo. Assim, se alguem descobrir a chave usada, podemos trocá-la e continuar usando o mesmo algoritmo. Além disto, podemos nos precaver contra traidores, usando uma chave diferente para a comunicação com cada uma das divisões do exército. Neste caso, mesmo que um dos generais resolva virar a casaca e contar ao inimigo qual é a chave usada, ainda poderemos nos comunicar de maneira segura com as outras divisões do nosso exército. Nos sistemas modernos, apenas a chave precisa ser secreta.

Temos também de saber que existem dois tipos de criptografia: criptografia de chave pública e criptografia de chave secreta. E qual é a diferença? Simples, na criptografia de chave secreta, o embaralhamento (ciframento) dos dados é feito com a mesma chave usada para decifrar a mensagem, enquanto que na criptografia de chave pública, cada participante tem duas chaves: uma pública e outra privada. Assim, para enviar uma mensagem secreta para Bob, precisamos cifrar usando sua chave pública, que pode estar disponível em algo semelhante a um catálogo telefônico. Quando Bob receber a mensagem, ele usará sua chave privada, que só ele conhece, para decifrar a mensagem. De uma maneira simplificada, quando falamos em criptografia de chave pública, existem duas chaves: uma chave pública, usada para cifrar, e uma chave privada, usada para decifrar a mensagem.

Agora que sabemos o que é criptografia e para que servem as chaves, já podemos responder à seguinte pergunta: "O que é criptografia de 128 bits?" Em geral, quando falamos de criptografia, o número de bits corresponde ao tamanho das chaves usadas, então "criptografia de 128 bits" é, em geral, "criptografia com chaves de 128 bits". Isto começa a fazer sentido? Ótimo, então vamos prosseguir.

Assim como no tempo dos Romanos, quando cada exército usava uma cifra diferente, hoje existem diversos algoritmos criptográficos disponíveis. Alguns são secretos, como os algoritmos usados pelos governos e exércitos em suas comunicações, e outros são divulgados, seja em livros ou na Internet. Dentre os algoritmos conhecidos, temos de escolher um antes de podermos iniciar nossa comunicação com Bob, o agente secreto. Então temos de responder a segunda pergunta: "Qual é o melhor algoritmo criptográfico conhecido?"

Infelizmente, esta pergunta não tem uma resposta fácil. Seria como responder qual o melhor carro que existe. Depende do gosto de cada um e do uso que temos para o carro. Poderíamos escolher uma Mercedes como o melhor carro, e nos arrependermos ao andar numa estrada de terra, ou escolher uma camionete e não conseguirmos estacionar no centro das grande metrópoles. Da mesma forma, temos cifras que são mais adequadas em certas ocasiões que em outras. De qualquer forma é sempre melhor ficar com cifras que tenham sido avaliadas e aprovadas pelos grandes especialistas da área.

Em relação às cifras de chave secreta, podemos escolher entre DES, 3DES, CAST, IDEA, RC4, RC5, e Blowfish1. As cifras de chave pública mais comuns são: Diffie-Hellman (DH), RSA, ElGammal e Curvas Elípticas (ECC). E qual a melhor delas? Depende da aplicação, embora todas sejam consideradas seguras se usadas adequadamente.

E o tamanho das chaves? Bom, alguns algoritmos aceitam apenas chaves de tamanho fixo como o DES, que usa chaves de 56 bits, enquanto outros aceitam chaves de tamanho variável, como o Blowfish. Em geral todos os algoritmos de chave pública podem ser usados com chaves de tamanho variável.

O que significa então um browser com criptografia de 128 bits? Isto quer dizer que o browser é capaz de usar cifras de chave secreta com chaves de 128 bits, e algumas vezes até maiores. Mas isto não quer dizer que o browser nunca use chaves menores que 128 bits. Tudo depende do algoritmo escolhido pelo browser e pelo servidor quando estes iniciam a comunicação. Muitos browsers permitem ao usuário verificar ou até escolher os tamanhos de chaves (e até os algoritmos) que podem ser escolhidos.

E por que 128 bits é seguro? Realmente, chaves secretas de 128 bits são consideradas seguras. Isto porque existem 2128 (dois elevado a 128) chaves diferentes com 128 bits, ou seja, mais de 1038 chaves diferentes. Imagine o tempo necessário para testá-las uma a uma. Então, se escolhermos corretamente uma chave deste tamanho, fica praticamente impossível alguém adivinhar qual foi. Mas e chaves menores? Estima-se que uma é possível testar todas as chaves de 40 bits em algumas horas usado estações de trabalho suficientemente poderosas e as chaves de 56 bits pode ser quebradas em algumas horas por máquinas especiais.

E isso vale para qualquer cifra? Não, apenas para cifras de chave secreta. Nas cifras de chave pública, como existe sempre uma relação entre a chave privada e a chave pública, existem algoritmos melhores que testar as chaves uma a uma para descobrir a chave privada de alguém. Assim, as chaves tem de ser bem maiores para que sejam seguras. Aconselha-se um mínimo de 512 bits para os algoritmos RSA, DH e ElGammal e 140 bits para ECC, embora seja recomendável o uso de chaves maiores (768 e 160 bits) para que o aumento da capacidade dos computadores nos próximos anos não torne estas chaves obsoletas2.

Assim, mesmo que seu browser tenha "criptografia de 128 bits", você tem de verificar o que são estes 128 bits. Verifique primeiro quais os algoritmos que o browser conhece e está configurado para usar. Verifique se estes algoritmos estão na lista das cifras "aprovadas" pelos especialistas. Só então verifique o tamanho das chaves usadas pelas cifras de chave secreta, e certifique-se que existam cifras capazes de usar chaves de 64 bits ou mais (128 bits de preferência). Verifique também se os algoritmos de chave pública usam chaves de pelo menos 512 bits (140 bits no caso de ECC)2. Se tudo estiver correto, aí então você pode ter certeza que seus dados trafegam seguros pela rede. Mas tome cuidado: nada disto adianta de sua senha for o nome do seu cachorro...

Para saber mais

É difícil encontrar boas referências em português sobre criptografia, e por isso indicarei apenas alguns livros em Inglês. O livro mais famoso sobre o tema criptografia é certamente "Applied Cryptography: Protocols, Algorithms and source code in C", escrito por Bruce Schneier, sendo um dos mais completos que temos a respeito de criptografia e aplicações. Outro livro introdutório muito bom é "Cryptography and Network Security: Principles and Practice" de William Stallings. Este livro, embora menos completo que o anterior, tem um enfoque mais didático do assunto. A última referência é o excelente "Handbook of Applied Cryptography" de Alfred Menezes, Paul Van Oorschot e Scot Vanstone, que está disponível na Internet no endereço http://www.cacr.math.uwaterloo.ca/hac. Menezes e seus co-autores dão um tratamento mais matemático do assunto num livro completo e bem organizado, sendo leitura obrigatória a todos que se interessarem em estudar criptografia mais a fundo.

Atualizado em 1/5/2008:

O prof. Routo Terada escreveu o livro "Segurança de Dados: criptografia em redes de Computador". Não li o livro, mas conheço o prof. Terada. Assim ganhamos um livro de criptografia em português por quem realmente entende do assunto.

Fui também revisor da quarta edição do livro do Stallings, que está bem atual e é de fácil leitura.

A wikipedia tem alguns bons artigos sobre criptografia, especialemnte em inglês.

Notas:

1. Em 2002, foi definido o novo padrão criptográfico dos Estados Unidos, o AES. Este é hoje a melhor escolha em termos de algoritmos criptográficos, principamente por que está disponível em praticamente todos os produtos que utilizem criptografia. Além disto, é reconhecido com um algoritmo seguro.

2. Em 2008, os tamanho mais adequados são 1024 bits para RSA, DH e Elgamal e 160 bits para ECC. Para maior segurança, pode-se usar 2048 ou 224, respectivamente. Para cifras de chave secreta, 128 bitas ainda é adequado, embora possas-se usar 256 bits caso haja necessidade de mais proteção.