Articles

O que é a troca de chaves Diffie-Hellman e como é que funciona?

Posted on

Qual é a troca de chaves Diffie-Hellman (1)

A troca de chaves Diffie-Hellman foi um dos mais importantes desenvolvimentos na criptografia de chaves públicas e ainda é frequentemente implementada numa série de diferentes protocolos de segurança actuais.

Permite a duas partes que ainda não se encontraram anteriormente estabelecer com segurança uma chave que podem utilizar para proteger as suas comunicações. Neste artigo, vamos explicar para que é utilizada, como funciona passo a passo, as suas diferentes variações, bem como as considerações de segurança que precisam de ser notadas a fim de a implementar em segurança.

O que é a troca de chaves Diffie-Hellman?

A troca de chaves Diffie-Hellman foi o primeiro método amplamente utilizado para desenvolver e trocar chaves em segurança através de um canal inseguro.

Pode não parecer tão excitante ou inovador nos termos acima referidos, por isso vamos dar um exemplo que explica porque é que a troca de chaves Diffie-Hellman foi um marco tão importante no mundo da criptografia, e porque é ainda hoje tão frequentemente utilizada.

Vamos dizer que é um espião ultra-secreto e que precisa de enviar algumas informações importantes para a sua sede. Como evitaria que os seus inimigos obtivessem a mensagem?

A solução mais comum seria encriptar a mensagem com um código. A forma mais fácil é pré-organizar qualquer tipo de código e chave que pretenda utilizar de antemão, ou fazê-lo através de um canal de comunicação seguro.

Vamos dizer que é um espião particularmente mau, e você e o seu quartel-general decidem utilizar uma fraca cifra de deslocamento para codificar as suas mensagens. Neste código, cada “a” torna-se “b”, cada “b” torna-se “c”, cada “c” torna-se “d”, e assim por diante, até ao “z” tornar-se um “a”.

Acima desta cifra de turno, a mensagem “Let’s get dinner” torna-se “Mfu’t hfu ejoofs”. Felizmente, na nossa hipotética situação, os seus adversários são tão incompetentes como você e são incapazes de decifrar um código tão simples, que os impede de aceder ao conteúdo da mensagem.

Mas o que acontece se não conseguir arranjar um código com o seu destinatário de antemão?

Vamos dizer que quer comunicar com um espião de uma nação aliada que nunca conheceu antes. Não tem um canal seguro através do qual possa falar com eles. Se não encriptar a sua mensagem, qualquer adversário que a intercepte será capaz de ler o conteúdo. Se encriptar sem dizer ao aliado o código, então o inimigo não será capaz de o ler, mas o aliado também não.

Esta questão foi um dos maiores enigmas na criptografia até aos anos 70:

Como pode trocar informações com alguém em segurança se não teve a oportunidade de partilhar a chave antes do tempo?

A troca de chaves Diffie-Hellman foi o primeiro mecanismo utilizado publicamente para resolver este problema. O algoritmo permite àqueles que nunca se encontraram antes criar em segurança uma chave partilhada, mesmo através de um canal inseguro que os adversários possam estar a monitorizar.

A história da troca de chaves Diffie-Hellman

A troca de chaves Diffie-Hellman tem as suas raízes nos anos 70. Embora o campo da criptografia se tivesse desenvolvido significativamente ao longo do início do século XX, estes avanços concentraram-se principalmente na área da criptografia de chaves simétricas.

Não foi até 1976 que os algoritmos de chaves públicas surgiram na esfera pública, quando Whitfield Diffie e Martin Hellman publicaram o seu artigo, New Directions in Cryptography. A colaboração delineou os mecanismos por detrás de um novo sistema, que viria a ser conhecido como a troca de chaves Diffie-Hellman.

O trabalho foi parcialmente inspirado por desenvolvimentos anteriores feitos por Ralph Merkle. Os chamados Puzzles de Merkle envolvem uma parte a criar e enviar uma série de puzzles criptográficos para a outra. Estes puzzles exigiriam uma quantidade moderada de recursos computacionais para serem resolvidos.

