Troca de chaves de Diffie–Hellman
A troca de chaves de Diffie-Hellman é um método de criptografia para trocas de chaves de maneira segura em canal público. Desenvolvido por Whitfield Diffie e Martin Hellman,[1][2] foi um dos primeiros exemplos práticos de métodos de troca de chaves implementado dentro do campo da criptografia, tendo sido publicado em 1976.
Tradicionalmente, uma comunicação criptografada segura entre duas partes exigia que trocassem as chaves a priori por algum meio físico seguro, como uma lista de chaves em papel transportada por um mensageiro confiável. O método da troca de chaves de Diffie-Hellman permite que duas partes que não possuem conhecimento prévio uma da outra, compartilhem uma chave secreta sob um canal de comunicação inseguro. Tal chave pode ser usada para encriptar mensagens posteriores usando um esquema de cifra de chave simétrica.
O método Diffie-Hellman é usado para proteger uma variedade de serviços de Internet. No entanto, uma pesquisa publicada em outubro de 2015 sugere que os parâmetros em uso para muitas aplicações de Internet com DH à época não eram tão fortes o suficiente para impedir o comprometimento por invasores muito bem financiados, como os serviços de segurança de alguns países.[3]
Tal conceito foi originalmente inventado por Malcolm Williamson, um funcionário do Government Communications Headquarters (GCHQ) no Reino Unido, alguns anos antes de Whitfield Diffie e Martin Hellman, porém o GCHQ decidiu não tornar pública a descoberta pois tratava-se de assunto de segurança nacional. Somente em 1997 foi revelado o trabalho mas não teve muita repercussão na pesquisa em universidades. O trabalho de Malcolm Williamson não incluía o conceito de assinatura digital.[4] Em 2002, Hellman sugeriu que o algoritmo fosse chamado de troca de chave de Diffie-Hellman-Merkle, em reconhecimento às contribuições de Ralph Merkle para a invenção da criptografia de chave pública. Martin Hellman escreveu:
O sistema é conhecido desde então como troca de chave de Diffie-Hellman. Enquanto tal sistema foi descrito em um artigo por mim e Diffie, ele é um sistema de distribuição de chave pública, um conceito desenvolvido por Merkle, e desta forma deveria ser chamado de "troca de chave de Diffie-Hellman-Merkle". Eu espero que esta pequena contribuição ajude na jornada para reconhecer as contribuições de Merkle na invenção da criptografia de chave pública.
O método foi seguido pelo RSA, uma outra implementação de criptografia de chave pública usando algoritmos assimétricos.
Descrição
[editar | editar código-fonte]![](http://upload.wikimedia.org/wikipedia/commons/f/f6/Figura_Diffie-Hellman.png)
Visão Geral
[editar | editar código-fonte]Antes de 1975 se alguém falasse que seria possível a troca de informações criptografadas entre duas partes sem que houvesse uma troca de chaves secretas entre ambas as partes, provavelmente muitos matemáticos diriam ser impossível. Mas em 1976 o algoritmo Diffie-Hellman foi inventado. O maior problema para que isso acontecesse foi a dificuldade de cálculos de logaritmos discretos em um campo infinito.
Diffie-Hellman estabelece um compartilhamento de chaves secreto que pode ser usado para troca de mensagens secretas dentro de um canal de comunicação público. O diagrama ao lado ilustra a ideia geral de troca de chaves usando cores ao invés de um número muito grande.
A seguir, uma descrição geral do protocolo:[5]
- Inicialmente, uma cor em comum é compartilhada entre Alice e Bob, cor esta que pode ser observada por um terceiro interessado na comunicação entre os dois.
- O passo seguinte é a escolha de Alice e Bob, cada um, de uma cor secreta própria, que não é compartilhada com ninguém.
- Cada um faz uma mistura primária com a cor comum e com suas cores secretas.
- O passo chave do processo é que Alice e Bob trocam apenas suas misturas primárias. Estas misturas primárias, resultado das combinações da cor comum e das cores secretas, muito dificilmente conseguem reverter e determinar quais as cores secretas Alice e Bob utilizaram, caso um terceiro esteja escutando a comunicação.
- Alice e Bob então usam suas cores secretas sobre as misturas primárias que receberam, gerando misturas secundárias (chave comum) que serão iguais tanto para Alice quanto para Bob, sem que um terceiro que esteja observando a comunicação consiga produzir esta mistura secundária.
Alice e Bob usam sua chave comum encriptar e desencriptar de modo secreto suas mensagens. Note que a cor amarela já foi previamente acordada por Alice e Bob.
Explicação criptográfica
[editar | editar código-fonte]A mais simples e original implementação do protocolo utiliza grupos multiplicativos de inteiros módulo "p", onde "p" é um número primo e "g" é uma raiz primitiva de módulo "p". Aqui está um exemplo do protocolo, onde os valores públicos estão em azul e os valores secretos estão em vermelho e destacados :
Alice | Bob | |||||
---|---|---|---|---|---|---|
Secreto | Público | Calcula | Envia |
Calcula |
Público |
Secreto |
a |
p, g | p,g | b | |||
a |
p, g, A |
ga mod p = A | A | p, g |
b | |
a |
p, g, A |
B |
gb mod p = B |
p, g, A, B |
b | |
a, s | p, g, A, B |
Ba mod p = s |
Ab mod p = s |
p, g, A, B |
b, s |
- Alice e Bob entram em acordo para usar um número primo p=23 e como base g=5.
- Alice escolhe um inteiro secreto a=6, e então envia a Bob A = ga mod p
- A = 56 mod 23 = 15.625 mod 23 = 8
- Bob escolhe um inteiro secreto b=15, e então envia a Alice B = gb mod p
- B = 515 mod 23 = 30.517.578.125 mod 23 = 19
- Alice calcula s = B a mod p
- s = 196 mod 23 = 47.045.881 mod 23 = 2
- Bob calcula s = A b mod p
- s = 815 mod 23 = 35.184.372.088.832 mod 23 = 2
- Alice e Bob compartilham agora uma chave secreta: s = 2.
Isto é possível porque 6*15 é o mesmo que 15*6. Alguém que tenha descoberto estes dois inteiros privados também será capaz de calcular s da seguinte maneira:
- s = 56*15 mod 23
- s = 515*6 mod 23
- s = 590 mod 23
- s = 807.793.566.946.316.088.741.610.050.849.573.099.185.363.389.551.639.556.884.765.625 mod 23
- s = 2
Tanto Alice quanto Bob chegaram no mesmo valor pois (ga)b e (gb)a são iguais mod p. Note que apenas a, b e gab = gba mod p são mantidos em segredo. Todos os demais valores – p, g, ga mod p, e gb mod p – são enviados limpos no canal público. Uma vez que Alice e Bob calculam a chave secreta, eles podem então usá-la como chave de encriptação, conhecida apenas por eles, para enviar e receber mensagens ao longo do mesmo canal de comunicação.
É claro que valores bem maiores de a, b, e p seriam necessários para tornar este exemplo seguro, uma vez que é fácil tentar todos os possíveis valores de gab mod 23. Existem apenas 23 possíveis inteiros que possuem os resultados observados para mod 23. Por outro lado, se p for um primo de ao menos 300 dígitos e a e b tenham ao menos 100 dígitos, então até os melhores algoritmos conhecidos atualmente não poderiam encontrar a dado apenas g, p, gb mod p e ga mod p, mesmo usando todo o poder computacional existente na humanidade. Tal problema é conhecido como problema do logaritmo discreto. Note que g não precisa ser necessariamente grande, e na prática seus valores são usualmente 2 ou 5.
Generalização para grupos cíclicos finitos
[editar | editar código-fonte]![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/a3/Diffie-Hellman-Schl%C3%BCsselaustausch.png/400px-Diffie-Hellman-Schl%C3%BCsselaustausch.png)
Aqui está uma descrição mais genérica do protocolo:
- Alice e Bob acordam em um grupo cíclico finito G e um elemento gerador g em G.( Isto é usualmente feito muito antes do resto do protocolo; assume que g é conhecido por todos os atacantes.) Nós vamos escrever o grupo G de modo multiplicativo.
- Alice escolhe um número natural aleatório a e envia ga para Bob.
- Bob também escolhe um número natural aleatório b e envia gb para Alice.
- Alice calcula (gb)a.
- Bob calcula(ga)b.
Tanto Alice quanto Bob estão agora de posse de elemento de grupo gab, que pode servir como a chave secreta compartilhada. Os valores de (gb)a e (ga)b são os mesmos porque os grupos são associativos a potência. (Veja também exponenciação.)
Com o objetivo de decifrar uma mensagem m, enviada como mgab, Bob (ou Alice) deve primeiro calcular (gab)-1, da seguinte maneira:
Bob sabe |G|, b, e ga. Um resultado da teoria de grupos estabelece que a partir da construção de G, x|G| = 1 para todo x em G.
Bob então calcula (ga)|G|-b = ga(|G|-b) = ga|G|-ab = ga|G|g-ab = (g|G|)ag-ab=1ag-ab=g-ab=(gab)-1.
Quando Alice envia a Bob a mensagem encriptada, mgab, Bob aplica (gab)-1 e recupera mgab(gab)-1 = m(1) = m.
Operação com mais de duas partes
[editar | editar código-fonte]O esquema de acordo de chaves Diffie-Helman não está limitado à interação entre apenas dois participantes. Qualquer número de usuários pode participar no acordo, executando as interações do protocolo e trocando os dados intermediários entre si. Por exemplo, Alice, Bob e Carol poderiam participar em um acordo do tipo Diffie-Hellman de acordo com o exemplo a seguir, onde todas as operações tomadas com módulo :
- Os participantes selecionam os parâmetros iniciais do algoritmo e ;
- Os participantes geram suas respectivas chaves privadas, que chamaremos , e .
- Alice calcula e envia o resultado para Bob.
- Bob calcula e envia o resultado para Carol.
- Carol calcula e utiliza esse valor como sua chave secreta compartilhada.
- Bob calcula e envia para Carol
- Carol calcula e envia o resultado para Alice.
- Alice calcula e utiliza o resultado como chave secreta compartilhada.
- Carol calcula e envia para Alice.
- Alice calcula e envia o resultado para Bob.
- Bob calcula e utiliza o resultado como chave secreta compartilhada.
Um intruso com acesso ao canal onde essas mensagens foram trocadas foi capaz de observar os valores , , , , , e , mas não pode usar qualquer combinação desses valores para reproduzir .
Demais usos
[editar | editar código-fonte]Acordo de chaves para autenticação de senhas
[editar | editar código-fonte]Chave pública
[editar | editar código-fonte]É utilizada em 128 bits.
[editar | editar código-fonte]Ver também
[editar | editar código-fonte]Notas
[editar | editar código-fonte]Ligações externas
[editar | editar código-fonte]Ver também
[editar | editar código-fonte]Referências
- ↑ Merkle, Ralph C. (1 de abril de 1978). «Secure communications over insecure channels». Communications of the ACM (4): 294–299. ISSN 0001-0782. doi:10.1145/359460.359473. Consultado em 25 de maio de 2022
- ↑ Diffie, W.; Hellman, M. (novembro de 1976). «New directions in cryptography». IEEE Transactions on Information Theory (6): 644–654. ISSN 1557-9654. doi:10.1109/TIT.1976.1055638. Consultado em 25 de maio de 2022
- ↑ Adrian, David (Outubro de 2015). «Imperfect Forward Secrecy: HowDiffie-Hellman Fails in Practice» (PDF). Weak Diffie-Hellman and the Logjam Attack. Consultado em 1 de maio de 2022
- ↑ «Public Key Cryptography (PKC), RSA, PKI». www.livinginternet.com. Consultado em 8 de abril de 2010
- ↑ Buchmann, Johannes A. (2013). Introduction to Cryptography Second ed. [S.l.]: Springer Science+Business Media. pp. 190–191. ISBN 978-1-4419-9003-7