terça-feira, 11 de dezembro de 2007

Criptografia

Introdução

O envio e o recebimento de informações sigilosas é uma necessidade antiga, que existe há centenas de anos. Com o surgimento da internet e sua facilidade de entregar informações de maneira precisa e extremamente rápida, a criptografia tornou-se uma ferramenta fundamental para permitir que apenas o emissor e o receptor tenham acesso livre à informação trabalhada. Este artigo tem por objetivo dar uma abordagem introdutória à criptografia, mostrando os aspectos e conceitos mais importantes.

O que é Criptografia

O termo Criptografia surgiu da fusão das palavras gregas "Kryptós" e "gráphein", que significam "oculto" e "escrever", respectivamente. Trata-se de um conjunto de conceitos e técnicas que visa codificar uma informação de forma que somente o emissor e o receptor possam acessá-la, evitando que um intruso consiga interpretá-la. Para isso, uma série de técnicas são usadas e muitas outras surgem com o passar do tempo.

Na computação, as técnicas mais conhecidas envolvem o conceito de chaves, as chamadas "chaves criptográficas". Trata-se de um conjunto de bits baseado em um determinado algoritmo capaz de codificar e de decodificar informações. Se o receptor da mensagem usar uma chave incompatível com a chave do emissor, não conseguirá extrair a informação.

Os primeiros métodos criptográficos existentes usavam apenas um algoritmo de codificação. Assim, bastava que o receptor da informação conhecesse esse algoritmo para poder extraí-la. No entanto, se um intruso tiver posse desse algoritmo, também poderá decifrá-la, caso capture os dados criptografados. Há ainda outro problema: imagine que a pessoa A tenha que enviar uma informação criptografada à pessoa B. Esta última terá que conhecer o algoritmo usado. Imagine agora que uma pessoa C também precisa receber uma informação da pessoa A, porém a pessoa C não pode descobrir qual é a informação que a pessoa B recebeu. Se a pessoa C capturar a informação envida à pessoa B, também conseguirá decifrá-la, pois quando a pessoa A enviou sua informação, a pessoa C também teve que conhecer o algoritmo usado. Para a pessoa A evitar esse problema, a única solução é usar um algoritmo diferente para cada receptor.

Com o uso de chaves, um emissor pode usar o mesmo algoritmo (o mesmo método) para vários receptores. Basta que cada um receba uma chave diferente. Além disso, caso um receptor perca ou exponha determinada chave, é possível trocá-la, mantendo-se o mesmo algoritmo.

Você já deve ter ouvido falar de chave de 64 bits, chave de 128 bits e assim por diante. Esses valores expressam o tamanho de uma determinada chave. Quanto mais bits forem utilizados, mais segura será a criptografia. Explica-se: caso um algoritmo use chaves de 8 bits, apenas 256 chaves poderão ser usadas na decodificação, pois 2 elevado a 8 é 256. Isso deixa claro que 8 bits é inseguro, pois até uma pessoa é capaz de gerar as 256 combinações (embora demore), imagine então um computador. Porém, se forem usados 128 ou mais bits para chaves (faça 2 elevado a 128 para ver o que acontece), teremos uma quantidade extremamente grande de combinações, deixando a informação criptografada bem mais segura.

Chaves simétricas e assimétricas

Existem dois tipos de chaves: simétricas e assimétricas. Ambas são vistas a seguir.

Chave simétrica

Esse é um tipo de chave mais simples, onde o emissor e o receptor fazem uso da mesma chave, isto é, uma única chave é usada na codificação e na decodificação da informação. Existem vários algoritmos que usam chaves simétricas, como o DES, o IDEA, e o RC:

DES (Data Encryption Standard): criado pela IBM em 1977, faz uso de chaves de 56 bits. Isso corresponde a 72 quadrilhões de combinações. É um valor absurdamente alto, mas não para um computador potente. Em 1997, ele foi quebrado por técnicas de "força bruta" (tentativa e erro) em um desafio promovido na internet;

IDEA (International Data Encryption Algorithm): criado em 1991 por James Massey e Xuejia Lai, o IDEA é um algoritmo que faz uso de chaves de 128 bits e que tem uma estrutura semelhante ao DES. Sua implementação em software é mais fácil do que a implementação deste último;

