Este artigo não pode ser considerado um artigo isolado. Ele faz parte de uma sequência de outros artigos sobre o tema. Se você não é versado no assunto da criptografia, talvez queira ler os artigos anteriores antes de prosseguir a leitura deste.
A primeira vez que escrevi sobre criptografia foi em fevereiro de 2009, com o artigo
Introdução a criptografia. Neste eu defini algumas terminologias, explicando o que é chave, criptoanálise e força bruta, além de conceituar os tipos de algoritmos existentes.
Na sequência, em março de 2009, dei continuidade ao tema com o artigo
Criptografia chave simétrica de bloco e de fluxo, que descrevia o primeiro tipo, os de cifras simétricas.
Por fim, em Julho de 2009, desejava completar a série falando sobre os algoritmos assimétricos. Porém ao perceber que o artigo estava ficando demasiadamente grande, optei em dividí-lo em duas partes, sendo que a primeira parte tratou dos fundamentos matemáticos que permitiram a construção do RSA, bem como situá-lo na história (
Fundamentos da criptografia assimétrica).
Este artigo é, portanto, uma segunda parte sobre algoritmos assimétricos e traz, não apenas a descrição de um algoritmo assimétrico, como também um passo a passo de como ele realmente funciona, podendo qualquer um testar.
Para usar um algoritmo de criptografia é necessário que as partes envolvidas possuam um segredo em comum, uma chave. Ao transmitir uma mensagem o emissor pode cifrar ela com um algoritmo de criptografia usando esta chave. O receptor recupera a mensagem usando a mesma chave.
Porém existe um problema que é o compartilhamento desta chave, ou seja, de que forma o emissor e receptor chegaram a um consenso sobre seu valor. Se existe a possibilidade de um encontro pessoal e físico o compartilhamento desta informação pode ser realizado com segurança, mas se o único meio de transmissão existente entre eles é inseguro, tem-se um problema sério. Não se pode enviar a chave pela Internet, pois em caso de alguém estar escutando, este verá esta informação. Por isto que durante muitos anos pesquisadores procuraram um algoritmo que fosse
assimétrico.
Um algoritmo assimétrico possui mais de uma chave, tipicamente duas. Uma delas é usada para cifrar e a outra serve apenas para decifrar. Caso tal algoritmo existisse, o emissor poderia enviar pela Internet apenas a chave que cifra, mantendo em segredo a chave que decifra, ou vice versa.
A comunidade científica desistiu desta busca, classificando o problema como sem solução, mas
Whitfield Diffie e
Martin Hellman insistiram na utopia de um algoritmo assimétrico. Suas buscas frustraram-se tentativa por tentativa até que finalmente fizeram uma importante descoberta ao explorar a matemática modular (detalhes em
Fundamentos da criptografia assimétrica).
Infelizmente esta descoberta não resultou, de imediato, em um algoritmo assimétrico mas sim em um protocolo de troca de chaves que recebeu o nome de Diffie-Hellman, usado até hoje. Mesmo tendo continuado sua busca, foram os pesquisadores
Ronald Rivest,
Adir Shamir e
Leonard Adlemann que chegaram ao primeiro algoritmo de cifra assimétrico, o popularmente conhecido
algoritmo RSA (mais tarde tornou-se público que o governo britânico já possuía quatro anos antes um algoritmo assimétrico e que este seguia os mesmos princípios do RSA).
Talvez não seja do interesse de muitos entender como o RSA funciona. Afinal, nós, da área de TI, não os elaboramos, apenas os usamos. Muitos destes algoritmos são baseados em princípios matemáticos que nos são distantes e, não raro, nos resignamos a aceitar e acreditar nas informações que os matemáticos nos contam.
Por exemplo, se eles nos dizem que a operação exponencial de aritmética modular não pode ser revertida, que seja! Se nos dizem que a descoberta de dois divisores primos de um número só pode ser feita por tentativa e erro, que seja. Lemos, implementamos e usamos.
Contudo eu, particularmente, acredito que conhecer as coisas, as entranhas, o como é feito, ter o poder de fazer no braço, é um prazer indescritível.
Estejam com suas calculadores bc na mão.