Linux / PHP / Java / Designer

As melhores dicas estão aqui.

Criptografia – Ceriticados de segurança

| 1 Comentário

A criptografia é uma arte: a arte de escrever ocultamente. Talvez tão antiga quanto a própria escrita, hoje é um dos métodos mais eficientes de se transferir informações, sem que haja a possibilidade de comprometimento do sigilo.

Baseada em chaves, uma informação pode ser codificada através de algum algoritmo de criptografia, de modo que, tendo conhecimento do algoritmo utilizado e da chave utilizada, é possível recuperar a informação original fazendo o percurso contrário da encriptação, a decriptação.

Com o aumento da capacidade computacional, podemos hoje utilizar complexos esquemas criptográficos, que antes eram impraticáveis pela demora com os quais eram codificadas pequenas informações. E além da capacidade técnica, possuímos algumas características na criptografia moderna que a faz se subdividir em dois grandes grupos: Criptografia de Chave Simétrica e Criptografia de Chave Assimétrica.

Criptografia de Chave Simétrica

Esta é a criptografia tradicional, onde a mesma chave utilizada na codificação deve ser utilizada da decodificação. Alguns algoritmos de criptografia de chave simétrica: IDEA (International Data Encryption Algorithm), DES (Data Encryption Standard) da IBM e o RC2/4, da RSA Data Security.

O problema óbvio dessa simetria é: como vamos informar ao destinatário a chave para a decriptação de forma segura? Se encontrarmos um modo seguro de lhe contar a chave, não poderíamos utilizar este modo para lhe passar a informação de uma vez? Realmente, este não é o melhor método para trocarmos nossos segredos.

No entanto, a criptografia simétrica é bastante eficiente em conexões seguras na Internet, onde processos computacionais trocam senhas temporárias para algumas transmissões críticas e, ao contrário do que você pode estar imaginando, já utilizou algumas delas: quando você navega pela Internet e visita sites ditos "seguros", onde geralmente são preenchidos dados sigilosos, você está utilizando o SSL (Secure Sockets Layer) que funciona à base de criptografia simétrica, muito provavelmente um DES ou algo da RSA.

Criptografia de Chave Assimétrica

Ah... Aqui a história fica muito mais divertida! Estudos realizados há uns 20 anos tornaram possíveis algoritmos de criptografia utilizando duas chaves. Criptografando-se com a chave A, só seria possível a decriptação com a chave B, sendo a recíproca verdadeira!

Chave Pública e Chave Privada

Esta assimetria nos dá uma outra abordagem, que talvez não se tenha pensado no início do projeto: a de chave pública e chave privada. Com duas chaves, não precisamos ficar presos a uma "troca" para o processo de de/codificação. Cada um poderá possuir sua chave pública e sua chave privada. Como o próprio nome já diz, a chave privada é de conhecimento único e exclusivo seu. Já a pública deve estar disponível a quem quiser lhe enviar informações encriptadas.

Como a encriptação/decriptação depende das duas chaves, se você quiser, por exemplo, nos mandar uma mensagem criptografada, deve encriptá-la com a nossa chave pública. Como dito anteriormente, a única chave que decripta esta mensagem é o par da chave pública, ou seja, nossa chave privada! Presto! Somente nós conseguiremos ler a mensagem (desde que nossa chave privada seja mantida em um lugar seguro).

Continuando nosso exemplo, caso nós queiramos mandar uma mensagem criptografada para você, nós primeiro conseguimos uma cópia da SUA chave pública e a uso na encriptação. Somente sua chave privada poderá decriptar esta mensagem, e mesmo que a mensagem tenha sido interceptada, não passará de um conjunto de caracteres malucos...

PS. Lembre-se que uma mensagem comum, em texto simples, pode ser lida em qualquer canto da Internet, em especial no seu provedor de acesso, ou na sua conta do hotmail ou algo do gênero. Apesar da política na maioria dos serviços proibir a leitura de mensagem dos usuários, ela é praticamente possível! Se você tem assuntos secretos a tratar por e-mail, faça uso da criptografia. (existem sistemas de criptografia por telefone, mas ambos os lados precisam possuir o mesmo sistema, e a criptografia é por chave simétrica)

