Troca de chaves Diffie-Hellman.
Alice e Bob usam a troca de chaves Diffie-Hellman para compartilhar segredos. Eles começam com números primos, escolhem chaves privadas, geram e compartilham chaves públicas e, em seguida, geram uma chave secreta compartilhada.
O programa de teste fornece os números primos p e g.
Alice escolhe uma chave privada, a, maior que 1 e menor que p. Bob faz o mesmo para escolher uma chave privada b.
Alice calcula uma chave pública A.
A = gᵃ mod p
Usando os mesmos p e g, Bob calcula de forma semelhante uma chave pública B a partir de sua chave privada b.
Alice e Bob trocam as chaves públicas. Alice calcula a chave secreta s.
s = Bᵃ mod p
Bob calcula
s = Aᵇ mod p
Os cálculos produzem o mesmo resultado! Agora Alice e Bob compartilham o segredo s.
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 de verdade, mas segue um algoritmo que simula aleatoriedade.
Como esses "números aleatórios" são gerados por um algoritmo conhecido, eles não são realmente aleatórios.
Por isso, o módulo random não é adequado para criptografia e não deve ser usado,
justamente porque é pseudoaleatório.
O módulo chamado secrets gera
números "aleatórios" criptograficamente fortes, que oferecem a segurança maior exigida pela criptografia.
Eles ainda são pseudoaleatórios no sentido mais estrito, mas têm garantias de que os números que produzem são absolutamente imprevisíveis.
Como este é apenas um exercício de prática, usar o módulo random não tem problema, mas note que seria
muito inseguro se fosse realmente usado para criptografia.
Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.