sexta-feira, 29 de fevereiro de 2008

O Livro dos Códigos

Nesses últimos dias eu li um livro chamado O Livro dos Códigos, de Simon Singh. O livro conta a história da criptografia, desde a antiguidade até a criptografia quântica. Mostra como as cifras e a busca pelo sigilo avançaram ao longo do tempo. Na antiguidade, se usava muito a esteganografia, que consiste em esconder a mensagem ao invés de cifrá-la. Uma das primeiras cifras utilizadas que se tem registro é a cifra de César. Ela consiste em você fazer um deslocamento no alfabeto. Por exemplo, se o deslocamento for de 1, PATY seria cifrado como QBUZ. Essa cifra claramente é muita fraca e fácil de quebrar. Esse tipo de cifra é chamada monoalfabética, pelo fato óbvio de usar apenas um alfabeto. Durante muito tempo os criptógrafos (as pessoas que cifram) ganharam a batalha com os criptoanalistas (aqueles que tentam quebrar esses códigos). Foram desenvolvidas cifras monoalfabéticas mais complicadas, mas os árabes inventaram uma técnica para quebrar essas cifras chamada de análise de freqüência. Assim, os criptoanalistas passaram a frente nessa batalha. Os criptógrafos então inventaram uma cifra polialfabética que eles chamavam de “A cifra indecifrável”. Ela foi assim considerada por muito tempo, mas Babbage conseguiu decifrá-la. Durante a segunda guerra mundial, a criptografia exerceu um papel fundamental. Os alemães criaram a maquina de encriptação Enigma, que eles consideravam muito segura. Mas os poloneses e depois os ingleses conseguiram quebrar e decifrar as mensagens do Enigma, afetando muito o curso da guerra. Com o desenvolvimento dos computadores e posteriormente da internet, havia na área uma preocupação enorme com relação à segurança. Como fazer para manter a segurança num ambiente como a internet? Para muitas transações, segurança é fundamental, como transações bancarias e de governo. Foram inventados diversos algoritmos de criptografia muito eficientes, mas que tinham um problema fundamental: a distribuição de chaves. Se Alice deseja se comunicar com Bob, eles precisam combinar uma chave para ser usada no algoritmo de encriptação. Desde a antiguidade, o sigilo era garantido através da chave e não do fato de o oponente conhecer o método usado para cifrar. O inimigo podia conhecer o método, mas contanto que ele não conhecesse a chave, ele não conseguiria decifrar. Esses métodos de cifrar evoluíram bastante ao longo do tempo, mas o problema da distribuição das chaves continuou. Se Alice quer se comunicar com Bob, como eles fazem para combinar a chave usada? Alice poderia mandar a chave pela internet para Bob, mas se o canal não é seguro para se enviar mensagens, tampouco vai ser seguro para enviar a chave. Então Alice e Bob precisariam encontrar outra maneira de trocar a chave. Eles poderiam se encontrar pessoalmente, por exemplo. Porém, isso requer bastante esforço e não é viável para as aplicações comerciais. Imagine uma empresa onde cada par de funcionários precisa ter a sua chave para se comunicar e essa empresa tem 200 funcionários. Casa funcionário deveria saber a chave para se comunicar com os outros 199, tarefa um tanto inviável. E quanto mais cresce o número de funcionários ou pessoas querendo se comunicar, mais complicado fica para fazer essa troca de chaves. Era necessária uma solução urgente para o problema da distribuição de chaves, mas a maioria dos estudiosos da época achava que o problema da distribuição de chaves era insolúvel. Foi aí que surgiram as idéias de dois pesquisadores, Whitfield Diffie e Martin Hellman. Eles criaram o conceito de criptografia de chave pública, que resolvia esse problema da distribuição de chaves. A idéia deles é que cada pessoa tivesse a sua chave privada e sua chave pública. A chave pública é usada para cifrar as mensagens e é de conhecimento público, todo mundo pode ter acesso. Já a chave privada fica em poder do seu dono que a guarda em segredo, sendo usada para decifrar as mensagens cifradas com a respectiva chave pública. Assim, se Alice deseja mandar uma mensagem para Bob, ela cifra a mensagem com a chave pública de Bob e envia a mensagem cifrada para ele. Só quem vai poder decifrá-la é Bob, pois apenas ele sabe a sua chave privada que é necessária para fazer isso. Assim, eles não precisam mais trocar chaves porque o único conhecimento que Alice precisa para mandar uma mensagem para Bob é a sua chave pública, a qual todos têm acesso e não dá meios de se encontrar a chave privada. Diffie e Hellman tiveram essa maravilhosa idéia, mas não conseguiram conceber um sistema que funcionasse eficientemente dessa maneira na prática. A partir do lançamento das idéias deles, começou-se uma busca por uma implementação viável da criptografia de chave pública. Ela veio um tempo depois com três pesquisadores chamados Ron Rivest, Adi Shamir, Len Adleman. Eles inventaram o algoritmo RSA, que é considerada por muitos a melhor implementação da criptografia de chave pública. Esse algoritmo é usado largamente na internet, para manter a segurança de transações bancarias, e-commerce e muitas outras aplicações. No RSA, a chave privada é basicamente dois números primos de um tamanho enorme e a chave pública é a multiplicação desses dois primos. O dono da chave privada consegue facilmente gerar a chave pública, porque a multiplicação é uma tarefa fácil. Já a fatoração de um número nos seus dois fatores primos é um tanto complicado quando o tamanho da entrada cresce. Atualmente, usa-se um tamanho de chave da ordem em torno de 10 elevado a 308, o que levaria todos os computadores do mundo mais do que a idade do universo para conseguir achar a resposta. Por isso, o RSA é considerado um algoritmo seguro. Com o advento dos computadores quânticos, essa segurança poderia ser quebrada, e aí teria que se inventar [e até já foi inventado] outro tipo de método criptográfico para conseguir manter o sigilo. Ah sim, e eu recomendo o livro, muito interessante.

Um comentário:

Eder disse...

Tbm li esse livro há uns 2 anos.
O conteudo é muito bom.
E muito pratico para desenvolvedores que trabalham com tecnologia RSA. (ssl, assinatura digital... etc)
RECOMENDO!

Dé.