Assinatura Digital

Uma das maiores sacadas em termo de autenticidade dos últimos tempos! Como vimos no início, a criptografia por chaves assimétricas vale para ambos os lados: Pública » Privada e Privada » Pública. Vamos supor que nós encriptemos uma mensagem com a nossa chave PRIVADA! Qual é a única chave capaz de decriptá-la? Um bombom para quem respondeu "a chave PÚBLICA". O que aparentemente não é muita vantagem, pois todos têm acesso à nossa chave pública e poderão ler a mensagem. Mas...

Aí está! Realmente, todos os que possuírem nossa chave pública poderão ler nossa mensagem, mas também é verdadeiro que, se foi possível decriptar com nossa chave pública, é porque ela foi encriptada com nossa chave privada! Como as únicas pessoas que sabem a nossa chave privada somos nós, está assegurada a nossa identidade como autores daquela mensagem.

Criptografia + Assinatura Digital

Pode-se ainda, com o uso de quatro chaves, criptografar e autenticar a mensagem. Primeiro nós criptografamos nossa mensagem com a NOSSA chave PRIVADA. Depois criptografamos novamente a mensagem, desta vez com a SUA chave PÚBLICA. Ao receber, você deverá usar sua chave privada para decriptar a mensagem e, após, usar a nossa chave pública, para decriptá-la novamente e se assegurar de que fomos realmente nós que lhe escrevemos esta mensagem.

Neste caso, a ordem com que usamos a nossa chave privada e a sua chave pública faz diferença. Veja bem: no exemplo anterior, você não tem como provar que fomos realmente nós que enviamos esta mensagem até que você a decripte com sua chave privada. Se nós tivéssemos invertido a ordem, primeiro encriptando a mensagem com sua chave pública e depois assinando com nossa chave privada, você (e toda a torcida do flamengo) saberia que fomos realmente nós que escrevemos aquela mensagem, apesar de só você conseguir ler o seu conteúdo.

- Simétrica, Assimétrica, Salada Mista!

Há um pequeno problema na criptografia com chave assimétrica: ela é muito lenta! É preciso um "Sr." computador para que o tempo de criptografia se torne viável, pois um texto grande pode levar de alguns minutos a várias horas. Já a simétrica... Ela é rápida, mas possui o problema da chave única.

Então, que tal se fizermos o seguinte: nós criptografamos uma mensagem com uma chave qualquer simétrica. A mensagem é grande, mas a simétrica é rápida. Então nós pegamos essa chave, que é pequena, e criptografamos assimetricamente com a SUA chave pública! Eureka! Só você saberá qual é a chave (decriptando-a com sua chave privada), e poderá decriptar a mensagem com a "nossa" chave simétrica.

Ótimo, mas ainda há um problema. Desta maneira, perdemos a confiança na mensagem, pois não podemos comprovar de que fomos realmente nós que lhe enviamos esta mensagem. Mas há uma outra maneira...