O destinatário escolheria aleatoriamente um puzzle para resolver e depois despenderia o esforço necessário para o completar. Uma vez resolvido o puzzle, um identificador e uma chave de sessão são revelados ao destinatário. O destinatário transmite então o identificador de volta ao remetente original, o que permite ao remetente saber que puzzle foi resolvido.

Desde que o remetente original criou os puzzles, o identificador permite-lhes saber qual a chave de sessão que o destinatário descobriu, e as duas partes podem utilizar esta chave para comunicar de forma mais segura. Se um atacante estiver a ouvir a interacção, terá acesso a todos os puzzles, bem como ao identificador que o destinatário transmite de volta ao remetente original.

O identificador não diz ao atacante qual a chave de sessão que está a ser utilizada, pelo que a melhor abordagem para decifrar a informação é resolver todos os puzzles para desvendar a chave de sessão correcta. Uma vez que o atacante terá de resolver metade dos puzzles em média, acaba por ser muito mais difícil para ele descobrir a chave do que para o destinatário.

Esta abordagem proporciona mais segurança, mas está longe de ser a solução perfeita. A troca de chaves Diffie-Hellman levou algumas destas ideias e tornou-as mais complexas a fim de criar um método seguro de criptografia de chaves públicas.

Embora tenha ficado conhecido como a troca de chaves Diffie-Hellman, Martin Hellman propôs que o algoritmo fosse nomeado troca de chaves Diffie-Hellman-Merkle, para reflectir o trabalho que Ralph Merkle colocou em prol da criptografia de chaves públicas.

Pensava-se publicamente que Merkle, Hellman e Diffie foram as primeiras pessoas a desenvolver a criptografia de chaves públicas até 1997, quando o governo britânico desclassificou o trabalho realizado no início dos anos 70 por James Ellis, Clifford Cox e Malcolm Williamson.

Acontece que o trio criou o primeiro esquema de criptografia de chaves públicas entre 1969 e 1973, mas o seu trabalho foi classificado durante duas décadas. Foi conduzido sob a Sede de Comunicação do Governo (GCHQ), uma agência de inteligência britânica.

A sua descoberta foi na realidade o algoritmo RSA, pelo que Diffie, Hellman e Merkle foram ainda os primeiros a desenvolver a troca de chaves Diffie-Hellman, mas já não os primeiros inventores da criptografia de chave pública.

Onde é utilizada a troca de chaves Diffie-Hellman?

O principal objectivo da troca de chaves Diffie-Hellman é desenvolver com segurança segredos partilhados que podem ser utilizados para derivar chaves. Estas chaves podem então ser usadas com algoritmos de chaves simétricas para transmitir informação de uma forma protegida. Os algoritmos simétricos tendem a ser utilizados para encriptar a maior parte dos dados porque são mais eficientes do que os algoritmos de chaves públicas.

Tecnicamente, a troca de chaves Diffie-Hellman pode ser utilizada para estabelecer chaves públicas e privadas. No entanto, na prática, a RSA tende a ser utilizada em seu lugar. Isto porque o algoritmo RSA também é capaz de assinar certificados de chave pública, enquanto a troca de chaves Diffie-Hellman não é.

O algoritmo ElGamal, que foi muito utilizado no PGP, baseia-se na troca de chaves Diffie-Hellman, pelo que qualquer protocolo que o utilize está efectivamente a implementar uma espécie de Diffie-Hellman.

Como um dos métodos mais comuns para a distribuição segura de chaves, a troca de chaves Diffie-Hellman é frequentemente implementada em protocolos de segurança tais como TLS, IPsec, SSH, PGP, e muitos outros. Isto torna-a parte integrante das nossas comunicações seguras.

Como parte destes protocolos, a troca de chaves Diffie-Hellman é frequentemente utilizada para ajudar a proteger a sua ligação a um website, para aceder remotamente a outro computador, e para enviar emails encriptados

Como funciona a troca de chaves Diffie-Hellman?

A troca de chaves Diffie-Hellman é complexa e pode ser difícil de perceber como funciona. Utiliza números muito grandes e muita matemática, algo que muitos de nós ainda tememos por causa dessas longas e aborrecidas aulas de liceu.