RC (Ron's Code ou Rivest Cipher): criado por Ron Rivest na empresa RSA Data Security, esse algoritmo é muito utilizado em e-mails e faz uso de chaves que vão de 8 a 1024 bits. Possui várias versões: RC2, RC4, RC5 e RC6. Essencialmente, cada versão difere da outra por trabalhar com chaves maiores.

Há ainda outros algoritmos conhecidos, como o AES (Advanced Encryption Standard) - que é baseado no DES - , o 3DES, o Twofish e sua variante Blowfish, entre outros.

O uso de chaves simétricas tem algumas desvantagens, fazendo com que sua utilização não seja adequada em situações onde a informação é muito valiosa. Para começar, é necessário usar uma grande quantidade de chaves caso muitas pessoas estejam envolvidas. Ainda, há o fato de que tanto o emissor quanto o receptor precisa conhecer a chave usada. A transmissão dessa chave de um para o outro pode não ser tão segura e cair em "mãos erradas".

Chave assimétrica

Também conhecida como "chave pública", a chave assimétrica trabalha com duas chaves: uma denominada privada e outra denominada pública. Nesse método, uma pessoa deve criar uma chave de codificação e enviá-la a quem for mandar informações a ela. Essa é a chave pública. Uma outra chave deve ser criada para a decodificação. Esta - a chave privada - é secreta.

Entre os algoritmos que usam chaves assimétricas, têm-se o RSA (o mais conhecido) e o Diffie-Hellman:

RSA (Rivest, Shamir and Adleman): criado em 1977 por Ron Rivest, Adi Shamir e Len Adleman nos laboratórios do
MIT (Massachusetts Institute of Technology), é um dos algoritmos de chave assimétrica mais usados. Nesse algoritmo, números primos (número primo é aquele que só pode ser dividido por 1 e por ele mesmo) são utilizados da seguinte forma: dois números primos são multiplicados para se obter um terceiro valor. Porém, descobrir os dois primeiros números a partir do terceiro (ou seja, fazer uma fatoração) é muito trabalhoso. Se dois números primos grandes (realmente grandes) forem usados na multiplicação, será necessário usar muito processamento para descobrí-los, tornando essa tarefa quase sempre inviável. Basicamente, a chave privada no RSA são os números multiplicados e a chave pública é o valor obtido;

ElGamal: criado por Taher ElGamal, esse algoritmo faz uso de um problema matemático conhecido por "logaritmo discreto" para se tornar seguro. Sua utilização é freqüente em assinaturas digitais.
Existem ainda outros algoritmos, como o DSA (Digital Signature Algorithm), o Schnorr (praticamente usado apenas em assinaturas digitais) e Diffie-Hellman.

Assinatura Digital

Um recurso conhecido por Assinatura Digital é muito usado com chaves públicas. Trata-se de um meio que permite provar que um determinado documento eletrônico é de procedência verdadeira. O receptor da informação usará a chave pública fornecida pelo emissor para se certificar da origem. Além disso, a chave fica integrada ao documento de forma que qualquer alteração por terceiros imediatamente a invalide.

É importante frisar que assinatura digital não é o mesmo que assinatura digitalizada. Esta última consiste em uma assinatura feita a mão por um indivíduo que depois é capturada por scanner e incluída em documentos.

No Brasil, uma das empresas que fornecem assinatura digital é a CertSign. Saiba mais sobre assinaturas digitais aqui.

PGP

PGP é a sigla para Pretty Good Privacy. Trata-se de um software livre de criptografia criado por Philip Zimmermman em 1991. A intenção de Zimmermman foi a de ajudar na defesa da liberdade individual nos Estados Unidos e no mundo inteiro, uma vez que ele percebeu que o uso do computador seria algo cada vez mais maior e que o direito à privacidade deveria ser mantido nesse meio. Por ser disponibilizado de forma gratuita, o PGP acabou se tornando uns dos meios de criptografia mais conhecidos, principalmente na troca de e-mails.

No PGP, chaves assimétricas são usadas. Além disso, para reforçar a segurança, o software pode realizar um segundo tipo de criptografia através de um método conhecido como "chave de sessão" que, na verdade, é um tipo de chave simétrica.

Um fato curioso a ser citado é que Zimmermman foi alvo de uma investigação policial que durou quase 3 anos. Isso porque a legislação americana proíbe a exportação de software criptográfico sem expressa autorização do governo. Porém, na investigação, ficou provado que alguém sem identificação e não o próprio Zimmermman é que distribuiu o programa pela internet. O PGP então passou a ser enviado para outros países através de uma brecha na legislação americana: novas versões tiveram seu código-fonte publicado em livros. Estes são exportados de forma legal, pois a lei americana proíbe a exportação do software, mas o código impresso não é considerado programa.

Existem vários softwares baseados no PGP. Para mais informações e downloads (inclusive do código-fonte) visite www.pgp.com.

Finalizando

Criptografia só pode ser considerada como tal se 4 princípios básicos forem seguidos e oferecidos: confidencialidade, autenticação, integridade da informação e não repudiabilidade (o remetente não pode negar o envio da informação). É por isso que a criptografia é um recurso tão importante na transmissão de informações pela internet e, mesmo assim, não é capaz de garantir 100% de segurança, pois sempre existe alguém que consegue criar um jeito de quebrar uma codificação. Por isso é que técnicas existentes são aperfeiçoadas e outras são criadas, como a "Criptografia Quântica". Na criptografia há ainda outros conceitos envolvidos, como a Função Hashing (usada em assinaturas digitais), e aplicações, como a Certificação Digital.

Para quem deseja trabalhar com computação, criptografia é uma área interessante. Obviamente, é necessário ter muita afinidade com cálculos, afinal, como pode ser notado no artigo, matemática é a base para os conceitos que envolvem a criptografia.

Nenhum comentário: