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.
O programa de testes fornece os números primos p e g.
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.
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.
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.
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.
Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.