Diffie Hellman (DH) key exchange algorithm is a method for secure exchangeing cryptographic keys over a public communications channel. As chaves não são efectivamente trocadas – são derivadas em conjunto. Tem o nome dos seus inventores Whitfield Diffie e Martin Hellman.
Se Alice e Bob desejam comunicar um com o outro, primeiro concordam entre eles um grande número primo p, e um gerador (ou base) g (onde 0 < g < p).
Alice escolhe um integer a secreto (a sua chave privada) e depois calcula g^a mod p (que é a sua chave pública). Bob escolhe a sua chave privada b, e calcula a sua chave pública da mesma forma.
Bob sabe b e g^a, para que possa calcular (g^a)^b mod p = g^ab mod p. Portanto, tanto Alice como Bob conhecem um segredo partilhado g^ab mod p. Uma Eva que estava a ouvir na comunicação conhece p, g, a chave pública de Alice (g^a mod p) e a chave pública de Bob (g^b mod p). Ela é incapaz de calcular o segredo partilhado a partir destes valores.
Em modo estático-estático, tanto Alice como Bob mantêm as suas chaves privadas/públicas em múltiplas comunicações. Portanto, o segredo partilhado resultante será sempre o mesmo. No modo estático-estático, uma parte irá gerar sempre uma nova chave privada/pública, assim um novo segredo partilhado será gerado.
Both RSA e Diffie Hellman (DH) são protocolos de encriptação de chave pública utilizados para a troca segura de chaves. São protocolos independentes que não dependem um do outro.
Efémero Diffie-Hellman usa chaves temporárias, públicas. Cada instância ou execução do protocolo utiliza uma chave pública diferente. A autenticidade da chave temporária do servidor pode ser verificada através da verificação da assinatura na chave. Uma vez que as chaves públicas são temporárias, um compromisso da chave de assinatura a longo prazo do servidor não compromete a privacidade de sessões passadas. Isto é conhecido como Perfect Forward Secrecy (PFS).
Diffie Hellman usa um par de chaves privadas-públicas para estabelecer um segredo partilhado, tipicamente uma chave simétrica. DH não é um algoritmo simétrico – é um algoritmo assimétrico utilizado para estabelecer um segredo partilhado para um algoritmo de chave simétrica.
Protocolos de acordo de chave autenticada trocam uma chave de sessão num protocolo de troca de chaves que também autentica as identidades das partes envolvidas na troca de chaves. A troca anónima (ou não autenticada) de chaves, como Diffie-Hellman, não fornece autenticação das partes, sendo assim vulnerável a ataques de homem no meio.
DH ainda é utilizado hoje em dia, mas é necessário tomar certas precauções no que diz respeito aos seus blocos de construção. A autenticação também precisa de ser implementada em cima de DH para prevenir ameaças homem no meio.
DH é considerado seguro contra espiões se o grupo cíclico finito G e o gerador g forem escolhidos correctamente. Em particular, a ordem do grupo G deve ser grande, particularmente se o mesmo grupo for utilizado para grandes quantidades de tráfego. Com um grupo G suficientemente grande, a resolução do problema Diffie-Hellman para obter g^ab considerado difícil.
Diffie-Hellman troca por si só não fornece autenticação das partes comunicantes e é assim vulnerável a um ataque de homem no meio. Um atacante activo que execute o ataque man-in-the-middle pode estabelecer duas trocas chave distintas, uma com Alice e a outra com Bob, efectivamente disfarçadas de Alice para Bob, e vice-versa, permitindo-lhe decifrar, depois re-encriptar, as mensagens passadas entre elas.
Um gráfico de sigilo é utilizado para analisar quem sabe o quê em cada passo de um algoritmo de troca de chaves.