Para tornar as coisas um pouco mais fáceis de compreender, começaremos por explicar a troca de chaves Diffie-Hellman com uma analogia. Quando tivermos uma grande ideia de como funciona, passaremos a uma descrição mais técnica dos processos subjacentes.

A melhor analogia para o esquema Diffie-Hellman é pensar em duas pessoas a misturar tinta. Vamos usar o padrão de criptografia, e dizer que os seus nomes são Alice e Bob. Ambos concordam com uma cor aleatória para começar. Digamos que enviam um ao outro uma mensagem e decidem o amarelo como cor comum, tal como no diagrama abaixo:

diffie-hellman-2

Eles definem a sua própria cor. Eles não dizem à outra parte a sua escolha. Digamos que Alice escolhe o vermelho, enquanto Bob escolhe um azul ligeiramente esverdeado.

O passo seguinte é tanto Alice como Bob misturarem a sua cor secreta (vermelho para Alice, verde-azul para Bob) com o amarelo que eles concordaram mutuamente. De acordo com o diagrama, Alice acaba com uma mistura orangotango, enquanto o resultado de Bob é um azul mais profundo.

Após terem terminado a mistura, enviam o resultado à outra parte. Alice recebe o azul mais profundo, enquanto Bob recebe a tinta de cor laranja.

Após terem recebido o resultado da mistura do seu parceiro, acrescentam-lhe então a sua cor secreta. Alice pega no azul mais profundo e adiciona a sua tinta vermelha secreta, enquanto Bob adiciona o seu azul esverdeado secreto à mistura laranja que acabou de receber.

O resultado? Ambos saem com a mesma cor, que, neste caso, é um castanho nojento. Pode não ser o tipo de cor com que gostaria de pintar a sua sala de estar, mas é uma cor partilhada, no entanto. Esta cor partilhada é referida como o segredo comum.

A parte crítica da troca de chaves Diffie-Hellman é que ambas as partes acabam com o mesmo resultado, sem nunca precisarem de enviar a totalidade do segredo comum através do canal de comunicação. Escolhendo uma cor comum, as suas próprias cores secretas, trocando a mistura e voltando a adicionar a sua própria cor, dá a ambas as partes uma forma de chegar ao mesmo segredo comum sem nunca terem de enviar através de tudo.

Se um atacante estiver a ouvir a troca, tudo o que podem aceder é à cor amarela comum com que Alice e Bob começam, bem como às cores misturadas que são trocadas. Uma vez que isto é realmente feito com números enormes em vez de tinta, estas peças de informação não são suficientes para o ataque discernir quer as cores secretas iniciais, quer o segredo comum (tecnicamente é possível calcular o segredo comum a partir desta informação, mas numa implementação segura da troca de chaves Diffie-Hellman, seria necessário um tempo e recursos computacionais impraticáveis para o fazer).

Esta estrutura da troca de chaves Diffie-Hellman é o que a torna tão útil. Permite que as duas partes comuniquem através de uma ligação potencialmente perigosa e ainda assim inventam um segredo partilhado que podem utilizar para fazer chaves de encriptação para as suas futuras comunicações. Não importa se algum atacante está a ouvir, porque o segredo completo partilhado nunca é enviado através da ligação.

Os detalhes técnicos da troca de chaves Diffie-Hellman

Tempo para alguma matemática….

Não se preocupe, vamos levar isto devagar e tentar fazer com que todo o processo seja o mais fácil de entender possível. Segue uma premissa semelhante à da analogia mostrada acima, mas em vez de misturar e enviar cores, o esquema Diffie-Hellman faz de facto cálculos baseados em números primos excepcionalmente grandes, depois envia-os através.

Para garantir a segurança, recomenda-se que o prime (p) tenha pelo menos 2048 bits, o que é o equivalente binário de um número decimal com cerca deste tamanho:

