Algorítimos assimétricos, mais conhecidos como de "chave pública e privada", são baseados em alguns princípios matemáticos considerados inexistentes, até que o "tolo" Whitfield Diffie conseguiu o que todos julgavam impossível, inaugurando uma nova era de cifras. Este artigo descreve esta história e como "Deus recompensa os tolos!".
Usar técnicas matemáticas para esconder o significado de uma informação não é um artifício de uso recente, pois muito se usou em guerras ou mesmo incidentes governamentais. Histórias incríveis podem ser obtidas, por exemplo, no fantástico livro de Simon Singh, "O Livro dos Códigos".
Basicamente um algoritmo de criptografia pode ser dividido em simétrico ou assimétrico. Os algoritmos simétricos são aqueles que simplesmente possuem uma chave e esta precisa ser compartilhada entre as partes envolvidas na comunicação secreta (Introdução a criptografia, uma leitura desejável antes de prosseguir a leitura deste).
A ciência da criptografia pode ser descrita como a eterna e incansável guerra entre os criptógrafos, que querem esconder informações, e os criptoanalistas, que querem torná-las legíveis.
Durante a segunda guerra mundial, por exemplo, os alemães usaram a famosa máquina Enigma para cifrar suas mensagens. Aliados tentavam achar fraquezas neste equipamento a fim de quebrá-lo mas tinham certas dificuldades, seja pela falta de informações ou pela força do algoritmo em si. O desafio era ainda maior pois a chave usada pelos alemães trocava diariamente, sendo que cada mensagem ainda tinha três letras aleatórias em uma espécie de chave de sessão. Descobrir, com algum esforço, a chave do dia era uma vitória, pois todas as mensagens seriam decifradas, mas os aliados voltariam a estaca zero a meia noite, quando a chave usada pelos alemães seria substituída.
Contudo, se o uso da enigma desta forma era um desafio para os aliados, também o era para os alemães. Com navios, submarinos e exércitos espalhados em vários pontos e com uma chave descartável, usada somente durante um único dia, como dar a conhecer aos operadores de rádio a chave do próximo dia? Não se pode simplesmente transmití-la, mesmo que de forma cifrada. Não é nada seguro transmitir a chave da terça-feira para todos, cifrando-a com a chave da segunda, pois se os aliados conseguiram quebrar a chave da segunda podem simplesmente ler a nova chave sem esforço algum.
Os alemães resolveram isto com a publicação de livros de códigos. Cada livro tinha chaves para vários dias e era entregue em mãos ao operador de comunicações. Este tinha fortes recomendações para destruir o livro e o equipamento imediatamente quando estiver prestes e ser capturado. Jamais deveria o livro e tampouco a máquina, cair em mãos inimigas.
A primeira maneira que os aliados encontraram para quebrar a enigma foi subornar um oficial alemão descontente que lhes entregava uma cópia do livro. Hans-Thilo Schmidt sentia-se rejeitado pelo exército e tinha ciúmes do sucesso de seu irmão mais velho, do alto escalão alemão. Devido a influência deste seu irmão, acabou em um cargo burocrático e logo passou a vender informações para um agende secreto francês. E eis que um forte esquema de cifras, com chaves de uso diário, é posto por terra por causa de uma fraqueza humana e o compartilhamento de chaves.
A máquina enigma acabou sendo quebrada de forma definitiva por Alan Turing e suas "bombas" (a história de Turing é muito triste. Sem jamais receber reconhecimento em vida, um dos maiores gênios da criptoanálise acabou cometendo suicídio em 7 de Junho de 1954).
O mais interessante neste assunto de criptografia é todo o sigilo existente em torno dele. O mundo só tomou conhecimento de todos estes detalhes muitos anos depois, permanecendo um completo segredo até então e, talvez, com os alemães ainda achando que sua Enigma fora inquebrável.
Nos dias de hoje não é diferente. Já que não é possível confiar nos meios de comunicação, não se pode usá-lo para transmitir uma chave que será futuramente usada em uma conversa cifrada. A princípio a única maneira realmente segura de troca de um segredo é presencialmente, ou seja, as partes realizando um encontro pessoal e físico.
Mas existiria alguma forma realmente segura e confiável de realizar uma troca de chaves de forma sigilosa sem que um encontro físico ocorresse? Todos haviam desistido desta busca.
[2] Comentário enviado por foguinho.peruca em 04/08/2009 - 11:39h
Elgio,
Parabéns pelo artigo. Muito simples e direto, como uma boa aul deveria ser.... Estou estudando para prestar a poscomp e esse artigo veio bem a calhar...
Segundo porque o operador de módulo do PHP não é realmente operador de módulo. É o operador de RESTO, que mesmo considerado como sinônimos eles NÃO SÃO!
-4 mod 10 deve dar 6 (-4 está a 4 posições antes do 10)
Mas no PHP, assim como no C, -4 mod 10 = -4
[9] Comentário enviado por removido em 23/09/2009 - 15:47h
Não de forma alguma, passei um tempinho estudando como fazer estes cálculos no PHP e ele possui uma biblioteca matemática para essas operações mais complexas, procurem na área de scripts do VOL por PHP > Segurança > diffiehellman vou postar lá:
p=131 e=5 xf=31 xc=17
e^xf => 5 ^ 31 = 2147483647 mod 131 = 41
e^xc => 5 ^ 17 = 2147483647 mod 131 = 4
kf = 49 kc = 49
agora só falta desenvolver o gerador de números primos.
[12] Comentário enviado por Win7User em 11/12/2009 - 20:01h
Exelente artigo como todos que tenho lido aqui postados pelo Elgio,muito bacana um pessoa compartilhar de seus conhecimentos para que outros venham a aprender e conhecer melhor alguns conceitos de programação e etc...
"Deus recompensa os tolos!".-tvz como frase de efeito está OK,mas a tradução correta seria : Deus recompensa os sabios!!! que sao julgados tolos ^^
abraços brother
[18] Comentário enviado por removido em 08/11/2010 - 18:17h
Existe um erro nisto tudo, a matemática é perfeita, ou seja existe sim uma forma de resolver esse algorítimo. Mas eu acho que a graça da criptografia é esta. AHahhAHAhaHahhaHahaha
A propósito na imagem está escrito manidos ao invés de mantidos.
[21] Comentário enviado por enricolo4 em 10/06/2011 - 23:37h
Muito bom seu artigo, gostei muito.
entao pode ser usando um tipo de divisão de polinômios no caso f(x)= Q(x)(x-a) + R(x), sendo (x-a) é a raíz no caso o divisor, f(x) a função o dividendo Q(x) o quociente e o R(x) o resto, no segundo caso também pode ser usado dessa maneira mas usando logaritmo no caso (xln(23)-ln(1311) = ln(1227) sei lah acho q isso ajudaria muito a utilizar um para decifrar certos, ou é somente matemática básica mesmo hehe
[22] Comentário enviado por xiloba em 11/06/2011 - 21:28h
Não vi até hoje nenhuma explicação tão profunda e, ao mesmo tempo, tão cristalina, que me fizesse entender o princípio e os desdobramentos do mecanismo da criptografia.
Parabéns. Aliás, parabéns sempre!
Todos os artigos que você produz são muito bem escritos e elucidativos, obrigado por compartilhar conosco o seu vasto conhecimento.
[23] Comentário enviado por dstter em 14/07/2011 - 23:20h
Muito bacana o artigo. Sua didatica é excelente. Professores assim que o mundo precisa ^^
Achei super maneiro aquela ideia dos cadeados.
Mas eu queria fazer uma pergunta (me ocorreu exatamente agora)
na matemática (que é uma ciência exata) não deve existir (ou já existe) uma forma de desfazer esse modelo usado? Assim como a divisão anula a multiplicação, não teria um calculo pra anular os que foram realizados exemplos e descobrir os números em vermelho? (sem ser por tentativa e erro ou mesmo sendo, mas deixando pistas sobre os mais provaveis, dando pra reduzir uma lista de infinitas para algo mais possível)?