O Método Diffie-Hellman - YMDA Educação
O Método Diffie-Hellman
jan 26, 2020 Cantinho do Programador 0 Comment
Estou sempre defendendo a importância da Lógica na programação; e observem o que aconteceu comigo quando estava criando mais um programa para o meu novo livro…
A ideia era criar um programa que gerasse uma chave secreta para dois usuários (A e B) na troca de mensagens, encriptando-as (como faz o WatsApp), de modo que só os dois tivessem acesso aos seus conteúdos. Para fazer isto existem muitos algoritmos que implementam vários métodos; e um desses métodos é o Diffie-Hellman, onde os dois usuários concordam com um divisor modular D (normalmente um número primo), e cada um escolhe seus próprios números secretos (NA e NB), para uma base B comum (também um número primo). Esses números são utilizados em dois cálculos modulares: Xa=(B^NA) Mod D e Xb=(B^NB) Mod D, (onde Xa é o valor calculado do usuário A para ser enviando ao usuário B, e xb o valor de B a ser enviado ao usuário A) para depois calcular a chave final de encriptação da mensagem. São cálculos modulares intensos.
Observem que a expressão B^NA ou B^NB, pode gerar valores extremamente altos e inviabilizar todo o processo. Por exemplo, vamos supor que a base B acordada entre os dois interlocutores fosse 389, o número secreto do interlocutor A fosse 235 e o divisor modular comum fosse 391. Então, o valor a ser enviado de A para B seria calculado do seguinte modo: Xa = 389^235 Mod 391 (resto da divisão de 389 elevado a 235 por 391). E vocês sabem quanto dá 389^235!? Um número muito grande!!!!!!
Esse número é: 4,3466664151020615350759148266745e+608
É, basicamente, o número 4 seguido de seiscentos e oito zeros; um número assustador, não é!? Isto inviabilizaria qualquer cálculo "normal" dentro de um programa!
E como resolver esta situação!?
Usando APENAS a Lógica, criei um pseudocódigo para encontrar a solução, depois testei o algoritmo no Visualg e, finalmente, codifiquei o programa em Python.
A figura 1 mostra o resultado da expressão acima: 145; este seria o valor a ser enviado do interlocutor A para o interlocutor B.
Assim, pessoal, mais uma vez venho aqui no Face desfazer aquela ideia de que para programar tem que saber uma linguagem de programação "poderosa", "orientada a isto", "orientada à aquilo", "na moda", "na plataforma X", "com framework Y", etc, etc; não é bem assim!
Observem que solução inicial que apresentei está quase em Português (em Portugol).
O IMPORTANTE é saber que a solução tem que vir da aplicação da Lógica, pois nem o C, nem o C++, nem o C#, nem o Java, nem o Phyton, nem qualquer linguagem de programação resolve o problema; eu só consegui codificar em Python, DEPOIS que encontrei a solução em algoritmo/pseudocódigo.
NENHUMA linguagem de programação resolve o problema; apenas a LÓGICA, BOM SENSO e, em casos como este, conhecimentos básicos de Matemática!