415368757628736598425938247569843765827634879128375827365928736 84273684728938572983759283475934875938475928475928739587249587 29873958729835792875982795837529876348273685729843579348795827 93857928739548772397592837592478593867045986792384737826735267 3547623568734869386945673456827659498063849024875809603947902 7945982730187439759284620950293759287049502938058920983945872 0948602984912837502948019371092480193581037995810937501938507913 95710937597019385089103951073058710393701934701938091803984091804 98109380198501398401983509183501983091079180395810395190395180935 8109385019840193580193840198340918093851098309180019

Para evitar que a cabeça de alguém expluda, vamos analisar esta explicação com números muito mais pequenos. Esteja ciente de que a troca de chaves Diffie-Hellman seria insegura se utilizasse números tão pequenos como os do nosso exemplo. Estamos apenas a utilizar números tão pequenos para demonstrar o conceito de uma forma mais simples.

Na forma mais básica da troca de chaves Diffie-Hellman, Alice e Bob começam por decidir mutuamente dois números para começar, ao contrário da tinta única comum no exemplo acima. Estes são o módulo (p) e a base (g).

No uso prático, o módulo (p) é um número prime muito grande, enquanto que a base (g) é relativamente pequena para simplificar os cálculos. A base (g) é derivada de um grupo cíclico (G) que é normalmente gerado muito antes das outras etapas.

Para o nosso exemplo, digamos que o módulo (p) é 17, enquanto a base (g) é 4.

A partir do momento em que eles se decidam mutuamente por estes números, Alice estabelece um número secreto (a) para si própria, enquanto Bob escolhe o seu próprio número secreto (b). Digamos que eles escolhem:

a = 3

b = 6

Alice efectua então o seguinte cálculo para lhe dar o número que ela enviará ao Bob:

A = ga mod p

No cálculo acima, modifica significa uma operação modulo. Estes são essencialmente cálculos para calcular o restante depois de dividir o lado esquerdo pelo direito. Como exemplo:

15 mod 4 = 3

Se compreender como funcionam as operações do módulo, pode fazê-las você mesmo nos cálculos seguintes, caso contrário pode utilizar uma calculadora online.

Então vamos colocar os nossos números na fórmula:

A = 43 mod 17

A = 64 mod 17

A = 13

Quando fazemos o mesmo para Bob, obtemos:

B = 46 mod 17

B = 4096 mod 17

B = 16

Alice envia então o seu resultado (A) a Bob, enquanto Bob envia a sua figura (B) a Alice. Alice calcula então o(s) segredo(s) partilhado(s) usando o número que recebeu de Bob (B) e o seu número secreto (a), usando a seguinte fórmula:

s = Ba mod p

s = 163 mod 17

s = 4,096 mod 17

s = 16

Bob executa então o que é essencialmente o mesmo cálculo, mas com o número que Alice lhe enviou (A), bem como o seu próprio número secreto (b):

s = Ab mod p

s = 136 mod 17

s = 4,826,809 mod 17

s = 16

Como se pode ver, ambas as partes acabaram com o mesmo resultado para s, 16. Este é o segredo partilhado, que só Alice e Bob conhecem. Podem então utilizá-lo para criar uma chave de encriptação simétrica, permitindo-lhes enviar informações entre si em segurança, de modo a que apenas eles possam aceder a ela.

Nota que embora B e s sejam os mesmos no exemplo acima, isto é apenas uma coincidência baseada nos pequenos números que foram escolhidos para esta ilustração. Normalmente, estes valores não seriam os mesmos numa implementação real da troca de chaves Diffie-Hellman.

P>Even embora muitos dos dados acima sejam enviados através do canal em texto claro (p, g, A e B) e possam ser lidos por potenciais atacantes, o(s) segredo(s) partilhado(s) nunca é(são) transmitido(s). Não seria prático para um atacante calcular o(s) segredo(s) partilhado(s) ou qualquer dos números secretos (a e b) a partir da informação que é enviada em texto claro.

O claro, isto pressupõe que a troca de chaves Diffie-Hellman seja devidamente implementada e que sejam utilizados números suficientemente grandes. Desde que estas disposições sejam cumpridas, a troca de chaves Diffie-Hellman é considerada uma forma segura de estabelecer um segredo partilhado que pode ser utilizado para assegurar comunicações futuras.

