Diffie-Hellman
Como duas pessoas combinam um segredo compartilhado conversando em um canal que todo mundo escuta? Escolha os números, siga o protocolo passo a passo e veja o que Eve consegue (e não consegue) descobrir.
Canal público (Eve escuta)
Bob
Eve tenta descobrir o segredo
Como ler a simulação
A ideia
Alice e Bob combinam, em público, um primo p e uma base g. Cada um escolhe um número secreto e envia só o resultado de g elevado a esse número, módulo p.
- Alice envia A = ga mod p.
- Bob envia B = gb mod p.
- Alice calcula Ba e Bob calcula Ab: os dois chegam a gab mod p.
Por que Eve não consegue?
Eve vê p, g, A e B. Uma forma de ataque é resolver o logaritmo discreto, recuperando um expoente compatível com A. A segurança também depende da dificuldade do problema computacional de Diffie-Hellman no grupo escolhido.
Com primos pequenos, testar expoentes é rápido. Na prática, usam-se grupos e parâmetros padronizados e suficientemente fortes, ou curvas elípticas. Um primo grande, por si só, não garante segurança.
O ponto fraco
Diffie-Hellman sozinho não autentica ninguém. Um atacante ativo (homem no meio) negocia uma chave com Alice e outra com Bob, e repassa as mensagens lendo tudo.
A defesa é autenticar as mensagens, por exemplo com assinaturas digitais e certificados, como no TLS.
Para pensar
- No exemplo com p = 23, quantas tentativas Eve precisa? E com p de 1 milhão?
- Com g que não é raiz primitiva, o que muda no conjunto de valores possíveis?
- Ligue o homem no meio: Alice e Bob percebem que as chaves são diferentes?
- Por que a chave obtida costuma ser usada para derivar uma chave de um algoritmo simétrico, e não para cifrar dados diretamente?
Nota sobre o modelo
Os valores aqui são exclusivamente didáticos, inclusive o exemplo de 31 bits. Não os utilize em sistemas reais. A base g pode não ser raiz primitiva para permitir a comparação entre grupos; isso não significa que qualquer base seja segura.