Criptografia
Autor: Nome&gt;&gt;Helder Da Silveira | Publicado: 2009-03-05T16:01:00-08:00

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...