Estabelecer uma chave partilhada entre múltiplas partes

A troca de chaves Diffie-Hellman também pode ser utilizada para estabelecer uma chave partilhada com um maior número de participantes. Funciona da mesma maneira, excepto que são necessárias mais rondas dos cálculos para cada parte adicionar o seu número secreto e acabar com o mesmo segredo partilhado.

Apenas como na versão bipartida da troca de chaves Diffie-Hellman, algumas partes da informação são enviadas através de canais inseguros, mas não o suficiente para que um atacante possa calcular o segredo partilhado.

Por que é que a troca de chaves Diffie-Hellman é segura?

A um nível matemático, a troca de chaves Diffie-Hellman baseia-se em funções unidireccionais como base para a sua segurança. Estes são cálculos que são simples de fazer de uma maneira, mas muito mais difíceis de calcular em inverso.

Mais especificamente, baseia-se no problema Diffie-Hellman, o que pressupõe que sob os parâmetros certos, é inviável calcular gab a partir dos valores separados de g, ga e gb. Não existe actualmente uma forma publicamente conhecida de encontrar facilmente gab a partir dos outros valores, razão pela qual a troca de chaves Diffie-Hellman é considerada segura, apesar de os atacantes poderem interceptar os valores p, g, A, e B.

Autenticação & a troca de chaves Diffie-Hellman

No mundo real, a troca de chaves Diffie-Hellman é raramente utilizada por si só. A principal razão por detrás disto é que não fornece autenticação, o que deixa os utilizadores vulneráveis a ataques de homem no meio.

Estes ataques podem ter lugar quando a troca de chaves Diffie-Hellman é implementada por si só, porque não tem meios de verificar se a outra parte numa ligação é realmente quem dizem ser. Sem qualquer forma de autenticação, os utilizadores podem estar de facto ligados a atacantes quando pensam estar a comunicar com uma parte de confiança.

Por esta razão, a troca de chaves Diffie-Hellman é geralmente implementada juntamente com alguns meios de autenticação. Isto envolve frequentemente a utilização de certificados digitais e um algoritmo de chave pública, como o RSA, para verificar a identidade de cada parte.

Variações da troca de chaves Diffie-Hellman

A troca de chaves Diffie-Hellman pode ser implementada de várias maneiras diferentes, e tem também fornecido a base para vários outros algoritmos. Algumas destas implementações fornecem autorização, enquanto outras têm várias características criptográficas tais como o sigilo avançado perfeito.

Elliptic-curve Diffie-Hellman

Elliptic-curve Diffie-Hellman aproveita a estrutura algébrica das curvas elípticas para permitir que as suas implementações atinjam um nível semelhante de segurança com um tamanho de chave mais pequeno. Uma chave elíptica-curva de 224 bits proporciona o mesmo nível de segurança que uma chave RSA de 2048 bits. Isto pode tornar as trocas mais eficientes e reduzir os requisitos de armazenamento.

Parte do comprimento menor da chave e o facto de confiar nas propriedades das curvas elípticas, a elliptic-curve Diffie-Hellman opera de forma semelhante à troca de chaves Diffie-Hellman padrão.

TLS

TLS, que é um protocolo que é utilizado para proteger grande parte da Internet, pode utilizar a troca Diffie-Hellman de três maneiras diferentes: anónima, estática e efémera. Na prática, apenas a efémera Diffie-Hellman deve ser implementada, porque as outras opções têm problemas de segurança.

  • Anonymous Diffie-Hellman – Esta versão da troca de chaves Diffie-Hellman não utiliza qualquer autenticação, deixando-a vulnerável a ataques de man-in-the-middle. Não deve ser utilizada ou implementada.
  • Diffie-Hellman Estático – Diffie-Hellman Estático utiliza certificados para autenticar o servidor. Não autentica o cliente por defeito, nem fornece segredo forward.
  • Diffie-Hellman efémero – Esta é considerada a implementação mais segura porque fornece segredo forward perfeito. É geralmente combinado com um algoritmo tal como DSA ou RSA para autenticar uma ou ambas as partes na ligação. Diffie-Hellman efémero utiliza diferentes pares de chaves cada vez que o protocolo é executado. Isto dá à ligação um perfeito sigilo de avanço, porque mesmo que uma chave seja comprometida no futuro, não pode ser usada para decifrar todas as mensagens passadas.

