Intercambio de claves Diffie-Hellman.
Alice y Bob usan el intercambio de claves Diffie-Hellman para compartir secretos. Empiezan con números primos, eligen claves privadas, generan y comparten claves públicas y, por último, generan una clave secreta compartida.
El programa de prueba proporciona los números primos p y g.
Alice elige una clave privada, a, mayor que 1 y menor que p. Bob hace lo mismo para elegir una clave privada b.
Alice calcula una clave pública A.
A = gᵃ mod p
Con los mismos p y g, Bob calcula de forma similar una clave pública B a partir de su clave privada b.
Alice y Bob intercambian sus claves públicas. Alice calcula la clave secreta s.
s = Bᵃ mod p
Bob calcula
s = Aᵇ mod p
¡Los cálculos producen el mismo resultado! Ahora Alice y Bob comparten el secreto s.
random o secrets aquí?A partir de Python 3.6, existen dos módulos diferentes para producir números «aleatorios»:
El módulo llamado random es pseudoaleatorio, lo que significa que no genera aleatoriedad verdadera, sino que sigue un algoritmo que simula la aleatoriedad.
Como estos «números aleatorios» se generan mediante un algoritmo conocido, no son verdaderamente aleatorios.
Por eso, el módulo random no es adecuado para la criptografía y no deberías usarlo, precisamente porque es pseudoaleatorio.
El módulo llamado secrets genera números «aleatorios» criptográficamente seguros que ofrecen la seguridad adicional que exige la criptografía.
En el sentido más estricto, siguen siendo pseudoaleatorios, pero tienen garantías de que los números que producen son absolutamente impredecibles.
Como este es solo un ejercicio de práctica, usar el módulo random está bien, pero ten en cuenta que sería muy inseguro si de verdad se usara para criptografía.
Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.