Introdução à criptografia
Tão antiga como a escrita, a criptografia vem evoluindo desde a invenção do computador,
transformando-se em ferramenta imprescindível nesses tempos de Internet e correio eletrônico
Como a maioria dos leitores já deve
estar ciente, pacotes com mensagens de correio eletrônico, entre
outros, trafegam abertamente pela Internet - uma rede reconhecidamente
insegura, como mostrado em edições anteriores - até
atingirem seus respectivos destinos. Nesse percurso, um intruso pode facilmente
interceptá-los e ler, ou até alterar seu conteúdo.
Casos ainda piores podem ocorrer quando
senhas, números de cartão de crédito e outras informações
confidenciais são transferidas pela rede. Como garantir que os dados
em pacotes não serão modificados em trânsito? Como
garantir que intrusos não serão capazes de obter as informações
confidenciais que trafegam na rede? Como garantir que o autor de uma mensagem
é quem realmente diz ser? Esses e outros problemas similares, em
redes e canais de comunicação inseguros, podem ser resolvidos
com o uso de criptografia, que será o nosso assunto nesta edição.
Criptografia, grosso modo, é a ciência ou a arte de
cifrar e decifrar informações, mantendo-as em segredo e garantindo
que somente as pessoas autorizadas terão acesso a elas. Com criptografia,
podemos também criar mecanismos de autenticação com
assinaturas digitais e métodos para a verificação
de integridade dos dados, como veremos adiante.
A criptografia é tão antiga
quanto a própria escrita. Existem evidências, por exemplo,
de que os espartanos, na Grécia, já usavam mecanismos primitivos
de codificação, que permitiam que mensagens secretas fossem
trocadas para comunicar seus planos de guerra.
Júlio César, imperador romano,
enviava mensagens aos generais trocando letras do alfabeto a partir da
regra pule três: as letras eram substituídas pela terceira
letra seguinte.
A tecnologia de criptografia não
mudou muito até a Segunda Guerra Mundial. Com a invenção
do computador, a área floresceu rapidamente. Aliás, muitos
acreditam que o computador digital moderno é uma criação da
criptografia, pois algumas das primeiras máquinas digitais foram
construídas pelos aliados para quebrar mensagens militares que tinham
sido cifradas pelos alemães, durante a guerra.
A ciência de quebrar códigos
e decifrar a informação sem conhecer a chave utilizada é
conhecida como criptoanálise. A criptologia é a união
da criptografia com a criptoanálise. Algumas técnicas de
criptoanálise usadas também serão abordadas neste
artigo.
O crescimento da Internet e o advento do
comércio eletrônico têm exigido a criação
de novos protocolos e serviços usando técnicas de criptografia,
para eliminar algumas das vulnerabilidades existentes na suíte de
protocolos TCP/IP.
Este artigo tem por objetivo fazer uma
introdução geral sobre os aspectos básicos de criptografia
sem, no entanto, entrar em maiores detalhes da teoria matemática
envolvida.
Criptografia simétrica ou de chave
secreta
Apesar da evolução do campo
da criptografia, com a utilização do computador, seus princípios
fundamentais permaneceram os mesmos. Em sistemas simétricos ou de
chave secreta, a mesma chave (o segredo, como nos tempos antigos) é
usada para cifrar e decifrar a informação. Esse método
funciona muito bem em aplicações limitadas, como as militares,
em que o emissor e o receptor podem se preparar antecipadamente para trocar
a chave ou quando um usuário paranóico deseja criptografar
dados valiosos em seu computador usando programas como o PGP, que existe
para Linux.
Infelizmente, em geral esse método
não funciona muito bem, pois trocar chaves secretas com todos com
quem deseja se comunicar pode ser inviável em alguns sistemas. Além
disso, essas chaves secretas têm que ser diferentes para garantir
a confidencialidade da comunicação com cada pessoa. Obviamente,
esse não é o sistema ideal para transações
comerciais na Internet. Exemplos de algoritmos nesse sistema: o DES (Data Encryption Standard) e o IDEA
(Internacional Data Encryption Standard).
Criptografia com chave assimétrica
ou chave pública
Uma grande mudança nos conceitos
fundamentais da área ocorreu na década de 70, com a invenção
do sistema assimétrico ou de chave pública. Nesse sistema,
uma chave é usada para cifrar a mensagem e uma outra é usada
para decifrá-la.
Em um sistema de chave pública,
cada pessoa tem duas chaves: uma pública e uma privada. As mensagens
criptografadas com uma chave só podem ser decifradas com a outra
correspondente. Portanto, qualquer mensagem cifrada com a chave privada
somente pode ser decifrada com a chave pública e vice-versa. Como os nomes sugerem, normalmente
a chave pública é livremente distribuída, e a chave
privada é mantida em segredo. Exemplos importantes de algoritmos
desse sistema são o RSA (este nome foi inspirado em seus três
desenvolvedores, RonRivest, Adi Shamir e Leonard Adleman) e o algoritmo
de Diffie e Hellman.
Vamos ver como a criptografia de chave
pública funciona. Se Marcelo e Franklin quiserem se comunicar usando
criptografia assimétrica, eles terão de gerar inicialmente
os seus respectivos pares de chaves. Depois de gerada a chave privada e
a chave pública, Marcelo torna disponível, de alguma maneira,
sua chave pública para Franklin, que por sua vez também fará
o mesmo com a própria chave pública. Quando Franklin quiser
enviar uma mensagem secreta para o Marcelo, ele criptografa a mensagem,
usando a chave pública do Marcelo. Dessa forma, somente o Marcelo
será capaz de ler a mensagem, uma vez que a mensagem somente pode
ser decifrada com a chave privada, que é conhecida só por
ele.
É importante enfatizar, portanto,
que o sigilo da chave privada é fundamental para o sucesso desse
sistema. Em alguns programas, como o PGP (usa RSA), que usam criptografia
assimétrica, essa chave fica armazenada no computador, protegida
por uma senha conhecida somente pelo usuário.
Assinatura digital
Ter duas chaves separadas proporciona outro
benefício: a assinatura digital. Se alguém
envia uma mensagem criptografada com a sua chave privada, obviamente todos
aqueles que conhecem a sua chave pública poderão ler a mensagem
e, logo, concluirão que a mensagem foi criptografada usando a chave
privada do usuário, que é conhecida apenas pelo dono da chave
pública. Dessa forma, todos teriam certeza de que somente o dono
da chave privada poderia ter enviado a mensagem, pois ele é o único
que poderia criar mensagens criptografadas que pudessem ser lidas com sua
chave pública.
Voltando ao exemplo, se o Marcelo quisesse
enviar uma mensagem assinada digitalmente e secreta para o Franklin, ele
combinaria os dois processos: primeiro, usaria a própria chave privada
para criptografar a mensagem (assinaria a mensagem), em seguida usaria
a chave pública do Franklin para cifrar a mensagem assinada. Ao
receber a mensagem, o Franklin primeiramente usaria sua chave privada para
obter a mensagem assinada, como anteriormente. A seguir, ele usaria a chave
pública do Marcelo, para obter a mensagem e verificar que ela realmente
foi enviada pelo Marcelo.
Combinação de algoritmos
criptográficos
Uma grande desvantagem da criptografia
de chave pública é que ela é computacionalmente intensiva.
Portanto, gasta-se muito tempo no processo de cifragem e decifragem e isso
é inaceitável para algumas aplicações. Protocolos
que estabelecem canais seguros de comunicação, como o IPsec
por exemplo, devem fazer esse processo em tempo real na porção
de dados em cada pacote transmitido. A solução para esse
problema é combinar a criptografia simétrica ou de chave
secreta para criptografar a mensagem e a criptografia assimétrica
para criptografar a chave secreta (simétrica), que
foi usada para criptografar a mensagem. O tempo para cifrar a chave simétrica
com criptografia assimétrica é bem menor que o tempo levado
para cifrar toda a mensagem. Por outro lado, algoritmos simétricos
podem cifrar grandes blocos de dados rapidamente.
Message digest ou hash
Muitas vezes, quando estamos carregando
certos programas na Internet, notamos também a existência
de uma assinatura digital para cada um dos programas no site. Com isso,
podemos verificar a integridade desse arquivo, ou seja, que ele não
teve seu código alterado. Isso nos garante, por exemplo, que o programa
não é um cavalo de Tróia. Essa assinatura é o checksum calculado,
usando algoritmos de message digest ou hash para esse programa.
Message digest é uma função
que obtém uma mensagem como entrada e produz um código de
tamanho fixo como saída. Cada mensagem, usada como entrada, deverá
produzir facilmente um message digest específico. Existem muitos
algoritmos de messages digest, mas para que sejam criptograficamente seguros,
eles deverão exibir algumas propriedades:
A função deve ser sem retorno,
ou seja, deve ser difícil ou impossível determinar a mensagem
que produziu uma determinada saída. Isso impedirá que alguém
substitua uma mensagem por outra que tenha o mesmo message digest;
A modificação em um único
bit da mensagem deve gerar um message digest completamente aleatório;
O message digest deve ser exclusivo, de
modo que a existência de duas mensagens com o mesmo message digest
seja muito difícil ou impossível. Existem vários algoritmos
de message digests que exibem essas propriedades. Os mais utilizados são
o MD5 (Message Digest 5) e o SHA (Secure Hash Algorithm).
Criptoanálise
A força de um sistema criptográfico
depende de vários fatores: dificuldade de adivinhar a chave (o uso
de chaves maiores são mais difíceis de adivinhar, mas podem
tornar o processo mais lento), dificuldade de subverter o algoritmo de
cifragem, dificuldade de se quebrar o código mesmo já conhecendo
a mensagem cifrada, entre outros. Sistemas criptográficos são
sujeitos a ataques. Vamos conhecer agora alguns desses ataques:
Ataque de força bruta: bastante
fácil de implementar, é aquele em que o atacante procura
descobrir a senha usada na cifragem de uma mensagem tentando todas as chaves
possíveis. Portanto, quanto maior a chave, mais difícil que esse
ataque seja bem-sucedido;
Ataque de cortar e colar (cut-and-paste):
um atacante pode usar mensagens cifradas com uma mesma chave para combinar
porções e gerar uma nova mensagem;
Ataque do texto claro conhecido (known-plaintext):
o atacante conhece pares de textos claros e cifrados com uma mesma chave.
Esse ataque é particularmente facilitado pela natureza repetitiva
e bem definida dos cabeçalhos dos protocolos de comunicação;
Ataque do texto claro escolhido: o criptoanalista
engana o inimigo, forçando-o a cifrar com a própria chave
secreta alguma mensagem escolhida pelo criptoanalista.
Estenografia
Uma outra forma interessante e desconhecida
de codificar uma mensagem, que está fora do escopo da criptografia,
é usar a estenografia, uma técnica de esconder informação
dentro de informação. Confuso? Um exemplo é codificar
um arquivo texto dentro de uma imagem do formato GIF. Para algum intruso
grampeando o canal de comunicação, a informação
interceptada nada mais seria que uma imagem GIF. Nesse caso, o receptor deve conhecer o uso da técnica
pelo transmissor e utilizar um leitor apropriado para visualizar a mensagem.
Vale ressaltar ainda que um intruso pode
obter a mensagem se conhecer a técnica e souber que ela está
sendo usada. Não há, portanto, nenhuma cifragem de dados
usando técnicas de criptografia.
Criptografia e Linux
O Linux apresenta uma série de ferramentas
que utilizam essas técnicas de criptografia mostradas anteriormente
e que podem ser utilizadas para incrementar a segurança do sistema
ou do canal de comunicação. Alguns exemplos famosos são
o Tripwire (verifica a integridade do sistema de arquivos), o PGP (permite
usar as vantagens da criptografia assimétrica, como assinaturas
digitais, em mensagens de correio eletrônico, entre outras coisas),
CFS e o TCFS (significam, respectivamente, Cryptographic File System e
Transparent Cryptographic File System. Essas ferramentas criptografam todo
sistema de arquivos), SSH (Secure Shell. Permite o uso do shell remotamente,
através de um canal seguro).
Conclusão
Vimos que a criptografia pode prover um
ambiente bastante seguro, mas não deve ser encarada como a solução
em segurança. Ela deve ser adicionada a outras tecnologias, como
firewalls, para prover ambientes computacionais mais seguros. Além
disso, à medida que o poder computacional cresce, alguns algoritmos
e tamanhos de chaves tornam-se vulneráveis a ataques de força
bruta. Um bom exemplo disso é o DES. Há alguns anos, mostrou-se
que com um milhão de dólares seria possível construir
uma máquina capaz de decifrar códigos cifrados com o DES.
Em julho de 1998, um hardware mais barato foi apresentado pela
Eletronic Frontier Foundation, que realizava o mesmo trabalho de quebrar
o DES. Não demorará muito para que uma máquina possa
executar algum software com o mesmo sucesso.
Vale ressaltar que alguns países,
notadamente EUA e Israel, tratam criptografia como assunto de segurança
nacional.