ElGamal

ElGamal é um algoritmo de chave pública construído sobre a troca de chaves Diffie-Hellman. Tal como o Diffie-Hellman, não contém disposições para autenticação por si só, e é geralmente combinado com outros mecanismos para este fim.

ElGamal foi utilizado principalmente em PGP, GNU Privacy Guard e outros sistemas porque o seu principal rival, RSA, foi patenteado. A patente da RSA expirou em 2000, o que lhe permitiu ser implementada livremente após essa data. Desde então, ElGamal não tem sido implementado com tanta frequência.

STS

O protocolo Station-to-Station (STS) também se baseia na troca de chaves Diffie-Hellman. É outro esquema de acordo chave, no entanto fornece protecção contra ataques de homem no meio, bem como um perfeito sigilo para a frente.

Requer que ambas as partes na ligação já tenham um par de chaves, que é utilizado para autenticar cada lado. Se as partes ainda não são conhecidas uma da outra, então os certificados podem ser utilizados para validar as identidades de ambas as partes.

A troca de chaves Diffie-Hellman & RSA

Como discutimos anteriormente, a troca de chaves Diffie-Hellman é frequentemente implementada juntamente com RSA ou outros algoritmos para fornecer autenticação para a ligação. Se estiver familiarizado com RSA, pode estar a perguntar-se porque é que alguém se daria ao trabalho de utilizar também a troca de chaves Diffie-Hellman, uma vez que a RSA permite que as partes que nunca se encontraram anteriormente comuniquem com segurança.

RSA permite aos seus utilizadores encriptar mensagens com a chave pública do seu correspondente, de modo a que só possam ser desencriptadas pela chave privada correspondente. Contudo, na prática, a RSA não é utilizada para encriptar a totalidade das comunicações – isto seria demasiado ineficiente.

Em vez disso, a RSA é frequentemente utilizada apenas como um meio para autenticar ambas as partes. Faz isto com os certificados digitais de cada parte, que terão sido verificados por uma autoridade certificadora para provar que o proprietário do certificado é realmente quem dizem ser, e que a chave pública no certificado lhes pertence.

Para autenticação mútua, cada parte assinará uma mensagem usando a sua chave privada e depois enviá-la-á ao seu parceiro de comunicação. Cada destinatário pode então verificar a identidade da outra parte, verificando as mensagens assinadas contra a chave pública no certificado digital do seu parceiro de comunicação (ver o artigo acima mencionado sobre RSA para mais pormenores sobre como isto funciona, particularmente a secção Mensagens de assinatura).

Agora que ambas as partes tenham sido autenticadas, é tecnicamente possível continuar a utilizar a RSA para enviar mensagens encriptadas em segurança entre si, contudo acabaria por ser demasiado ineficiente.

Para contornar esta ineficiência, muitos protocolos de segurança utilizam um algoritmo como a troca de chaves Diffie-Hellman para inventar um segredo comum que pode ser utilizado para estabelecer uma chave simétrica partilhada. Esta chave simétrica é então utilizada num algoritmo de chave simétrica, tal como AES, para encriptar os dados que as duas partes pretendem enviar com segurança entre si.

Pode parecer um processo complexo e complicado, mas acaba por ser muito mais rápido e menos exigente em recursos quando comparado com a utilização de um algoritmo de chave pública para toda a troca. Isto porque a encriptação com chave simétrica é uma ordem de magnitude mais eficiente do que a encriptação com chave pública.

Para além das ineficiências que acabámos de mencionar, existem algumas outras desvantagens que resultariam da utilização exclusiva de RSA. A RSA precisa de um acolchoamento para a tornar segura, pelo que um algoritmo adicional teria de ser implementado adequadamente ao seu lado para a tornar segura.

