En Diffie-Hellman hay un entero grande que es primo, pero el otro no necesita ser grande, y tampoco necesita ser primo.
Con DH, los cálculos se realizan en forma de gran primo p . También se utiliza un generador llamado g : g "genera" los valores g i mod p . Si (virtualmente) calcula el gi módulo p , volverá a 1 en algún momento; el valor distinto de cero i tal que g i = 1 mod p se denomina orden de g (escribámoslo r ). Necesariamente, r divide p-1 .
Lo que DH necesita es que:
-
p es lo suficientemente grande para dificultar el logaritmo discreto ; digamos, al menos 1024 bits (la moda actual es 2048 bits, porque ahora se considera que 1024 bits son "un poco demasiado débiles" como en "irrompible por ahora, pero quizás en 20 años ...").
-
r debe tener al menos un factor primo q que sea lo suficientemente grande como para disuadir un logaritmo discreto; en este contexto, esto significa al menos 170 bits (de nuevo, las modas dictan 256 bits: a los criptógrafos les encantan los poderes de dos).
q y r no deben ser conocidos por las personas que realizan el DH. Si selecciona un p aleatorio del tamaño apropiado y un g aleatorio (como un valor entre 2 y p-2 , inclusive), entonces g estará bien con una probabilidad abrumadora (no sabrá r , y mucho menos q , pero sería extremadamente improbable que todos los factores primos de r sean cortos).
Sin embargo, podría intentar un poco más la elección de p ; por ejemplo, puede seleccionar p para que p = 2t + 1 donde t también sea primo. En este punto, cualquier g (entre 2 y p-2 ) tiene la garantía de tener un orden igual a cualquiera de t o 2t , para que pueda elegir g como mejor le parezca. En particular, puede elegir g = 2 , lo que hace que los cálculos sean un poco más rápidos.
Ninguno de los valores anteriores debe ser secreto. De hecho, se supone que ambas partes DH las conocen de antemano, por lo que no pueden ser secretas (si fueran secretas, sería un secreto compartido y no tendría que hacer Diffie-Hellman en absoluto, simplemente podría usar ese secreto compartido como es). Para ahorrar esfuerzo, puede reutilizar los valores publicados existentes para p y g , por ejemplo estos valores .