("- ih... lá vêm eles..." - você deve estar pensando. 😉

Um tal de "Message Digest"

Vamos logo avisando que nós não inventamos nada disso! Mas que o desgraçado funciona, não podemos negar... O negócio é o seguinte: existe uma maneira de se criar um código a partir de uma mensagem, que reflita o seu conteúdo em um pequeno conjunto de caracteres. Aplica-se um cálculo na mensagem e este cálculo nos retorna um "message digest", como se fosse uma impressão digital da mensagem. Uma letrinha trocada e o message digest será diferente.

Alguns algoritmos que fazem a "extração" do message digest mais utilizados no mercado: MD4/5 e o SHA (Secure Hash Algorithm).

O cálculo do message digest possui duas características fundamentais: não pode ser possível inverter o cálculo sobre o message digest para recuperar a mensagem original; e o message digest deve ser único por mensagem, ou seja, não pode existir um mesmo message digest para duas mensagens diferentes.

Com essa nova ferramenta, podemos assegurar a autencidade com criptografia assimétrica, mas nos poupando tempo. Vamos supor que nós tenhamos uma mensagem "não-secreta" para lhe enviar: Primeiro calculamos o message digest da nossa mensagem. Encriptamos o message digest com a NOSSA chave PRIVADA, e lhe mandamos a mensagem junto com o message digest encriptado. Ao receber a mensagem, você calcula o message digest da nossa mensagem, e compara com o message digest encriptado (utilizando nossa chave pública para decriptá-lo). Sendo igual, você terá certeza de que fomos nós que escrevemos aquela mensagem.

Mas a mensagem em si foi enviada sem criptografia. Qualquer um poderia ter lido! Então, vamos continuar... (já está acabando, prometemos!)

Tudo ao Mesmo Tempo Agora

Antes de continuarmos, feche os olhos e mentalize: "tranqüilas águas azuis, tranqüilas águas azuis..." Você está calmo... Muito calmo... calmmmm...

Agora vamos lá: Nós queremos enviar para você uma mensagem grande, criptografada e assinada, e pretendemos poupar tempo. Portanto, criptografar a mensagem inteira (duas vezes!) com chaves assimétricas está fora de cogitação. O que faremos? Vejamos...

Primeiro criamos um message digest da nossa mensagem e o encriptamos com a NOSSA chave PRIVADA. Depois, escolhemos uma chave SIMÉTRICA qualquer e encriptamos a mensagem inteira. Então nós encriptamos a chave simétrica com a SUA chave PÚBLICA. Agora enviamos tudo para você: o message digest da nossa mensagem encriptado com nossa chave privada, a mensagem criptografada com a chave simétrica, e a chave simétrica encriptada com a sua chave pública.

Ao receber a mensagem, você deverá fazer o seguinte: decriptar a chave simétrica com a sua chave privada. Com a chave simétrica decriptada, decripte a mensagem. Agora decripte nosso message digest com nossa chave pública e calcule o message digest da mensagem original. Finalmente, compare os dois message digest: o que lhe mandamos e o que você calculou. Se forem iguais, você terá certeza de que fomos nós que enviamos a mensagem e que a mensagem não sofreu nenhuma alteração.

Ufa!

O que? Ainda tem mais

Não, acabou! 😉 Mas vamos deixar uma questão para ser pensada e, quem sabe mais tarde, venhamos a falar no assunto...

É o seguinte: essa história de chave pública é muito bacana, mas precisamos dar um jeito para que as outras pessoas conheçam nossas chaves públicas. E ainda, você não pode pegar uma chave pública de alguém em qualquer lugar! Quem garante que aquela chave é verdadeira? Pode ser uma chave falsa, para que o falsificador possa ler as mensagens criptografadas.

A saída mais sensata neste caso é criar sites onde se guardariam todas as chaves públicas, e onde se teria certeza de que as chaves lá postadas são autênticas. Estes sites emitiriam "certificados" de autenticidade, assinados por eles próprios.

Entretanto, as assinaturas destes sites seriam baseadas no mesmo esquema das chaves públicas e privadas. O site assinaria o certificado de autenticidade com sua chave privada e, caberia a nós, através da chave pública daquele site, julgar a "autenticidade do certificado de autenticidade". Portanto, caímos no mesmo problema: como as chaves públicas dos sites autenticadores seriam distribuídas, de forma que seus pares de chaves não possam ser falsificados?

Pense nisso...

One Comment

  1. Simplesmente fantástico este post!
    Tenho que dar os parabéns de boca aberta com esta explicação, pois foi explicado de maneira suave se fazendo entender cada detalhe!

    PARABÉNS PELA EXPLICAÇÃO, E MUITO OBRIGADO!

Deixe uma resposta

Campos requeridos estão marcados *.