Protocolo Diffie-Hellman de Troca de Chaves
[Transcrição do vídeo abaixo]
Olá pessoal aqui é o Daniel Scocco do canal criptos.com.br
No vídeo passado, eu falei um pouco sobre o que é criptografia, como ela funciona, como ela surgiu. E neste vídeo eu quero falar sobre problemas da criptografia simétrica que é a troca de chaves. Mas antes de entrar nesse assunto, vou fazer um resumo do que a gente viu.
Então, criptografia é o estudo e a prática de técnicas para se proteger a informação. Não só para se proteger, tem também algumas outras funções, como fazer autenticação e verificar a integridade das mensagens ou de dados, mas por enquanto vamos focar nessa parte de proteção.
Então, como você pode ver, vamos supor que eu tenho Alice que quer mandar uma mensagem para o Bob e não quer que ninguém saiba o teor dessa mensagem. Então, se alguém capturar essa mensagem no meio, ela não quer que ele seja capaz de entender o que ela queria passar pro Bob. Então, conceito básico, é que ela vai aplicar, ela vai usar um algoritmo de cifragem, como você está vendo à esquerda, AC. Esse algoritmo de cifragem, ele recebe 2 inputs, um é a mensagem que ela quer passar para o Bob e o outro é a chave que ela vai usar. O resultado desse algoritmo vai ser o C, que é o código ou a cifra, e ela vai transmitir esse C e mesmo se isso cair em mãos de uma pessoa, um ser malicioso, ele não vai conseguir entender qual é a mensagem original. Uma vez que Bob, ele recebe C, ele vai passar, ele vai receber o algoritmo de decifragem, AD, que você está vendo à direita. Os inputs desse algoritmo de decifragem são o C, que é o código, e K, que é a mesma chave que Alice usou para fazer a codificação. E esse algoritmo de decifragem vai cuspir fora M, que é a mensagem original, então Bob vai ficar sabendo exatamente o que Alice queria comunicar pra ele de uma maneira segura. Essa criptografia é dita simétrica porque a mesma chave é usada dos 2 lados. Você pode ver K é usado à esquerda para fazer a cifragem da mensagem e a mesma chave K é usada à direita quando o Bob quer fazer a decifragem.
Mas aí surgiu um problema que é justamente o assunto desse vídeo. Como eu faço para que os dois lados tenham a mesma chave, que eles consigam compartilhar essa chave sem que uma terceira pessoa obviamente possa ter acesso? Qualquer pessoa com acesso à chave consegue decifrar as mensagens. Se forem 2 amigos, que podem se reunir fisicamente a priori, eles podem se reunir, acordarem uma chave, cada um escreve para não esquecer, para não perder, aí cada um vai pro seu lado, depois eles vão poder trocar mensagens usando essa chave pré-acordada. Obviamente usar a mesma chave para trocar várias mensagens cria uma vulnerabilidade. Qualquer sistema criptográfico fica mais fácil de quebrar esse código, mas isso seria facilmente resolvido com uma lista de chaves, por exemplo, eles tem uma lista de 100 chaves, e aí eles sabem que cada mensagem que for enviada, vai ser usada uma das chaves em sequência.
Justamente é um sistema bem parecido com esse que era usado por exemplo na Segunda Guerra Mundial, principalmente pelas tropas alemãs. Então elas tinham uma lista enorme de chaves, e cada comandante levava sua lista, e quando chegava a mensagem ele olhava o dia e via qual era a chave que tinha que ser usada naquele dia ou em vários horários do dia, ele sabia qual era a chave certa. Porém com o surgimento dos computadores e das redes de computadores, essa estratégia de pré-acordar uma lista de chaves começou a ficar impraticável. Primeiro porque o número de chaves necessárias começou a crescer de uma forma muito rápida, porque praticamente qualquer conexão de internet poderia necessitar de uma nova chave para se comunicar de maneira segura. E segundo que agora as pontas que estavam estabelecendo a conexão, não necessariamente elas se conheciam ou tinham uma relação anterior, no caso na Guerra, onde os generais eram todos de um mesmo exército e poderiam levar as mesmas chaves. Agora já tinham 2 computadores, cada um de um lugar do mundo, que iam começar a se comunicar pela primeira vez e tinham que fazer essa troca de chaves de maneira segura e eficiente.
E foi aí então a partir da década de 70, os matemáticos e cientistas da Computação começaram a pensar em métodos e algoritmos para resolver esse problema. Resolveram de uma maneira muito inteligente, muito interessante. E aqui nesse vídeo vou falar sobre 2 desses algoritmos. Um que foi o precursor dessas ideias e o outro que se apoiou nele, evoluiu um pouco a ideia e inclusive é usado até hoje em muitos protocolos de segurança.
Bom, vamos ao primeiro método para se realizar essa troca de chaves de maneira segura. O nome desse método é Merkle’s Puzzles. Merkel é o nome do sujeito que teve essa sacada, ele era um estudante ainda nos Estados Unidos quando ele bolou essa ideia e, como sempre, imagina que a gente tem a Alice que está querendo conversar com o Bob de maneira segura, só que eles ainda não tem uma chave secreta acordada entre eles.
Então eles vão precisar fazer essa troca de chaves para que eles possam usar a chave para cifrar e decifrar as mensagens. Aí o Merkle teve a seguinte ideia: e se a Alice, em primeiro lugar, ela criar do lado dela, uma lista com 1000 desafios, como você está vendo do lado esquerdo, cada linha representa um desafio e cada desafio tem um número. Eu estou usando números hexadecimais, mas um número hexadecimal nada mais é do que uma representação mais concisa de um número. Tem um vídeo já publicado para você entender exatamente o que são números decimais, binários, hexadecimais, mas parte da premissa que isso aí é um número, somente um número bem grande, escolhido aleatoriamente neste caso. Então do lado esquerdo tem o número do desafio e do lado direito tem a chave, a proposta chave para ser usada na comunicação entre ela e o Bob. Então, como primeiro passo, a Alice vai gerar um número bem grande desses desafios, vamos supor que ela gere 1000 desafios. Aí, o próximo passo, o que ela vai fazer? Para cada um desses desafios, ela vai cifrar o desafio. O número e a chave proposta como você está vendo na primeira linha, ela vai usar o número cifrado, que vai receber uma chave K e o texto do desafio. Desafio número tal, chave tal. E aí ela vai mandar o código desses 100 desafios para o Bob.