A RSA também não proporciona um segredo avançado perfeito, o que é outra desvantagem quando comparada com a efémera troca de chaves Diffie-Hellman. Colectivamente, estas razões são a razão pela qual, em muitas situações, é melhor aplicar a RSA apenas em conjunto com a troca de chaves Diffie-Hellman.

Alternativamente, a troca de chaves Diffie-Hellman pode ser combinada com um algoritmo como o Digital Signature Standard (DSS) para fornecer autenticação, troca de chaves, confidencialidade e verificar a integridade dos dados. Em tal situação, a RSA não é necessária para assegurar a ligação.

Segurança da troca de chaves Diffie-Hellman

A segurança da troca de chaves Diffie-Hellman depende de como é implementada, bem como dos números que são escolhidos para ela. Como dissemos acima, não tem meios de autenticar a outra parte por si só, mas na prática são utilizados outros mecanismos para assegurar que a outra parte numa ligação não é um impostor.

Parâmetros para selecção de números

Se uma implementação real da troca de chaves Diffie-Hellman utilizasse números tão pequenos como os do nosso exemplo, tornaria o processo de troca trivial para um atacante rachar. Mas não é apenas o tamanho dos números que importa – os números também precisam de ser suficientemente aleatórios. Se um gerador de números aleatórios produzir um resultado previsível, pode prejudicar completamente a segurança da troca de chaves Diffie-Hellman.

O número p deve ter 2048 bits de comprimento para garantir a segurança. A base, g, pode ser um número relativamente pequeno como 2, mas precisa de vir de uma ordem de G que tem um grande factor prime

O ataque Logjam

A troca de chaves Diffie-Hellman foi concebida com base no problema do logaritmo discreto ser difícil de resolver. O mecanismo mais eficaz conhecido publicamente para encontrar a solução é o algoritmo de peneira de campo numérico.

As capacidades deste algoritmo foram tidas em conta quando a troca de chaves Diffie-Hellman foi concebida. Em 1992, sabia-se que para um dado grupo, G, três das quatro etapas envolvidas no algoritmo podiam ser potencialmente computadas de antemão. Se este progresso fosse guardado, o passo final poderia ser calculado num tempo relativamente curto.

Isto não era muito preocupante até se perceber que uma parte significativa do tráfego da Internet utiliza os mesmos grupos que são 1024 bits ou menores. Em 2015, uma equipa académica efectuou os cálculos para o prime de 512 bits mais comum utilizado pela troca de chaves Diffie-Hellman em TLS.

Também foram capazes de rebaixar 80% dos servidores TLS que suportavam DHE-EXPORT, para que aceitassem uma troca de chaves Diffie-Hellman de 512 bits de exportação para a ligação. Isto significa que cada um destes servidores é vulnerável a um ataque de um adversário de bons recursos.

Os investigadores continuaram a extrapolar os seus resultados, estimando que um Estado-nação poderia quebrar um prime de 1024 bits. Ao quebrar o único prime de 1024-bit mais utilizado, a equipa académica estimou que um adversário poderia monitorizar 18% dos um milhão de sites HTTPS mais populares.

Disseram que um segundo prime permitiria ao adversário decifrar as ligações de 66% dos servidores VPN, e 26% dos servidores SSH. Mais tarde no relatório, os académicos sugeriram que a NSA pode já ter estas capacidades.

“Uma leitura atenta das fugas de informação publicadas da NSA mostra que os ataques da agência às VPNs são consistentes com o facto de ter conseguido tal quebra”

Apesar desta vulnerabilidade, a troca de chaves Diffie-Hellman ainda pode ser segura se for implementada correctamente. Enquanto for utilizada uma chave de 2048 bits, o ataque Logjam não funcionará. Os navegadores actualizados também são seguros contra este ataque.

É a troca de chaves Diffie-Hellman segura?

Embora a troca de chaves Diffie-Hellman possa parecer complexa, é uma parte fundamental da troca segura de dados online. Desde que seja implementada juntamente com um método de autenticação apropriado e os números tenham sido correctamente seleccionados, não é considerada vulnerável a ataques.

