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!".
Resolver o problema da troca de chaves não foi nada fácil, sendo que a busca por tal mecanismo acabou virando uma espécie de Santo Graal dos criptógrafos. Depois de muito esforço, pesquisas sem sucesso, a comunidade científica havia decretado como insolúvel o problema da distribuição de chaves. Somente os tolos insistiriam em tal bobagem.
Mas "Deus Recompensa os Tolos" (sub-título de "O Livro dos Códigos", página 277) e principalmente os teimosos como Whitfield Diffie. Mesmo desacreditado pelos criptógrafos mais brilhantes, ele ainda assim, "ingenuamente", se interessou pelo problema da distribuição de chaves e trabalhou em uma solução. Quando começou a trabalhar junto com outro "lunático", o Martin Hellman, as coisas começaram a fazer sentido.
Tiveram uma adesão e posterior desistência de Ralph Mekle, que não acreditou muito neste sonho impossível. O próprio Hellman tentou motivar Ralph escrevendo-lhe "...você tem a ideia número 1, fica empolgado e depois fracassa. Ai tem a ideia número 2, fica empolgado e também fracassa. Você tem a ideia número 99, fica empolgado e também fracassa. Só um tolo insistiria na ideia de número 100. Mas Deus recompensa os tolos." ("O livro dos Códigos", página 281, reproduzindo apenas alguns trechos).
Diffie e Hellman sempre citavam um experimento que servia como inspiração (que eu chego até a reproduzir em sala de aula). Apesar de ser considerado impossível a troca de informações de forma segura sem uma chave compartilhada, o mesmo podia incrivelmente ser realizado através dos correios.
Imagine que Cabelo e Fábio (eu não aguento mais a Alice e o Bob!) desejam trocar um documento sigiloso. Na verdade o Cabelo, que mora em Bebedouro deseja enviar ao Fábio detalhes secretos sobre o seu novo esquema de autenticação biométrica por cheiro (com tolerância a falhas em caso de falta de banho). Infelizmente Cabelo não pode algemar uma mala de documentos em seu pulso e viajar até um encontro pessoal com Fábio. Então ele decide enviar pelos correios.
Mas como? Como ele poderia enviar pelos correios de forma segura, sem que ninguém possa ler o conteúdo dos documentos?
Ele poderia colocar os documentos em uma caixa super forte, e fechá-la, enviando-a ao Fábio. Mas aí cai-se no problema original: Cabelo teria que enviar a chave da caixa ao Fábio, senão como Fábio a abriria? Esta novamente se falando de compartilhamento de chaves.
Porém existem uma solução extremamente criativa e funcional, descrita a seguir:
Cabelo vai em qualquer ferragem e compra um cadeado e uma caixa, coloca os documentos dentro desta caixa e a fecha com seu cadeado;
Cabelo envia pelo correio a caixa fechada ao Fábio, mas não envia a chave, sendo que no trajeto, ninguém pode abrir a caixa, pois ela está fechada com um cadeado que somente Cabelo tem a chave;
A caixa chega às mãos de Fábio. Fábio também não pode abrir, pois não tem a chave;
Fábio vai em uma ferragem e compra outro cadeado e o fecha na caixa que já tem o cadeado de Cabelo, deixando-a com dois cadeados, o cadeado F e o cadeado C;
Fábio devolve a caixa para Cabelo com os dois cadeados;
Cabelo recebe a caixa e agora nem mesmo ele pode abrir, pois lhe falta a chave do cadeado F;
Cabelo abre seu cadeado C removendo-o da caixa e a devolve para Fábio, agora apenas com o cadeado F;
Fábio recebe a caixa, agora apenas com o seu cadeado, e finalmente a abre com sua chave e lê os documentos.
Com este método jamais alguma chave foi enviada. Fábio manteve sob sua custódia a chave do cadeado F e Cabelo manteve a chave do cadeado C. Não houve compartilhamento de chaves. Tem-se um método seguro de troca de informações (na verdade este protocolo pode ser derrubado pelo ataque do Homem do meio, mas isto é assunto para depois).
Este procedimento torna-se possível se existirem três propriedades importantes no cadeado e na caixa:
Força: a caixa e o cadeado são fortes, a prova de qualquer alicate que se tenha conhecimento;
Segurança: não é possível construir uma chave apenas analisando o cadeado fechado (criptoanálise) e também não é possível tentar-se todos os possíveis padrões de chaves até abrir (força bruta);
Comutatividade: a ordem de fechamento dos cadeados não precisa ser a mesma de sua abertura. Pode-se colocar na caixa 10 cadeados, de 1 a 10, todos "em paralelo" mas pode-se removê-los em qualquer outra ordem. Não daria certo, se, por exemplo, se Fábio pegasse a caixa fechada de Cabelo e colocasse tudo dentro de uma caixa maior, fechando esta com seu cadeado.
Diffie e Hellman precisavam apenas encontrar um princípio matemático com estas três propriedades. Quando encontraram, não apenas criaram o famoso algoritmo Diffie-Hellman como abriram as portas para uma nova era no ramo da criptografia.
[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)?