Percursos
/
Python
Python
/
Exercícios
/
Diffie-Hellman
Diffie-Hellman

Diffie-Hellman

Fácil

Instruções

Troca de chaves Diffie-Hellman.

A Alice e o Bob usam a troca de chaves Diffie-Hellman para partilhar segredos. Começam por números primos, escolhem chaves privadas, geram e partilham chaves públicas e, em seguida, geram uma chave secreta partilhada.

Passo 0

O programa de testes fornece os números primos p e g.

Passo 1

A Alice escolhe uma chave privada, a, maior do que 1 e menor do que p. O Bob faz o mesmo para escolher uma chave privada b.

Passo 2

A Alice calcula uma chave pública A.

A = gᵃ mod p

Usando os mesmos p e g, o Bob calcula de forma semelhante uma chave pública B a partir da sua chave privada b.

Passo 3

A Alice e o Bob trocam as chaves públicas. A Alice calcula a chave secreta s.

s = Bᵃ mod p

O Bob calcula

s = Aᵇ mod p

Os cálculos produzem o mesmo resultado! A Alice e o Bob partilham agora o segredo s.

Devo usar random ou secrets aqui?

A partir do Python 3.6, existem dois módulos diferentes para produzir números "aleatórios":

O módulo chamado random é pseudoaleatório, ou seja, não gera aleatoriedade verdadeira: segue antes um algoritmo que simula aleatoriedade. Como estes "números aleatórios" são gerados por um algoritmo conhecido, não são verdadeiramente aleatórios. Por isso, o módulo random não é adequado para criptografia e não deve ser usado, precisamente por ser pseudoaleatório.

O módulo chamado secrets gera números "aleatórios" criptograficamente fortes, que oferecem a segurança acrescida exigida pela criptografia. Continuam a ser pseudoaleatórios no sentido mais estrito, mas têm garantias de que os números que produzem são absolutamente imprevisíveis.

Como isto é apenas um exercício de prática, usar o módulo random não faz mal, mas repara que seria muito inseguro se fosse realmente usado para criptografia.

Editar via GitHub A ligação abre numa nova janela ou separador
Python Exercism

Estás pronto para começar Diffie-Hellman?

Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.