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, después, generan una clave secreta compartida.
El programa de pruebas suministra 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
Usando 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 las 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 la clave secreta s.
random o secrets aquí?A partir de Python 3.6, hay dos módulos distintos para generar 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.
En consecuencia, el módulo random no es adecuado para la criptografía y no debería usarse, precisamente porque es pseudoaleatorio.
El módulo llamado secrets genera números «aleatorios» criptográficamente fuertes que proporcionan la mayor seguridad que requiere la criptografía.
Siguen siendo pseudoaleatorios en el sentido más estricto, 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 se usara realmente para criptografía.
Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.