A troca de chaves Diffie-Hellman foi um método inovador para ajudar duas partes desconhecidas a comunicar em segurança quando foi desenvolvida nos anos 70. Enquanto agora implementamos versões mais recentes com chaves maiores para proteger contra a tecnologia moderna, o próprio protocolo parece que continuará a ser seguro até à chegada da computação quântica e dos ataques avançados que a acompanharão.

Como a computação quântica irá afectar a troca de chaves Diffie-Hellman?

Computação quântica é um ramo emergente da computação que continua a fazer progressos. As especificidades de como os computadores quânticos funcionam são complicadas e fora do âmbito deste artigo, contudo a tecnologia apresenta problemas significativos para o campo da criptografia.

A explicação simples é que se espera que os computadores quânticos sejam capazes de resolver certos problemas que não são actualmente viáveis para os computadores clássicos. Isto abrirá muitas portas e trará novas possibilidades. Computadores quânticos suficientemente poderosos serão capazes de executar algoritmos quânticos que podem resolver mais eficazmente vários problemas matemáticos.

Embora isto possa parecer óptimo, a segurança de muitos dos nossos mecanismos criptográficos actuais depende de estes problemas serem difíceis de resolver. Se estes problemas matemáticos se tornam mais fáceis de calcular, também se torna mais fácil quebrar estes mecanismos criptográficos.

Um destes algoritmos quânticos é o algoritmo de Grover. Quando os computadores quânticos se tornam suficientemente poderosos, acelerará os ataques contra cifras de chave simétrica como AES. Contudo, pode ser facilmente mitigado duplicando o tamanho da chave.

A maior preocupação é como o algoritmo de Shor’s afectará a criptografia de chave pública. Isto porque a segurança dos algoritmos de chave pública mais comuns depende da imensa dificuldade de resolver um destes três cálculos:

  • O problema de logaritmo discreto
  • O problema de factorização inteira
  • O problema de logaritmo discreto elíptico-curva

As especificidades de cada um não importam realmente, mas pode seguir os links se quiser informação adicional. O importante é que uma vez que computadores quânticos suficientemente potentes cheguem, tornar-se-á muito mais prático resolver estes problemas com o algoritmo de Shor. À medida que estes problemas se tornam mais fáceis de resolver, os sistemas criptográficos que dependem deles tornar-se-ão menos seguros.

A criptografia de chave pública desempenha um papel fundamental na protecção das nossas comunicações, razão pela qual a computação quântica representa um enorme desafio para os criptógrafos.

No caso da troca de chaves Diffie-Hellman, a sua segurança depende da impraticabilidade de ser capaz de resolver o problema do logaritmo discreto com a tecnologia e os recursos actuais. No entanto, as ameaças do algoritmo de Shor aproximam-se a cada avanço na computação quântica.

É difícil arranjar uma linha temporal aproximada de quando a computação quântica irá ameaçar seriamente a troca de chaves Diffie-Hellman porque alguns investigadores são muito mais optimistas do que outros. Apesar disto, estão a ser desenvolvidos substitutos para a troca de chaves Diffie-Hellman e outros algoritmos de chave pública para garantir que estamos preparados para quando chegar o momento.

Potenciais substitutos para a troca de chaves Diffie-Hellman

O perigo dos computadores quânticos não é imediato, por isso a comunidade criptográfica ainda não se estabeleceu em alternativas específicas à troca de chaves Diffie-Hellman. No entanto, numerosos caminhos estão a ser seguidos. Estes incluem:

  • Criptografia com base em leis
  • Criptografia multivariada
  • Criptografia isogenética de curvas elípticas

Ainda não sabemos exactamente como é que o mundo pós-quântico procurará a criptografia, mas a comunidade de segurança está a trabalhar activamente nos problemas e a acompanhar os avanços no mundo da computação quântica. Embora haja grandes mudanças no futuro, não é nada que a pessoa comum precise de temer – provavelmente nem se aperceberá quando houver alguma mudança.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *